Metadata-Version: 2.1
Name: opswrapper
Version: 3.1.0
Summary: Python helpers for writing OpenSees scripts.
Home-page: https://github.com/otaithleigh/opswrapper
Author: Peter Talley
Author-email: ptalley2@vols.utk.edu
License: MIT
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
Requires-Dist: numpy
Requires-Dist: toml
Requires-Dist: xarray

opswrapper
++++++++++

Python wrappers and helpers for (Tcl) OpenSees analyses.


Installation
============

Conda::

    conda install -c otaithleigh opswrapper


Usage
=====

The objects provided in this package largely line up with their OpenSees Tcl
counterparts. The general workflow is to create a list of objects, and then call
``str`` on them while printing to a file. Each entry in the list will become a
line in the Tcl script, allowing for mixing of raw Tcl code and opswrapper
objects.


Simple Example
==============

.. code:: python

    import opswrapper as ops
    model = []
    model.append(ops.Model(ndm=2, ndf=3))
    model.append(ops.Node(1, 0, 0))
    model.append(ops.Node(2, 0, 10))
    model.append(ops.material.Elastic(1, 29000))
    model.append(ops.element.Truss(1, 1, 2, mat=1, A=10))
    print(*model, sep='\n')

Output::

    model basic -ndm 2 -ndf 3
    node 1 0 0
    node 2 0 10
    uniaxialMaterial Elastic 1 29000
    element truss 1 1 2 10 1


Formatting
==========

Objects can be formatted via multiple ways. The simplest is to convert them to
``str``:

.. code:: python

    >>> str(Elastic(1, 29000.))
    'uniaxialMaterial 1 29000'

A float format specifier may be specified when used with the built-in format
commands:

.. code:: python

    >>> format(Elastic(1, 29000.), 'e')
    'uniaxialMaterial 1 2.900000e+4'
    >>> f'{Elastic(1, 29000.):.2e}'
    'uniaxialMaterial 1 2.90e+04'

Specifiers for other types may be passed using the ``tcl_code`` method:

.. code:: python

    >>> Elastic(1, 29000.).tcl_code({int: '4d'})
    'uniaxialMaterial Elastic    1 29000'

Defaults can be set on a global basis using ``base.set_global_format_spec``, on a
per-class basis using ``cls.set_class_format_spec``, or on a per-object basis
using ``self.set_format_spec``:

.. code:: python

    >>> set_global_format_spec({float: '#.3g'})
    >>> section.Elastic2D.set_class_format_spec({float: '#.3g'})
    >>> s = section.Elastic2D(...)
    >>> s.set_format_spec({float: '#.3g'})

Each of these methods return the previously-set modifiers if you wish to restore
them later.


