From d3681f33439b8bd0d56b8b192f4c135c61a55111 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:56:54 +0100 Subject: [PATCH 01/18] doc: updating launching page with latest PyAnsys standards --- doc/source/index.rst | 49 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index a6f45fb..6d854c1 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -1,10 +1,47 @@ -.. - Just reuse the root readme to avoid duplicating the documentation. - Provide any documentation specific to your online documentation - here. +Ansys Engineering Workflow API documentation |version| +====================================================== + + +.. grid:: 1 2 2 2 + + + .. grid-item-card:: Getting started :fa:`person-running` + :padding: 2 2 2 2 + :link: getting_started/index + :link-type: doc + + Learn how to get started with the Ansys Engineering Workflow API. + This section guides you through the installation process. + + + .. grid-item-card:: User guide :fa:`book-open-reader` + :padding: 2 2 2 2 + :link: user_guide/index + :link-type: doc + + + Understand key concepts and learn how to use the Ansys Engineering Workflow API. + + + .. grid-item-card:: API reference :fa:`book-bookmark` + :padding: 2 2 2 2 + :link: api/index + :link-type: doc + + + Explore the Ansys Engineering Workflow API reference documentation. + + + .. grid-item-card:: Contribute :fa:`people-group` + :padding: 2 2 2 2 + :link: contributing/index + :link-type: doc + + + Learn how to contribute to the Ansys Engineering Workflow API codebase + or documentation. + -.. include:: ../../README.rst - :end-line: 62 .. toctree:: :hidden: From a822eb74a6f8feeed0117e8379aee0c5732fa7ed Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:09:20 +0100 Subject: [PATCH 02/18] fix: pdf build --- doc/source/conf.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/source/conf.py b/doc/source/conf.py index 88cf239..bd0bb9f 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -6,9 +6,13 @@ from ansys_sphinx_theme import ( ansys_favicon, + ansys_logo_white, + ansys_logo_white_cropped, get_autoapi_templates_dir_relative_path, get_version_match, + latex, pyansys_logo_black, + watermark, ) from ansys.engineeringworkflow.api import __version__ @@ -175,3 +179,11 @@ "manual", ), ] + +# additional logos for the latex coverpage +latex_additional_files = [watermark, ansys_logo_white, ansys_logo_white_cropped] + +# change the preamble of latex with customized title page +# variables are the title of pdf, watermark +latex_elements = {"preamble": latex.generate_preamble(html_title)} +sd_fontawesome_latex = True \ No newline at end of file From 4604525602f8df386ca089a8a156675c94bd5284 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:35:47 +0100 Subject: [PATCH 03/18] fix: pre-commit --- doc/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index bd0bb9f..c07a06d 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -186,4 +186,4 @@ # change the preamble of latex with customized title page # variables are the title of pdf, watermark latex_elements = {"preamble": latex.generate_preamble(html_title)} -sd_fontawesome_latex = True \ No newline at end of file +sd_fontawesome_latex = True From 1a8c9202a7b67b2f939ff5b543fd958a0f47d270 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:50:02 +0100 Subject: [PATCH 04/18] dix: pdf build --- doc/source/conf.py | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index c07a06d..51877e7 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -164,22 +164,6 @@ with open("links.rst") as f: rst_epilog += f.read() -# -- Options for LaTeX output ------------------------------------------------ -latex_elements = {} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - master_doc, - f"{project}-Documentation-{__version__}.tex", - f"{project} Documentation", - author, - "manual", - ), -] - # additional logos for the latex coverpage latex_additional_files = [watermark, ansys_logo_white, ansys_logo_white_cropped] @@ -187,3 +171,6 @@ # variables are the title of pdf, watermark latex_elements = {"preamble": latex.generate_preamble(html_title)} sd_fontawesome_latex = True + +linkcheck_exclude_documents = ["index", "getting_started/local/index", "assets"] +linkcheck_ignore = [r"https://github.com/ansys/pyansys-geometry-binaries/.*"] From 6b386dc4783ed8c409a27e34beb0ef673fb51b10 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 12:02:49 +0100 Subject: [PATCH 05/18] fix: typo --- doc/source/conf.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 51877e7..8c74e74 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -171,6 +171,3 @@ # variables are the title of pdf, watermark latex_elements = {"preamble": latex.generate_preamble(html_title)} sd_fontawesome_latex = True - -linkcheck_exclude_documents = ["index", "getting_started/local/index", "assets"] -linkcheck_ignore = [r"https://github.com/ansys/pyansys-geometry-binaries/.*"] From d8506bb0ce3fe0683c24a28e935931e0a58c3ed7 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:32:14 +0100 Subject: [PATCH 06/18] fix: removing fontawesome call --- doc/source/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 8c74e74..0e696f6 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -170,4 +170,3 @@ # change the preamble of latex with customized title page # variables are the title of pdf, watermark latex_elements = {"preamble": latex.generate_preamble(html_title)} -sd_fontawesome_latex = True From 23a5c2aa5fcae74d7c7a673e7c4cc8147d3f9599 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:53:05 +0100 Subject: [PATCH 07/18] maint: adding `texlive-fonts-extra` in ansys/actions dependency parameter --- .github/workflows/cicd.yml | 1 + doc/source/conf.py | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 5732108..039f8a1 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -89,6 +89,7 @@ jobs: uses: ansys/actions/doc-build@v5 with: python-version: ${{ env.MAIN_PYTHON_VERSION }} + dependencies: "texlive-fonts-extra " package: name: Package library diff --git a/doc/source/conf.py b/doc/source/conf.py index 0e696f6..e9318f4 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -170,3 +170,4 @@ # change the preamble of latex with customized title page # variables are the title of pdf, watermark latex_elements = {"preamble": latex.generate_preamble(html_title)} +sd_fontawesome_latex=True From f515faabd3eb81e75aee9ea5746ca90394e9d2d9 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:57:03 +0100 Subject: [PATCH 08/18] fix: pre-commit --- doc/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index e9318f4..8c74e74 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -170,4 +170,4 @@ # change the preamble of latex with customized title page # variables are the title of pdf, watermark latex_elements = {"preamble": latex.generate_preamble(html_title)} -sd_fontawesome_latex=True +sd_fontawesome_latex = True From 074de471689e26f842ce3c5ebd0f00f35e703cd0 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:07:23 +0100 Subject: [PATCH 09/18] doc: adding `latex_documents` section in `conf.py` --- doc/source/conf.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/doc/source/conf.py b/doc/source/conf.py index 8c74e74..b2436bf 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -164,6 +164,23 @@ with open("links.rst") as f: rst_epilog += f.read() + +# -- Options for LaTeX output ------------------------------------------------ +latex_elements = {} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + f"{project}-Documentation-{__version__}.tex", + f"{project} Documentation", + author, + "manual", + ), +] + # additional logos for the latex coverpage latex_additional_files = [watermark, ansys_logo_white, ansys_logo_white_cropped] From 694c6597666eac8a8cea0a83f9c5aecc53f2653b Mon Sep 17 00:00:00 2001 From: Kathy Pippert Date: Fri, 16 Feb 2024 11:54:23 -0500 Subject: [PATCH 10/18] Standarize README and doc sections --- README.rst | 82 +++++++++++++--------------- doc/source/contributing/index.rst | 76 ++++++++++++++------------ doc/source/getting_started/index.rst | 52 ++++++------------ doc/source/index.rst | 8 +-- doc/styles/Vocab/ANSYS/accept.txt | 2 +- 5 files changed, 101 insertions(+), 119 deletions(-) diff --git a/README.rst b/README.rst index d264b04..7a12724 100644 --- a/README.rst +++ b/README.rst @@ -5,67 +5,59 @@ Overview -------- The Ansys Engineering Workflow API is a Python package that provides a common interface for interacting with Ansys engineering workflow engines, -such as ModelCenter and OptiSLang. +such as ModelCenter and optiSLang. +Documentation and issues +------------------------ -Installation ------------- -The ``ansys-engineeringworkflow-api`` package currently supports Python -3.9 through 3.12 on Windows, MacOS and Linux. +Documentation for the latest stable release of the Ansys Engineering Workflow API is hosted +at `Ansys Engineering Workflow API documentation `_. -You can install ``ansys-engineeringworkflow-api`` with: +The documentation has four sections: -.. code:: +- `Getting started `_: Learn + how to install the Ansys Engineering Workflow API. +- `User guide `_: Understand how to + use the Ansys Engineering Workflow API. +- `API reference `_: Understand Ansys Engineering Workflow + API endpoints, their capabilities, and how to interact with them programmatically. +- `Contribute `_: Learn how to + contribute to the Ansys Engineering Workflow API codebase or documentation. - pip install ansys-engineeringworkflow-api +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. -Alternatively, install the latest version from `ansys-engineeringworkflow-api GitHub -`_ via: +On the `Ansys Engineering Workflow API Issues `_ +page, you can create issues to report bugs and request new features. On the +`Ansys Engineering Workflow API Discussions `_ +page or the `Discussions `_ page on the Ansys Developer portal, +you can post questions, share ideas, and get community feedback. -.. code:: +To reach the PyAnsys project support team, email `PyAnsys Core team `_. - pip install git+https://github.com/ansys/ansys-engineeringworkflow-api +License +------- +The Ansys Engineering Workflow API is licensed under the `MIT License `_. -For a local development version, you can install the development -version of the project with: - -.. code:: - - git clone https://github.com/ansys/ansys-engineeringworkflow-api.git - cd ansys-engineeringworkflow-api - pip install -e . - - -Documentation building ----------------------- - -Install the required dependencies for building the documentation with this -command: - -.. code:: bash - - pip install .[doc] - -Build and view documentation with the one or more commands for your -operating system: - -.. code:: bash - - # For Linux and MacOS - make -C doc/ html && your_browser_name doc/build/html/index.html - - # For Windows - .\doc\make.bat html - .\doc\build\html\index.html - +The Ansys Engineering Workflow API makes no commercial claim over Ansys whatsoever. This library extends the +functionality of interacting with Ansys engineering workflow engines, +such as ModelCenter and optiSLang, by adding a Python interface without changing the +core behavior or license of the original software. The use of the Ansys Engineering Workflow +API requires a legally licensed Ansys engineering workflow engine. +To get a copy of Ansys ModelCenter or optiSLang, see the `Ansys ModelCenter `_ +or `Ansys optiSLang `_ page on the Ansys website. TODO ---- +- [ ] Change URLs to use stable doc at release time - [ ] Finish documentation such that pre-commit works as intended -- [ ] Copy (manually, automatically?) main package documentation to README +- [ ] Copy (manually, automatically?) main package documentation to README (From Kathy: The README and doc landing + page should be different and are now working as intended.) - [ ] To/FromAPI String - No extension methods in Python, add to base interface explicitly? - Our string quoting rules per standard doc (Phoenix.ModelCenter.Common.ModelCenterUtils.EscapeString and UnescapeString) diff --git a/doc/source/contributing/index.rst b/doc/source/contributing/index.rst index 61abf53..5da1cab 100644 --- a/doc/source/contributing/index.rst +++ b/doc/source/contributing/index.rst @@ -5,37 +5,25 @@ Contribute Overall guidance on contributing to a PyAnsys library appears in the `Contributing `_ topic -in the *PyAnsys Developer's Guide*. Ensure that you are thoroughly familiar +in the *PyAnsys developer's guide*. Ensure that you are thoroughly familiar with this guide before attempting to contribute to Ansys Engineering Workflow API. The following contribution information is specific to Ansys Engineering Workflow API. -Installation ------------- - -The ``ansys-engineeringworkflow-api`` package currently supports Python -3.9 through 3.12 on Windows, MacOS, and Linux. - -You can install the ``ansys-engineeringworkflow-api`` package with this command: +Install in developer mode +------------------------- -.. code:: - - pip install ansys-engineeringworkflow-api +Installing the ``ansys-engineeringworkflow-api`` package in developer mode allows +you to modify the source and enhance it. As mentioned in :ref:`getting_started`, +this package supports Python 3.9 through 3.12 on Windows, MacOS, and Linux. -Alternatively, install the latest version from `ansys-engineeringworkflow-api GitHub -`_ with this command: - -.. code:: - - pip install git+https://github.com/ansys/ansys-engineeringworkflow-api - -For a local development version, you can create a new virtual environment with this command: +For a local development version, you can create a clean virtual environment with this command: .. code:: bash python -m venv .venv -You can then activate the virtual environment with the command appropriate for your operating system: +You can then activate this virtual environment with the command appropriate for your operating system: .. tab-set:: @@ -61,7 +49,8 @@ You can then activate the virtual environment with the command appropriate for y .\.venv\Scripts\activate -Next, install the development version of the project with these commands: +Next, install the development version of the ``ansys-engineeringworkflow-api`` package +with these commands: .. code:: @@ -80,7 +69,8 @@ Install the required dependencies for the documentation with this command: pip install .[doc] -For building documentation, you run the usual rules provided in the Sphinx Makefile for your operating system: +For building documentation, you run the usual rules provided in the Sphinx +Makefile for your operating system: .. tab-set:: @@ -106,23 +96,24 @@ For building documentation, you run the usual rules provided in the Sphinx Makef .\doc\make.bat html .\doc\build\html\index.html - Post issues ----------- -Use the `Ansys Engineering Workflow API Issues `_ page to submit questions, -report bugs, and request new features. When possible, use these issue -templates: - -* Bug report template -* Feature request template -* Documentation issue template -* Example request template +Use the `Ansys Engineering Workflow API Issues `_ +page to submit questions, report bugs, and request new features. -If your issue does not fit into one of these categories, create your own issue. +When possible, use the issue templates provided. If your issue does not fit into one +of thee template categories, you can click the link for opening a blank issue. To reach the PyAnsys support team, email `pyansys.core@ansys.com `_. +Style and testing +----------------- + +If required, from the command line, you can call commands like `black`_, `isort`_, and `flake8`_. You can +also call unit testing commands like `PyTest`_. However, running these commands does not +guarantee that your project is being tested in an isolated environment, which is why you +might consider using `tox`_. Testing ------- @@ -142,8 +133,8 @@ You can then run the tests via ``pytest`` with this command: Adhere to code style -------------------- -Ansys Engineering Workflow API follows the PEP8 standard as indicated in the -`PyAnsys Developer's Guide `_ and implements style checking using +The Ansys Engineering Workflow API follows the PEP8 standard as indicated in the +`PyAnsys developer's guide `_ and implements style checking using `pre-commit `_. To ensure your code meets minimum code styling standards, run these commands: @@ -173,3 +164,20 @@ This way, it's not possible for you to push code that fails the style checks: docformatter.............................................................Passed codespell................................................................Passed Validate GitHub Workflows................................................Passed + +Distributing +------------ + +If you would like to create either source or wheel files, start by running this +command to install the building requirements: + +.. code:: bash + + python -m pip install -e .[doc,tests] + +Then, run these commands: + +.. code:: bash + + python -m build + python -m twine check dist/* diff --git a/doc/source/getting_started/index.rst b/doc/source/getting_started/index.rst index 3427b42..ecf4eb6 100644 --- a/doc/source/getting_started/index.rst +++ b/doc/source/getting_started/index.rst @@ -1,13 +1,21 @@ +.. _getting_started: + Getting started =============== -Installation ------------- +The Ansys Engineering Workflow API supports Python 3.9 through 3.12 on Windows, +MacOS, and Linux. -Two installation modes of the ``ansys-engineeringworkflow-api`` package are provided: user and developer. +Two installation modes of the ``ansys-engineeringworkflow-api`` package +are provided: user and developer. This section describes how to install +in user mode. -Install in user mode -^^^^^^^^^^^^^^^^^^^^ +.. note:: + If you are interested in contributing to this package, see :ref:`ref_contribute` + for information on installing in developer mode. + +Installation +------------ Before installing the ``ansys-engineeringworkflow-api`` package, make sure that you have the latest version of `pip`_ with this command: @@ -22,35 +30,9 @@ Then, install the latest ``ansys-engineeringworkflow-api`` package with this com python -m pip install ansys-engineeringworkflow-api -Install in developer mode -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Installing the ``ansys-engineeringworkflow-api`` package in developer mode allows -you to modify the source and enhance it. -For more information, see :ref:`ref_contribute`. - -Style and testing ------------------ - -If required, you can call style commands (such as `black`_, `isort`_, -and `flake8`_) or unit testing commands (such as `pytest`_) from the command line. -However, this does not guarantee that your project is being tested in an isolated -environment, which is why you might consider using `tox`_. +Alternatively, you can install the latest version from this project's `GitHub repository +`_ with this command: +.. code:: -Distributing ------------- - -If you would like to create either source or wheel files, start by running this -command to install the building requirements: - -.. code:: bash - - python -m pip install -e .[doc,tests] - -Then, run these commands: - -.. code:: bash - - python -m build - python -m twine check dist/* + pip install git+https://github.com/ansys/ansys-engineeringworkflow-api diff --git a/doc/source/index.rst b/doc/source/index.rst index 6d854c1..ff0afa8 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -10,8 +10,7 @@ Ansys Engineering Workflow API documentation |version| :link: getting_started/index :link-type: doc - Learn how to get started with the Ansys Engineering Workflow API. - This section guides you through the installation process. + Learn how to install the Ansys Engineering Workflow API. .. grid-item-card:: User guide :fa:`book-open-reader` @@ -20,7 +19,7 @@ Ansys Engineering Workflow API documentation |version| :link-type: doc - Understand key concepts and learn how to use the Ansys Engineering Workflow API. + Learn how to use the Ansys Engineering Workflow API. .. grid-item-card:: API reference :fa:`book-bookmark` @@ -29,7 +28,8 @@ Ansys Engineering Workflow API documentation |version| :link-type: doc - Explore the Ansys Engineering Workflow API reference documentation. + Understand Ansys Engineering Workflow API endpoints, their capabilities, + and how to interact with them programmatically. .. grid-item-card:: Contribute :fa:`people-group` diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index c5240e7..8fec75f 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -5,5 +5,5 @@ API api Autosummary Makefile -pytest +PyTest Python \ No newline at end of file From fa191acc6d4f1e29892895b9517bb5f457c1be50 Mon Sep 17 00:00:00 2001 From: Kathy Pippert Date: Fri, 16 Feb 2024 12:23:21 -0500 Subject: [PATCH 11/18] Edits based on looking at rendered doc --- doc/source/contributing/index.rst | 34 ++++++++++++++-------------- doc/source/getting_started/index.rst | 2 +- doc/source/index.rst | 7 +++--- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/doc/source/contributing/index.rst b/doc/source/contributing/index.rst index 5da1cab..5543abd 100644 --- a/doc/source/contributing/index.rst +++ b/doc/source/contributing/index.rst @@ -6,16 +6,16 @@ Contribute Overall guidance on contributing to a PyAnsys library appears in the `Contributing `_ topic in the *PyAnsys developer's guide*. Ensure that you are thoroughly familiar -with this guide before attempting to contribute to Ansys Engineering Workflow API. +with this guide before attempting to contribute to the Ansys Engineering Workflow API. -The following contribution information is specific to Ansys Engineering Workflow API. +The following contribution information is specific to the Ansys Engineering Workflow API. Install in developer mode ------------------------- Installing the ``ansys-engineeringworkflow-api`` package in developer mode allows -you to modify the source and enhance it. As mentioned in :ref:`getting_started`, -this package supports Python 3.9 through 3.12 on Windows, MacOS, and Linux. +you to modify the source and enhance it. This package supports Python 3.9 through 3.12 +on Windows, MacOS, and Linux. For a local development version, you can create a clean virtual environment with this command: @@ -59,8 +59,8 @@ with these commands: pip install -e . -Documentation -------------- +Build documentation +------------------- Install the required dependencies for the documentation with this command: @@ -69,7 +69,7 @@ Install the required dependencies for the documentation with this command: pip install .[doc] -For building documentation, you run the usual rules provided in the Sphinx +To build documentation, run the usual rules provided in the Sphinx Makefile for your operating system: .. tab-set:: @@ -100,23 +100,23 @@ Post issues ----------- Use the `Ansys Engineering Workflow API Issues `_ -page to submit questions, report bugs, and request new features. +page to report bugs and request new features. When possible, use the issue templates provided. If your issue does not fit into one -of thee template categories, you can click the link for opening a blank issue. +of the template categories, you can click the link for opening a blank issue. To reach the PyAnsys support team, email `pyansys.core@ansys.com `_. -Style and testing ------------------ +Style and test +-------------- -If required, from the command line, you can call commands like `black`_, `isort`_, and `flake8`_. You can -also call unit testing commands like `PyTest`_. However, running these commands does not +If required, from the command line, you can call commands like `black`_, `isort`_, and `flake8`_. +You can also call unit testing commands like `PyTest`_. However, running these commands does not guarantee that your project is being tested in an isolated environment, which is why you might consider using `tox`_. -Testing -------- +Test +---- You can install the dependencies required for testing with this command: .. code:: bash @@ -165,8 +165,8 @@ This way, it's not possible for you to push code that fails the style checks: codespell................................................................Passed Validate GitHub Workflows................................................Passed -Distributing ------------- +Distribute +---------- If you would like to create either source or wheel files, start by running this command to install the building requirements: diff --git a/doc/source/getting_started/index.rst b/doc/source/getting_started/index.rst index ecf4eb6..cd5cfcd 100644 --- a/doc/source/getting_started/index.rst +++ b/doc/source/getting_started/index.rst @@ -30,7 +30,7 @@ Then, install the latest ``ansys-engineeringworkflow-api`` package with this com python -m pip install ansys-engineeringworkflow-api -Alternatively, you can install the latest version from this project's `GitHub repository +Alternatively, you can install the latest version from the project's `GitHub repository `_ with this command: .. code:: diff --git a/doc/source/index.rst b/doc/source/index.rst index ff0afa8..2e8b0d5 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -10,6 +10,7 @@ Ansys Engineering Workflow API documentation |version| :link: getting_started/index :link-type: doc + Learn how to install the Ansys Engineering Workflow API. @@ -19,7 +20,7 @@ Ansys Engineering Workflow API documentation |version| :link-type: doc - Learn how to use the Ansys Engineering Workflow API. + Learn how to use the Ansys Engineering Workflow API. .. grid-item-card:: API reference :fa:`book-bookmark` @@ -28,8 +29,8 @@ Ansys Engineering Workflow API documentation |version| :link-type: doc - Understand Ansys Engineering Workflow API endpoints, their capabilities, - and how to interact with them programmatically. + Understand Ansys Engineering Workflow API endpoints, their capabilities, + and how to interact with them programmatically. .. grid-item-card:: Contribute :fa:`people-group` From 7982d123a825213d473a7e148b02d0fe86bc6db0 Mon Sep 17 00:00:00 2001 From: Kathy Pippert Date: Fri, 16 Feb 2024 14:12:05 -0500 Subject: [PATCH 12/18] PY file edits --- doc/source/contributing/index.rst | 4 +- src/ansys/engineeringworkflow/api/__init__.py | 2 +- .../engineeringworkflow/api/datatypes.py | 56 ++--- .../engineeringworkflow/api/exceptions.py | 26 +-- .../engineeringworkflow/api/iasyncworkflow.py | 177 ++++++++-------- .../engineeringworkflow/api/iworkflow.py | 192 +++++++++--------- 6 files changed, 237 insertions(+), 220 deletions(-) diff --git a/doc/source/contributing/index.rst b/doc/source/contributing/index.rst index 5543abd..d578be4 100644 --- a/doc/source/contributing/index.rst +++ b/doc/source/contributing/index.rst @@ -107,8 +107,8 @@ of the template categories, you can click the link for opening a blank issue. To reach the PyAnsys support team, email `pyansys.core@ansys.com `_. -Style and test --------------- +Verify style and unit tests +--------------------------- If required, from the command line, you can call commands like `black`_, `isort`_, and `flake8`_. You can also call unit testing commands like `PyTest`_. However, running these commands does not diff --git a/src/ansys/engineeringworkflow/api/__init__.py b/src/ansys/engineeringworkflow/api/__init__.py index e678316..3b1ae2d 100644 --- a/src/ansys/engineeringworkflow/api/__init__.py +++ b/src/ansys/engineeringworkflow/api/__init__.py @@ -19,7 +19,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -"""Common API specification for all automated engineering workflow engines at ANSYS.""" +"""Common API specification for all automated engineering workflow engines at Ansys.""" try: import importlib.metadata as importlib_metadata diff --git a/src/ansys/engineeringworkflow/api/datatypes.py b/src/ansys/engineeringworkflow/api/datatypes.py index d81b100..a9d5607 100644 --- a/src/ansys/engineeringworkflow/api/datatypes.py +++ b/src/ansys/engineeringworkflow/api/datatypes.py @@ -19,7 +19,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -"""API Datatype definitions.""" +"""API datatype definitions.""" from __future__ import annotations from dataclasses import dataclass @@ -31,55 +31,60 @@ @dataclass(frozen=True) class WorkflowEngineInfo: - """Information about a workflow engine as collected by get_server_info call.""" + """Stores workflow engine information collected by the ``get_server_info`` call.""" # TODO: this style documentation does not appear to be working? release_year: int - """The year portion of the release, such as 2022.""" + """Year portion of the release, such as ``2022``.""" release_id: int - """The id portion of the release, such as 2 for 2022 R2.""" + """ID portion of the release, such as ``2`` for 2022 R2.""" build: int - """The build number.""" + """Build number.""" is_release_build: bool """ - True for production releases. + Whether the release is a production release. - False for development, alpha, beta, and other releases + The value is ``False`` for development, alpha, beta, and other releases. """ build_type: str """ - The build type. + Build type. - Must be blank for production releases. May include arbitrary information like the branch a - development build was built from. + This attribute must be blank for a production release. For other release types, it may include + arbitrary information like the branch a development build was built from. """ version_as_string: str """ - The version of the workflow engine encoded for human consumption. + Version of the workflow engine encoded for human consumption. - For example: - 2022r1 build 333 ALPHA + For example, ```2022r1 build 333 ALPHA```. """ server_type: str """ - What server type is responding to this request. + Server type that is responding to the request. - Will be a string similar to 'optiSLang' or 'ModelCenter' + The value is a string similar to ``'ModelCenter'`` or ``'optiSLang'``. """ install_location: Optional[str] """ - If the client is on the same box as the workflow engine, it may optionally provide the - installation folder. + Installation directory. - Typically server based products do not provide this field for security reasons. + If the client is on the same box as the workflow engine, this attribute may optionally provide + the installation folder. + + Typically server-based products do not provide this field for security reasons. """ base_url: Optional[str] - """If this is a server based product ready to receive incoming connections from remote clients, - this field may be provided that gives the base URL for clients to connect to.""" + """ + Base URL for clients to connect to. + + If this is a server-based product ready to receive incoming connections from remote clients, + this attribute may optionally provide the base URL for clients to connect to. + """ class WorkflowInstanceState(Enum): - """The state that a workflow instance can be in.""" + """Provides an enum with the states that a workflow instance can be in.""" UNKNOWN = 0 INVALID = 1 @@ -92,11 +97,12 @@ class WorkflowInstanceState(Enum): @dataclass(frozen=True) class Property: """ - A configurable setting on some component or algorithm in the workflow. + Provides a configurable setting on some component or algorithm in the workflow. - Cannot be linked to other variables or properties. Unless a property is explicitly, documented - as supporting it, these values should not be changed while the workflow is running. Examples - that may support modification would be convergence criteria for an optimization algorithm. + This class cannot be linked to other variables or properties. Unless a property is explicitly + documented as supporting it, these values should not be changed while the workflow is running. + Examples that may support modification would be convergence criteria for an optimization + algorithm. """ parent_element_id: str diff --git a/src/ansys/engineeringworkflow/api/exceptions.py b/src/ansys/engineeringworkflow/api/exceptions.py index fa15df1..c5b26cf 100644 --- a/src/ansys/engineeringworkflow/api/exceptions.py +++ b/src/ansys/engineeringworkflow/api/exceptions.py @@ -20,27 +20,27 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """ -Exception types. +.. _exceptions: -They allow for most of the expressive errors handling in common situations. +Exception types, which allow for handling expressive errors in common situations. """ class EngineInternalError(Exception): """ - The workflow engine has encountered an internal error. + Indicates that the workflow engine has encountered an internal error. - Errors of this type indicate that something has gone wrong with the workflow engine itself - during the requested operation. These errors should not usually be encountered and may indicate - the presence of a bug that should be reported to the engine maintainer. + An error of this type means that something has gone wrong with the workflow engine itself during + the requested operation. Such an error should not usually be encountered and may indicate the + presence of a bug that should be reported to the engine maintainer. """ class NameCollisionError(ValueError): """ - An operation failed because of a name collision. + Indicates that an operation has failed because of a name collision. - This means that the name requested is already in use and cannot be re-used. + An error of this type means that the name requested is already in use and cannot be reused. Engine maintainers should only raise this error if the operation in question is otherwise valid and could be retried successfully with a different, unique name. @@ -49,9 +49,11 @@ class NameCollisionError(ValueError): class ValueOutOfRangeError(ValueError): """ - An operation failed because the requested value is out of range. + Indicates that an operation has failed because the requested value is out of range. - This is most commonly used when an attempt to set a datapin value fails because the requested - value violates the datapin's boundaries or the datapin has enumerated values and the requested - value is not in the enumeration. + An error of this type is most commonly used when an attempt to set a datapin value fails + for one of these reasons: + + - The requested value violates the datapin's boundaries. + - The datapin has enumerated values and the requested value is not in the enumeration. """ diff --git a/src/ansys/engineeringworkflow/api/iasyncworkflow.py b/src/ansys/engineeringworkflow/api/iasyncworkflow.py index fdf0a92..56af219 100644 --- a/src/ansys/engineeringworkflow/api/iasyncworkflow.py +++ b/src/ansys/engineeringworkflow/api/iasyncworkflow.py @@ -23,13 +23,13 @@ Asynchronous API definitions. This module contains the common API for all Ansys workflow engines, written in an -asynchronous style. It has the exact same API as iworkflow module and any +asynchronous style. It has the exact same API as the ``IWorkflow`` module and any changes to one file must be made to the other. -Generally speaking, in addition to other exceptions that are otherwise noted, -implementations of this API may raise :class:`.exceptions.EngineInternalError` to indicate that -they have encountered an internal error that should be reported to the engine implementation -maintainer. +Generally speaking, in addition to the :ref:`exceptions` noted, implementations of +this API may raise the :class:`.exceptions.EngineInternalError` class to indicate +that an internal error has been encountered and should be reported to the engine +implementation maintainer. """ from __future__ import annotations @@ -45,20 +45,20 @@ class IAsyncWorkflowEngine(ABC): """ - Interface defines the common behavior for an engineering workflow engine. + Provides the interface defining the common behavior for an engineering workflow engine. - It can run and monitor instances. + This interface can run and monitor instances. """ @abstractmethod async def get_server_info(self) -> WorkflowEngineInfo: """ - Get information about the server that is serving this request. + Get information about the server that is serving the request. Returns ------- WorkflowEngineInfo - A WorkflowEngineInfo object with information about the server that is serving this + Object with the information about the server that is serving the request. """ ... @@ -66,19 +66,19 @@ async def get_server_info(self) -> WorkflowEngineInfo: class IAsyncFileBasedWorkflowEngine(IAsyncWorkflowEngine, ABC): """ - Extends IWorkflowEngine with calls. + Extends the ``IWorkflowEngine`` module with calls. - They need to be relevant for loading files from a local filesystem. + The calls must be relevant for loading files from a local filesystem. """ @abstractmethod async def load_workflow(self, file_name: Union[PathLike, str]) -> IAsyncWorkflowInstance: - """Load a workflow from a local file into the Engine.""" + """Load a workflow from a local file into the engine.""" ... class IAsyncWorkflowInstance(ABC): - """Representation of an instantiated workflow instance.""" + """Represents an instantiated workflow instance.""" @abstractmethod async def get_state(self) -> WorkflowInstanceState: @@ -99,35 +99,29 @@ async def run( Parameters ---------- inputs : Mapping[str, VariableState] - A map of datapin name to a VariableState object for all inputs to - be set before running. - reset : bool - Setting this to true will cause the workflow to be reset before running. This causes all - run components and data links to become invalid such that the workflow will run from the - beginning, but does not reset any input values that have been set to non-default values. - Note that setting datapin values could also implicitly reset some component's states. + Map of datapin names to ``VariableState`` objects for all inputs to + set before running the workflow. + reset : bool, default: False + Whether to reset the workflow before running. If this parameter is set + to ``True``, all run components and data links become invalid so that the + workflow runs from the beginning. However, it does not reset any input values + that have been set to non-default values. Note that setting datapin values + could also implicitly reset some the states of some components. validation_names : AbstractSet[str] - Supplying the names of the specific datapins or components that are - required to be valid may enable the workflow engine to shortcut - evaluation of the workflow. If this set is non-empty, the workflow - engine may choose which portions of the workflow are run to satisfy - the given datapins with the minimum runtime. + Names of the specific datapins or components that are required to be valid. + Setting names may enable the workflow engine to shortcut evaluation of the + workflow. If the set is non-empty, the workflow engine may choose which + portions of the workflow are run to satisfy the given datapins with the + minimum runtime. collect_names : AbstractSet[str] - Supplying the names of the specific datapins or elements here - will cause this function to return those values after running. If - an element is chosen, all of the children datapins recursively will - be included. + Names of the specific datapins or elements that are to cause the method + to return these values after running. If an element is specified, all + child datapins are recursively included. Raises ------ ValueOutOfRangeError - If one of the values in inputs violates its datapin's bounds or enumerated values. - - Returns - ------- - Mapping[str, VariableState] : - A map of output datapin names to VariableState objects for each datapin specified in - `collect_names`. + If one of the input values violates its datapin's bounds or enumerated values. """ ... @@ -141,22 +135,25 @@ async def start_run( Parameters ---------- inputs : Mapping[str, VariableState] - A map of datapin name to a VariableState object for all inputs to - be set before running. + Map of datapin names to ``VariableState`` objects`` for all inputs to + set before running the workflow. reset : bool - Setting this to true will cause the workflow to be reset before running. - Note that setting datapin values could also implicitly reset some component's states + Whether to reset the workflow before running. If this parameter is set + to ``True``, all run components and data links become invalid so that the + workflow runs from the beginning. However, it does not reset any input values + that have been set to non-default values. Note that setting datapin values + could also implicitly reset some the states of some components. validation_names : AbstractSet[str] - Supplying the names of the specific datapins or components that are - required to be valid may enable the workflow engine to shortcut - evaluation of the workflow. If this list is non-empty, the workflow - engine may choose which portions of the workflow are run to satisfy - the given datapins with the minimum runtime. + Names of the specific datapins or components that are required to be valid. + Setting names may enable the workflow engine to shortcut evaluation of the + workflow. If the set is non-empty, the workflow engine may choose which + portions of the workflow are run to satisfy the given datapins with the + minimum runtime. Raises ------ ValueOutOfRangeError - If one of the values in inputs violates its datapin's bounds or enumerated values. + If one of the input values violates its datapin's bounds or enumerated values. """ ... @@ -175,97 +172,98 @@ async def get_element_by_name(self, element_name: str) -> IAsyncElement: Parameters ---------- element_name : str - The name of the element to retrieve in dotted notation, e.g. "Root.Component.Thing". + Name of the element to retrieve in dotted notation. For example, + ``'Root.Component.Thing'``. """ ... class IAsyncElement(ABC): - """Any one of Component, Control Statement, or Datapin.""" + """Provides a component, control statement, or datapin.""" @property @abstractmethod def element_id(self) -> str: - """A unique ID for this element, assigned by the system.""" + """Unique ID for the element that is assigned by the system.""" ... @property @abstractmethod def parent_element_id(self) -> str: """ - The parent element's id. + Parent element's ID. - If this is the root element of the workflow, it will be a blank string. + If this is the root element of the workflow, the parent ID is a blank string. """ ... @abstractmethod async def get_parent_element(self) -> IAsyncElement: """ - Return the parent object of this element. + Get the parent object of the element. - If this is the root element of the workflow., it will return None. + If this is the root element of the workflow, the method returns ``None``. """ ... @property @abstractmethod def name(self): - """The name of this element.""" + """Name of the element.""" ... @property @abstractmethod def full_name(self) -> str: """ - The full name of this element. + Full name of the element. - It is returned in dotted notation starting from the root of the workflow. + The full name is returned in dotted notation, starting from the root of the workflow. """ ... @abstractmethod async def get_property(self, property_name: str) -> Property: - """Get a property by its property name.""" + """Get a property by its name.""" ... @abstractmethod async def get_property_names(self) -> AbstractSet[str]: - """Get the names of all of the properties.""" + """Get the names of all properties.""" ... @abstractmethod async def get_properties(self) -> Mapping[str, Property]: - """Get all of the properties of this element.""" + """Get all properties of the element.""" ... @abstractmethod async def set_property(self, property_name: str, property_value: IVariableValue) -> None: """ - Create or set a property on this element. + Create or set a property on the element. Parameters ---------- property_name : str - The name of the property to create or set + Name of the property to create or set. property_value : IVariableValue - The value of the property + Value of the property. """ ... class IAsyncDatapinContainer(ABC): - """An abstract base class for something that can contain datapins.""" + """Provides an abstract base class for something that can contain datapins.""" @abstractmethod async def get_datapins(self) -> Collection[IAsyncDatapin]: """ - Get the datapins in this container. + Get the datapins in the container. Returns ------- Mapping[str, IDatapin] - A map of the datapins in the container. The keys in the map are the short names of the + Map of the datapins in the container. The keys in the map are the short names of the datapins (relative to the container's name). """ ... @@ -273,70 +271,73 @@ async def get_datapins(self) -> Collection[IAsyncDatapin]: class IAsyncControlStatement(IAsyncElement, IAsyncDatapinContainer, ABC): """ - Element in the workflow that contains children and how they will be executed. + Provides an element in the workflow that contains children and how they are executed. - For example it can be a sequential, a parallel, a looping, a conditional or a Trade Study. + For example, it can be a sequential, parallel, looping, or conditional element or a trade study. """ @property @abstractmethod def control_type(self) -> str: - """Get the type of this control statement.""" + """Type of the control statement.""" ... @abstractmethod async def get_elements(self) -> Collection[IAsyncElement]: - """Get all the elements of this control statement.""" + """Get all elements of the control statement.""" ... class IAsyncComponent(IAsyncElement, IAsyncDatapinContainer, ABC): """ - A black box analysis. + Provides for a black box analysis. + + A black box analysis is defined as taking a set of inputs, executing, and returning a set of + outputs. - It is defined as taking a set of inputs, executing, and resulting in a set of outputs. + The black box may be a solver, simulation, co-simulation, calculation, or other third-party + analysis. While state may be kept as an optimization to help performance for slow-to-start + tools, the component definition does not require it so that the work can be parallelize onto an + HPC cluster. - May be a solver, simulation, co-simulation, calculation, or other third party analysis. While - state may be kept as an optimization to help performance for slow to start tools, the component - definition does not require it so that we can parallelize the work onto an HPC cluster. - Synonymous in our context with Integrations and Analysis. This is the preferred go forward term - to use in API and documentation about Engineering Workflow + The "black box" term is synonymous with integration and analysis. It is the preferred term used + in the Ansys Engineering Workflow API and documentation. """ @property @abstractmethod def pacz_url(self) -> Optional[str]: """ - The URL Reference to the PACZ file or directory. + URL to the PACZ file or directory. - May be an absolute or a relative URL. If relative, it is relative to the workflow - definition. While all components will be represented by PACZ definitions, in the short term - many components are not currently defined this way. If there is not a PACZ definition of - this component, this method will return None. In those cases you will have to fall back on - the engine specific methods to determine what type of component this is. + The URL may be absolute or relative. If relative, the URL must be relative to the workflow + definition. While all components are represented by PACZ definitions, in the short term, + many components are not currently defined in this way. If there is not a PACZ definition of + the component, the method returns ``None``. In such cases, you must fall back on + engine-specific methods to determine what type the component is. """ ... class IAsyncDatapin(IAsyncElement, ABC): """ - A runtime placeholder for some value of a particular type. + Provides a runtime placeholder for some value of a particular type. - Will change as the workflow runs and can be linked to other datapins via direct links or - equations + The placeholder changes as the workflow runs. It can be linked to other datapins via direct + links or equations. """ @abstractmethod async def get_metadata(self) -> CommonVariableMetadata: - """Get the metadata for this datapin.""" + """Get the metadata for the datapin.""" ... @abstractmethod async def get_state(self, hid: Optional[str] = None) -> VariableState: - """Get the state of this datapin.""" + """Get the state of the datapin.""" ... @abstractmethod async def set_state(self, state: VariableState) -> None: - """Set the state of this datapin.""" + """Set the state of the datapin.""" ... diff --git a/src/ansys/engineeringworkflow/api/iworkflow.py b/src/ansys/engineeringworkflow/api/iworkflow.py index d9515cf..35d2e5f 100644 --- a/src/ansys/engineeringworkflow/api/iworkflow.py +++ b/src/ansys/engineeringworkflow/api/iworkflow.py @@ -23,13 +23,13 @@ Synchronous API definitions. This module contains the common API for all Ansys workflow engines, written in a -synchronous style. It has the exact same API as iasyncworkflow module and any +synchronous style. It has the exact same API as the ``iasyncworkflow`` module and any changes to one file must be made to the other. -Generally speaking, in addition to other exceptions that are otherwise noted, -implementations of this API may raise :class:`.exceptions.EngineInternalError` to indicate that -they have encountered an internal error that should be reported to the engine implementation -maintainer. +Generally speaking, in addition to the :ref:`exceptions` noted, implementations of +this API may raise the :class:`.exceptions.EngineInternalError` class to indicate +that an internal error has been encountered and should be reported to the engine +implementation maintainer. """ from __future__ import annotations @@ -50,21 +50,21 @@ class IWorkflowEngine(ABC): """ - Interface for the Workflow Engine. + Provides the interface for the workflow engine. - It defines the common behavior for an engineering workflow engine that can run and monitor - instances. + This interface defines the common behavior for an engineering workflow engine that can run and + monitor instances. """ @abstractmethod def get_server_info(self) -> WorkflowEngineInfo: """ - Get information about the server that is serving this request. + Get information about the server that is serving the request. Returns ------- WorkflowEngineInfo - A WorkflowEngineInfo object with information about the server that is serving this + Object with information about the server that is serving the request. """ ... @@ -72,19 +72,19 @@ def get_server_info(self) -> WorkflowEngineInfo: class IFileBasedWorkflowEngine(IWorkflowEngine, ABC): """ - Enable to extend IWorkflowEngine with calls. + Extends the ``IWorkflowEngine`` module with calls. - The calls need to be relevant for loading files from a local filesystem. + The calls must be relevant for loading files from a local filesystem. """ @abstractmethod def load_workflow(self, file_name: Union[PathLike, str]) -> IWorkflowInstance: - """Load a workflow from a local file into the Engine.""" + """Load a workflow from a local file into the engine.""" ... class IWorkflowInstance(ABC): - """Representation of an instantiated workflow instance.""" + """Represents an instantiated workflow instance.""" @abstractmethod def get_state(self) -> WorkflowInstanceState: @@ -104,32 +104,35 @@ def run( Parameters ---------- inputs : Mapping[str, VariableState] - A map of datapin name to a VariableState object for all inputs to - be set before running. - reset : bool - Setting this to true will cause the workflow to be reset before running. - Note that setting datapin values could also implicitly reset some component's states + Map of datapin names to ``VariableState`` objects for all inputs to + set before running the workflow. + reset : bool, default: False + Whether to reset the workflow before running. If this parameter is set + to ``True``, all run components and data links become invalid so that the + workflow runs from the beginning. However, it does not reset any input values + that have been set to non-default values. Note that setting datapin values + could also implicitly reset some the states of some components. validation_names : AbstractSet[str] - Supplying the names of the specific datapins or components that are - required to be valid may enable the workflow engine to shortcut - evaluation of the workflow. If this list is non-empty, the workflow - engine may choose which portions of the workflow are run to satisfy - the given datapins with the minimum runtime. + Names of the specific datapins or components that are required to be valid. + Setting names may enable the workflow engine to shortcut evaluation of the + workflow. If the set is non-empty, the workflow engine may choose which + portions of the workflow are run to satisfy the given datapins with the + minimum runtime. collect_names : AbstractSet[str] - Supplying the names of the specific datapins or elements here - will cause this function to return those values after running. If - an element is chosen, all of the children datapins recursively will + Names of the specific datapins or elements that are to cause the method + to return these values after running. If an element is specified, all + child datapins are recursively included. Returns ------- Mapping[str, VariableState] - A map of output datapin names to VariableState objects for each datapin specified in - `collect_names`. + Map of output datapin names to ``VariableState`` objects for each datapin specified by + the ``collect_names``` parameter. Raises ------ ValueOutOfRangeError - If one of the values in inputs violates its datapin's bounds or enumerated values. + If one of the input values violates its datapin's bounds or enumerated values. be included. """ ... @@ -144,23 +147,25 @@ def start_run( Parameters ---------- inputs : Mapping[str, VariableState] - A map of datapin name to a VariableState object for all inputs to - be set before running. + Map of datapin names to ``VariableState`` objects`` for all inputs to + set before running the workflow. reset : bool - Setting this to true will cause the workflow to be reset before running. - Note that setting datapin values could also implicitly reset some component's states + Whether to reset the workflow before running. If this parameter is set + to ``True``, all run components and data links become invalid so that the + workflow runs from the beginning. However, it does not reset any input values + that have been set to non-default values. Note that setting datapin values + could also implicitly reset some the states of some components. validation_names : AbstractSet[str] - Supplying the names of the specific datapin or components that are - required to be valid may enable the workflow engine to shortcut - evaluation of the workflow. If this list is non-empty, the workflow - engine may choose which portions of the workflow are run to satisfy - the given datapins with the minimum runtime. + Names of the specific datapins or components that are required to be valid. + Setting names may enable the workflow engine to shortcut evaluation of the + workflow. If the set is non-empty, the workflow engine may choose which + portions of the workflow are run to satisfy the given datapins with the + minimum runtime. Raises ------ ValueOutOfRangeError - If one of the values in inputs violates its datapin's bounds or enumerated values. - be included. + If one of the input values violates its datapin's bounds or enumerated values. """ ... @@ -179,81 +184,82 @@ def get_element_by_name(self, element_name: str) -> IElement: Parameters ---------- element_name : str - The name of the element to retrieve in dotted notation, e.g. "Root.Component.Thing". + Name of the element to retrieve in dotted notation.For example, + ``'Root.Component.Thing'``. """ ... class IElement(ABC): - """Any one of Component, Control Statement, or Variable.""" + """Provides a component, control statement, or datapin.""" @property @abstractmethod def element_id(self) -> str: - """A unique ID for this element, assigned by the system.""" + """Unique ID for the element that is assigned by the system.""" ... @property @abstractmethod def parent_element_id(self) -> str: """ - The parent element's id. + Parent element's ID. - If this is the root element of the workflow, it will be a blank string. + If this is the root element of the workflow, the parent ID is a blank string. """ ... @abstractmethod def get_parent_element(self) -> Optional[IElement]: """ - Return the parent object of this element. + Get the parent object of this element. - If this is the root element of the workflow., it will return None. + If this is the root element of the workflow, the method returns ``None``. """ ... @property @abstractmethod def name(self) -> str: - """The name of this element.""" + """Name of the element.""" ... @property @abstractmethod def full_name(self) -> str: """ - The full name of this element. + Full name of the element. - It is returned in dotted notation starting from the root of the workflow. + The full name is returned in dotted notation, starting from the root of the workflow. """ ... @abstractmethod def get_property(self, property_name: str) -> Property: - """Get a property by its property name.""" + """Get a property by its name.""" ... @abstractmethod def get_property_names(self) -> AbstractSet[str]: - """Get the names of all of the properties.""" + """Get the names of all properties.""" ... @abstractmethod def get_properties(self) -> Mapping[str, Property]: - """Get all of the properties of this element.""" + """Get all properties of the element.""" ... @abstractmethod def set_property(self, property_name: str, property_value: IVariableValue) -> None: """ - Create or set a property on this element. + Create or set a property on the element. Parameters ---------- property_name : str - The name of the property to create or set + Name of the property to create or set. property_value : IVariableValue - The value of the property + Value of the property. """ ... @@ -262,17 +268,17 @@ def set_property(self, property_name: str, property_value: IVariableValue) -> No class IDatapinContainer(ABC): - """An abstract base class for something that can contain datapins.""" + """Provides an abstract base class for something that can contain datapins.""" @abstractmethod def get_datapins(self) -> Mapping[str, IDatapin]: """ - Get the datapins in this container. + Get the datapins in the container. Returns ------- Mapping[str, IDatapin] - A map of the datapins in the container. The keys in the map are the short names of the + Map of the datapins in the container. The keys in the map are the short names of the datapins (relative to the container's name). """ ... @@ -280,48 +286,50 @@ def get_datapins(self) -> Mapping[str, IDatapin]: class IControlStatement(IElement, IDatapinContainer, ABC): """ - Element in the workflow that contains children and how they will be executed. + Provides an element in the workflow that contains children and how they are executed. - For example it can be a sequential, a parallel, a looping, a conditional or a Trade Study. + For example, it can be a sequential, parallel, looping, or conditional element or a trade study. """ @property @abstractmethod def control_type(self) -> str: - """Get the type of this control statement.""" + """Type of the control statement.""" ... @abstractmethod def get_elements(self) -> Mapping[str, IElement]: """ - Get all the elements of this control statement. + Get all elements of the control statement. Because Python dictionaries are ordered, the order in which elements appear in the map - may be significant depending on the engine / workflow instance implementation; - for example, some workflows may execute each element in a control statement + may be significant, depending on the engine/workflow instance implementation. + For example, some workflows may execute each element in a control statement in a defined order, which should be reflected here. Returns ------- Mapping[str, IElement] - The child elements of this control statement. - Each key is the short name (relative to the parent element) of the corresponding - element object. + Child elements of the control statement. Each key is the short name (relative to + the parent element) of the corresponding element object. """ ... class IComponent(IElement, IDatapinContainer, ABC): """ - A black box analysis. + Provides for a black box analysis. + + A black box analysis is defined as taking a set of inputs, executing, and returning a set of + outputs. - It is defined as taking a set of inputs, executing, and resulting in a set of outputs. + The black box may be a solver, simulation, co-simulation, calculation, or other third-party + analysis. While state may be kept as an optimization to help performance for slow-to-start + tools, the component definition does not require it so that the work can be parallelize onto an + HPC cluster. - May be a solver, simulation, co-simulation, calculation, or other third party analysis. While - state may be kept as an optimization to help performance for slow to start tools, the component - definition does not require it so that we can parallelize the work onto an HPC cluster. - Synonymous in our context with Integrations and Analysis. This is the preferred go forward term - to use in API and documentation about Engineering Workflow + The "black box" term is synonymous with integration and analysis. It is the preferred term used + in the Ansys Engineering Workflow API and documentation. """ # TODO: Is there a URL type in Python instead of using string below? @@ -330,13 +338,13 @@ class IComponent(IElement, IDatapinContainer, ABC): @abstractmethod def pacz_url(self) -> Optional[str]: """ - The URL Reference to the PACZ file or directory. + URL to the PACZ file or directory. - May be an absolute or a relative URL. If relative, it is relative to the workflow - definition. While all components will be represented by PACZ definitions, in the short term - many components are not currently defined this way. If there is not a PACZ definition of - this component, this method will return None. In those cases you will have to fall back on - the engine specific methods to determine what type of component this is. + The URL may be absolute or relative. If relative, the URL must be relative to the workflow + definition. While all components are represented by PACZ definitions, in the short term, + many components are not currently defined in this way. If there is not a PACZ definition of + the component, the method returns ``None``. In such cases, you must fall back on + engine-specific methods to determine what type the component is. """ ... @@ -348,43 +356,43 @@ def pacz_url(self) -> Optional[str]: class IDatapin(IElement, ABC): """ - A runtime placeholder for some value of a particular type. + Provides a runtime placeholder for some value of a particular type. - Will change as the workflow runs and can be linked to other datapins via direct links or - equations + The placeholder changes as the workflow runs. It can be linked to other datapins via direct + links or equations. """ @abstractmethod def get_metadata(self) -> CommonVariableMetadata: - """Get the metadata for this datapin.""" + """Get the metadata for the datapin.""" ... @property @abstractmethod def value_type(self) -> VariableType: - """Get the type of value this datapin stores.""" + """Get the type of value that the datapin stores.""" @abstractmethod def get_state(self, hid: Optional[str] = None) -> VariableState: - """Get the state of this datapin.""" + """Get the state of the datapin.""" ... @abstractmethod def set_state(self, state: VariableState) -> None: - """Set the state of this datapin.""" + """Set the state of the datapin.""" ... @property @abstractmethod def is_input_to_component(self) -> bool: - """Get whether this datapin is an input in the context of the component it is on.""" + """Flag indicating if the datapin is an input in the context of the component it is on.""" @property @abstractmethod def is_input_to_workflow(self) -> bool: """ - Get whether this datapin is an input in the context of the overall workflow. + Flag indicating if the datapin is an input in the context of the overall workflow. - Variables which are inputs in the context of their component will not be in the overall + Variables that are inputs in the context of their components are not included in the overall workflow if they are the target of a link. """ From 45efd00b2395946b8c2d47ad6d5f12d33f2a47a2 Mon Sep 17 00:00:00 2001 From: Kathy Pippert Date: Fri, 16 Feb 2024 15:53:46 -0500 Subject: [PATCH 13/18] Edits based on looking at rendered doc --- doc/source/contributing/index.rst | 4 +-- doc/styles/Vocab/ANSYS/accept.txt | 2 +- .../engineeringworkflow/api/datatypes.py | 20 ++++++------- .../engineeringworkflow/api/exceptions.py | 6 +--- .../engineeringworkflow/api/iasyncworkflow.py | 14 ++++----- .../engineeringworkflow/api/iworkflow.py | 29 ++++++++++--------- 6 files changed, 37 insertions(+), 38 deletions(-) diff --git a/doc/source/contributing/index.rst b/doc/source/contributing/index.rst index d578be4..131f3d6 100644 --- a/doc/source/contributing/index.rst +++ b/doc/source/contributing/index.rst @@ -103,7 +103,7 @@ Use the `Ansys Engineering Workflow API Issues `_. @@ -111,7 +111,7 @@ Verify style and unit tests --------------------------- If required, from the command line, you can call commands like `black`_, `isort`_, and `flake8`_. -You can also call unit testing commands like `PyTest`_. However, running these commands does not +You can also call unit testing commands like `pytest`_. However, running these commands does not guarantee that your project is being tested in an isolated environment, which is why you might consider using `tox`_. diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index 8fec75f..c5240e7 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -5,5 +5,5 @@ API api Autosummary Makefile -PyTest +pytest Python \ No newline at end of file diff --git a/src/ansys/engineeringworkflow/api/datatypes.py b/src/ansys/engineeringworkflow/api/datatypes.py index a9d5607..8c659b4 100644 --- a/src/ansys/engineeringworkflow/api/datatypes.py +++ b/src/ansys/engineeringworkflow/api/datatypes.py @@ -42,7 +42,7 @@ class WorkflowEngineInfo: """Build number.""" is_release_build: bool """ - Whether the release is a production release. + Flag indicating if the release is a production release. The value is ``False`` for development, alpha, beta, and other releases. """ @@ -51,7 +51,7 @@ class WorkflowEngineInfo: Build type. This attribute must be blank for a production release. For other release types, it may include - arbitrary information like the branch a development build was built from. + arbitrary information like the branch that a development build was built from. """ version_as_string: str """ @@ -61,7 +61,7 @@ class WorkflowEngineInfo: """ server_type: str """ - Server type that is responding to the request. + Type of server that is responding to the request. The value is a string similar to ``'ModelCenter'`` or ``'optiSLang'``. """ @@ -69,8 +69,8 @@ class WorkflowEngineInfo: """ Installation directory. - If the client is on the same box as the workflow engine, this attribute may optionally provide - the installation folder. + If the client is on the same box as the workflow engine, this optional attribute may provide the + installation folder. Typically server-based products do not provide this field for security reasons. """ @@ -79,7 +79,7 @@ class WorkflowEngineInfo: Base URL for clients to connect to. If this is a server-based product ready to receive incoming connections from remote clients, - this attribute may optionally provide the base URL for clients to connect to. + this optional attribute may provide the base URL for clients to connect to. """ @@ -99,10 +99,10 @@ class Property: """ Provides a configurable setting on some component or algorithm in the workflow. - This class cannot be linked to other variables or properties. Unless a property is explicitly - documented as supporting it, these values should not be changed while the workflow is running. - Examples that may support modification would be convergence criteria for an optimization - algorithm. + This configurable setting cannot be linked to other variables or properties. Unless a property + is explicitly documented as supporting it, values should not be changed while the workflow is + running. Examples that may support modification would be convergence criteria for an + optimization algorithm. """ parent_element_id: str diff --git a/src/ansys/engineeringworkflow/api/exceptions.py b/src/ansys/engineeringworkflow/api/exceptions.py index c5b26cf..cd6b916 100644 --- a/src/ansys/engineeringworkflow/api/exceptions.py +++ b/src/ansys/engineeringworkflow/api/exceptions.py @@ -19,11 +19,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -""" -.. _exceptions: - -Exception types, which allow for handling expressive errors in common situations. -""" +"""Exception types, which allow for handling expressive errors in common situations.""" class EngineInternalError(Exception): diff --git a/src/ansys/engineeringworkflow/api/iasyncworkflow.py b/src/ansys/engineeringworkflow/api/iasyncworkflow.py index 56af219..45e89fb 100644 --- a/src/ansys/engineeringworkflow/api/iasyncworkflow.py +++ b/src/ansys/engineeringworkflow/api/iasyncworkflow.py @@ -26,7 +26,7 @@ asynchronous style. It has the exact same API as the ``IWorkflow`` module and any changes to one file must be made to the other. -Generally speaking, in addition to the :ref:`exceptions` noted, implementations of +Generally speaking, in addition to the exceptions already noted, implementations of this API may raise the :class:`.exceptions.EngineInternalError` class to indicate that an internal error has been encountered and should be reported to the engine implementation maintainer. @@ -106,7 +106,7 @@ async def run( to ``True``, all run components and data links become invalid so that the workflow runs from the beginning. However, it does not reset any input values that have been set to non-default values. Note that setting datapin values - could also implicitly reset some the states of some components. + could also implicitly reset the states of some components. validation_names : AbstractSet[str] Names of the specific datapins or components that are required to be valid. Setting names may enable the workflow engine to shortcut evaluation of the @@ -135,7 +135,7 @@ async def start_run( Parameters ---------- inputs : Mapping[str, VariableState] - Map of datapin names to ``VariableState`` objects`` for all inputs to + Map of datapin names to ``VariableState`` objects for all inputs to set before running the workflow. reset : bool Whether to reset the workflow before running. If this parameter is set @@ -224,7 +224,7 @@ def full_name(self) -> str: @abstractmethod async def get_property(self, property_name: str) -> Property: - """Get a property by its name.""" + """Get a property by name.""" ... @abstractmethod @@ -292,8 +292,8 @@ class IAsyncComponent(IAsyncElement, IAsyncDatapinContainer, ABC): """ Provides for a black box analysis. - A black box analysis is defined as taking a set of inputs, executing, and returning a set of - outputs. + A black box analysis is defined as taking a set of inputs, executing, and then returning a set + of outputs. The black box may be a solver, simulation, co-simulation, calculation, or other third-party analysis. While state may be kept as an optimization to help performance for slow-to-start @@ -314,7 +314,7 @@ def pacz_url(self) -> Optional[str]: definition. While all components are represented by PACZ definitions, in the short term, many components are not currently defined in this way. If there is not a PACZ definition of the component, the method returns ``None``. In such cases, you must fall back on - engine-specific methods to determine what type the component is. + engine-specific methods to determine what the component type is. """ ... diff --git a/src/ansys/engineeringworkflow/api/iworkflow.py b/src/ansys/engineeringworkflow/api/iworkflow.py index 35d2e5f..f5b8897 100644 --- a/src/ansys/engineeringworkflow/api/iworkflow.py +++ b/src/ansys/engineeringworkflow/api/iworkflow.py @@ -26,7 +26,7 @@ synchronous style. It has the exact same API as the ``iasyncworkflow`` module and any changes to one file must be made to the other. -Generally speaking, in addition to the :ref:`exceptions` noted, implementations of +Generally speaking, in addition to the exceptions already noted, implementations of this API may raise the :class:`.exceptions.EngineInternalError` class to indicate that an internal error has been encountered and should be reported to the engine implementation maintainer. @@ -111,7 +111,7 @@ def run( to ``True``, all run components and data links become invalid so that the workflow runs from the beginning. However, it does not reset any input values that have been set to non-default values. Note that setting datapin values - could also implicitly reset some the states of some components. + could also implicitly reset the states of some components. validation_names : AbstractSet[str] Names of the specific datapins or components that are required to be valid. Setting names may enable the workflow engine to shortcut evaluation of the @@ -127,13 +127,12 @@ def run( ------- Mapping[str, VariableState] Map of output datapin names to ``VariableState`` objects for each datapin specified by - the ``collect_names``` parameter. + the ``collect_names`` parameter. Raises ------ ValueOutOfRangeError If one of the input values violates its datapin's bounds or enumerated values. - be included. """ ... @@ -147,14 +146,14 @@ def start_run( Parameters ---------- inputs : Mapping[str, VariableState] - Map of datapin names to ``VariableState`` objects`` for all inputs to + Map of datapin names to ``VariableState`` objects for all inputs to set before running the workflow. reset : bool Whether to reset the workflow before running. If this parameter is set to ``True``, all run components and data links become invalid so that the workflow runs from the beginning. However, it does not reset any input values that have been set to non-default values. Note that setting datapin values - could also implicitly reset some the states of some components. + could also implicitly reset the states of some components. validation_names : AbstractSet[str] Names of the specific datapins or components that are required to be valid. Setting names may enable the workflow engine to shortcut evaluation of the @@ -184,7 +183,7 @@ def get_element_by_name(self, element_name: str) -> IElement: Parameters ---------- element_name : str - Name of the element to retrieve in dotted notation.For example, + Name of the element to retrieve in dotted notation. For example, ``'Root.Component.Thing'``. """ ... @@ -196,7 +195,11 @@ class IElement(ABC): @property @abstractmethod def element_id(self) -> str: - """Unique ID for the element that is assigned by the system.""" + """ + Unique ID for the element. + + This ID is assigned by the system. + """ ... @property @@ -212,7 +215,7 @@ def parent_element_id(self) -> str: @abstractmethod def get_parent_element(self) -> Optional[IElement]: """ - Get the parent object of this element. + Get the parent object of the element. If this is the root element of the workflow, the method returns ``None``. """ @@ -236,7 +239,7 @@ def full_name(self) -> str: @abstractmethod def get_property(self, property_name: str) -> Property: - """Get a property by its name.""" + """Get a property by name.""" ... @abstractmethod @@ -320,8 +323,8 @@ class IComponent(IElement, IDatapinContainer, ABC): """ Provides for a black box analysis. - A black box analysis is defined as taking a set of inputs, executing, and returning a set of - outputs. + A black box analysis is defined as taking a set of inputs, executing, and then returning a set + of outputs. The black box may be a solver, simulation, co-simulation, calculation, or other third-party analysis. While state may be kept as an optimization to help performance for slow-to-start @@ -344,7 +347,7 @@ def pacz_url(self) -> Optional[str]: definition. While all components are represented by PACZ definitions, in the short term, many components are not currently defined in this way. If there is not a PACZ definition of the component, the method returns ``None``. In such cases, you must fall back on - engine-specific methods to determine what type the component is. + engine-specific methods to determine what the component type is. """ ... From 126ff4126491c6fe0461d41767b8a32ca767161e Mon Sep 17 00:00:00 2001 From: Mike Belcher <12882940+mike-belcher@users.noreply.github.com> Date: Wed, 21 Feb 2024 01:51:53 -0500 Subject: [PATCH 14/18] Add link in user guide referring to PyModelCenter. (#46) Co-authored-by: Roberto Pastor Muela <37798125+RobPasMue@users.noreply.github.com> --- doc/source/user_guide/index.rst | 1 + doc/styles/Vocab/ANSYS/accept.txt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/source/user_guide/index.rst b/doc/source/user_guide/index.rst index 415d843..0930e74 100644 --- a/doc/source/user_guide/index.rst +++ b/doc/source/user_guide/index.rst @@ -1,2 +1,3 @@ User guide ========== +This repository is not intended for standalone use. Instead, refer to the `User Guide for PyModelCenter `. This package may be extended at some point in the future to support both optiSLang and ModelCenter. \ No newline at end of file diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index c5240e7..bd2c66d 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -5,5 +5,6 @@ API api Autosummary Makefile +optiSLang pytest -Python \ No newline at end of file +Python From 97346d46a7d19f1f8ab81e968634ead37674fe6e Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Wed, 21 Feb 2024 10:00:34 +0100 Subject: [PATCH 15/18] doc: removing TODO list from the `README` file --- README.rst | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/README.rst b/README.rst index 7a12724..dfb7666 100644 --- a/README.rst +++ b/README.rst @@ -50,26 +50,3 @@ API requires a legally licensed Ansys engineering workflow engine. To get a copy of Ansys ModelCenter or optiSLang, see the `Ansys ModelCenter `_ or `Ansys optiSLang `_ page on the Ansys website. - -TODO ----- - -- [ ] Change URLs to use stable doc at release time -- [ ] Finish documentation such that pre-commit works as intended -- [ ] Copy (manually, automatically?) main package documentation to README (From Kathy: The README and doc landing - page should be different and are now working as intended.) -- [ ] To/FromAPI String - - No extension methods in Python, add to base interface explicitly? - - Our string quoting rules per standard doc (Phoenix.ModelCenter.Common.ModelCenterUtils.EscapeString and UnescapeString) -- [ ] To/From Formatted String -- [ ] Scalar Types -- [ ] Array Types - - Strong typing of ndarray in numpy only added in version of numpy that doesn't support Python 3.7 -- [ ] File Types - - Use interface to separate behavior of files from library - - Implement default behavior -- [ ] Clone -- [ ] LinkingRules -- [ ] Variable Factory -- [ ] Variable State -- [ ] Variable Scope \ No newline at end of file From 754a5be6448f08b7a39032d77096cd74cddfcf5f Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Thu, 22 Feb 2024 16:32:26 +0100 Subject: [PATCH 16/18] doc: `User guide` and `README` changes --- README.rst | 16 ++++++---------- doc/source/user_guide/index.rst | 8 +++++++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.rst b/README.rst index dfb7666..dba66f6 100644 --- a/README.rst +++ b/README.rst @@ -4,8 +4,10 @@ Ansys Engineering Workflow API Overview -------- The Ansys Engineering Workflow API is a Python package that provides a -common interface for interacting with Ansys engineering workflow engines, -such as ModelCenter and optiSLang. +common interface for interacting with Ansys engineering workflow engines. + +It is not a standalone package. It is intended to be used in conjunction with +other PyAnsys libraries. Documentation and issues ------------------------ @@ -42,11 +44,5 @@ License The Ansys Engineering Workflow API is licensed under the `MIT License `_. -The Ansys Engineering Workflow API makes no commercial claim over Ansys whatsoever. This library extends the -functionality of interacting with Ansys engineering workflow engines, -such as ModelCenter and optiSLang, by adding a Python interface without changing the -core behavior or license of the original software. The use of the Ansys Engineering Workflow -API requires a legally licensed Ansys engineering workflow engine. - -To get a copy of Ansys ModelCenter or optiSLang, see the `Ansys ModelCenter `_ -or `Ansys optiSLang `_ page on the Ansys website. +The Ansys Engineering Workflow API makes no commercial claim over Ansys whatsoever. +This library is not intended for standalone use. \ No newline at end of file diff --git a/doc/source/user_guide/index.rst b/doc/source/user_guide/index.rst index 0930e74..4b0099a 100644 --- a/doc/source/user_guide/index.rst +++ b/doc/source/user_guide/index.rst @@ -1,3 +1,9 @@ User guide ========== -This repository is not intended for standalone use. Instead, refer to the `User Guide for PyModelCenter `. This package may be extended at some point in the future to support both optiSLang and ModelCenter. \ No newline at end of file + +This repository is not intended for standalone use. +The compatible libraries will soon be available on this webpage. + +.. Instead, refer to the +.. `User Guide for PyModelCenter `. +.. This package may be extended at some point in the future to support both optiSLang and ModelCenter. \ No newline at end of file From c5b1df2ac200f70f758b74dbf42c6dda94558a8f Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:24:42 +0100 Subject: [PATCH 17/18] Update doc/source/user_guide/index.rst Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --- doc/source/user_guide/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/user_guide/index.rst b/doc/source/user_guide/index.rst index 4b0099a..80bf45a 100644 --- a/doc/source/user_guide/index.rst +++ b/doc/source/user_guide/index.rst @@ -2,7 +2,7 @@ User guide ========== This repository is not intended for standalone use. -The compatible libraries will soon be available on this webpage. +Links to the compatible libraries will soon be available on this page. .. Instead, refer to the .. `User Guide for PyModelCenter `. From 1e88b6d658c317c2df0994b75d39e5150d1f59a2 Mon Sep 17 00:00:00 2001 From: Camille <78221213+clatapie@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:38:38 +0100 Subject: [PATCH 18/18] Update doc/source/user_guide/index.rst Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --- doc/source/user_guide/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/user_guide/index.rst b/doc/source/user_guide/index.rst index 80bf45a..aa32bbb 100644 --- a/doc/source/user_guide/index.rst +++ b/doc/source/user_guide/index.rst @@ -1,7 +1,7 @@ User guide ========== -This repository is not intended for standalone use. +The Ansys Engineering Workflow API is not intended for standalone use. Links to the compatible libraries will soon be available on this page. .. Instead, refer to the