Package: pyansys-tools-variableinterop
OverviewPyAnsys Tools Variable Interop contains definitions of the basic variables, types,
metadata, and values intended to provide interoperability between all products that
optionally choose to participate.CharacteristicsPyAnsys Tools Variable Interop has these key characteristics:Supports a minimal but complete set of formally defined data types for engineering work.Offers a standard base implementation in each supported language that matches the style and intent of
the given language.Implements the same standard data types and conversion rules as all ModelCenter products.Provides the following capabilities:To/from an “API” string (not intended for UI layer) to allow data transfer in human-readable format
across products and regionsTo/from human-readable display stringsTo/from binary blocks that are platform agnosticImplicit conversion to/from language primitives for lossless conversionsExplicit conversion for lossy conversionsUses thevisitor patternto make it easy and
reliable to add and reuse new operations with compile-time semantics. A data type library can
either make it easy to add new data types or make it easy to add new operations to the existing
data types. It is extremely hard to make both possible at the same time. Because this library
makes it easy to add new operations to the existing data types, adding new data types is not easy.Defines strongly the most commonly reused metadata.Provides a generic dictionary for custom metadata.Top-level itemsDescriptions follow of the top-level items in PyAnsys Tools Variable Interop:The base metadata type that all variable types extend isCommonVariableMetadata. Metadata is defined as the information
about a variable that is static and does not change when a
component or workflow is run.The value interface isIVariableValue. These values are defined so that
PyAnsys Tools Variable Interop knows how to properly convert from one type to
the other via language operators. Lossless conversions are implicit. Operations
that are lossy, such as converting a real value to an integer, are explicit.
Explicit conversions can throw an exception if there is an overflow or other
“bad data” situation.Project backgroundAfter 20 years of work on integration problems, a holistic review was performed around the
concept of a variable in some legacy codebases. No less than two dozen classes that represent a
variable were found. There were many more switch statements, where one data type needed to be
converted to another. This inconsistency brings about the following problems:The behavior of one capability within the product suite does not match that of other
capabilities, leading to confusion, bugs, and lost time.Switch statements are notorious for introducing bugs. People tend to cut and paste them, leading
to subtle maintenance issues as one is modified and the other diverges. There is no compile-time
type checking.Slight differences in data types (int32 versus int64) can lead to unexpected bugs, including disastrous
“bad data with no error” class issues.Seemingly simple tasks like reliably converting to a string or byte buffer and back are
surprisingly hard to do correctly in all edge cases. Worse, even if you get a “correct”
implementation, if it doesn’t match what is used at an API boundary by a different capability
or product, errors ensue.The standards and the standard implementations in several languages came out of this review.Documentation and issuesDocumentation for the latest stable release of this package is hosted atPyAnsys Tools Variable Interop documentation.In the upper right corner of the documentation’s title bar, there is an option for switching from
viewing the documentation for the latest stable release to viewing the documentation for the development
version or previously released versions.On thePyAnsys Tools Variable Interop Issuespage,
you can create issues to report bugs and request new features. On thePyAnsys Tools Variable Interop Discussionspage or theDiscussions pageon the Ansys Developer portal, you
can post questions, share ideas, and get community feedback.To reach the project support team, emailpyansys.core@ansys.com.InstallationThepyansys-tools-variableinteroppackage currently supports Python
3.9 through 3.12 on Windows, MacOS, and Linux.You can install this package with this command:pip install pyansys-tools-variableinteropAlternatively, install the latest version from thepyansys-tools-variableinteropGitHub repository
with this command:pip install git+https://github.com/ansys/pyansys-tools-variableinteropTo install a local development version of the project, run these commands:git clone https://github.com/ansys/pyansys-tools-variableinterop
cd pyansys-tools-variableinterop
pip install -e .Documentation buildingInstall the required dependencies for building the documentation with this
command:pipinstall.[doc]Build and view documentation with the one or more commands for your
operating system:# For Linux and MacOSmake-Cdoc/html&&your_browser_namedoc/build/html/index.html# For Windows.\doc\make.bathtml.\doc\build\html\index.htmlTestingInstall the dependencies required for testing with this command:pipinstall.[tests]Run the tests viapytestwith this command:pytest-vUsageYou can create values and metadata like any other Python object:importansys.tools.variableinteropasatviwidth=atvi.RealValue(3.1)widthwidth_metadata=atvi.RealMetadata()width_metadata.lower_bound=0.1var(width_metadata)LicensePyAnsys Tools Variable Interop is licensed under the MIT license.