diff --git a/doc/source/user_guide/concepts/concepts.rst b/doc/source/user_guide/concepts/concepts.rst index f7bba20fc9..c2b9bb3ac2 100644 --- a/doc/source/user_guide/concepts/concepts.rst +++ b/doc/source/user_guide/concepts/concepts.rst @@ -67,7 +67,7 @@ Concept summary --------------- This image summarizes the preceding concepts: -.. image:: ../images/drawings/field-breakdown.png +.. image:: ../../images/drawings/field-breakdown.png Operators @@ -79,7 +79,7 @@ You use :ref:`ref_dpf_operators_reference` to create, transform, and stream the - The input and output pins, like those in an integrated circuit in electronics, submit data to the operator and output the computed result from the operator. -.. image:: ../images/drawings/OperatorPins.png +.. image:: ../../images/drawings/OperatorPins.png Workflows --------- @@ -90,10 +90,10 @@ to operators, which computes requested outputs. Think of a workflow as a black box in which some operators are chained, computing the information for which the workflow is made: -.. image:: ../images/drawings/Workflow1.png +.. image:: ../../images/drawings/Workflow1.png The following image shows operators that have been chained together to create a total deformation workflow. You can use this workflow in any simulation workflow with any data sources as inputs. -.. image:: ../images/drawings/Workflow2.png +.. image:: ../../images/drawings/Workflow2.png diff --git a/doc/source/user_guide/concepts/index.rst b/doc/source/user_guide/concepts/index.rst index ebaaf9257a..92bd2d63ad 100644 --- a/doc/source/user_guide/concepts/index.rst +++ b/doc/source/user_guide/concepts/index.rst @@ -1,44 +1,28 @@ -.. _ref_concepts: +.. _ref_concepts_index: -======== Concepts -======== +-------- -This section provides in-depth descriptions and explanations of DPF concepts, including terminology. +.. grid:: 3 + :gutter: 2 -DPF concepts -~~~~~~~~~~~~ - -.. toctree:: - :hidden: - - concepts.rst - waysofusing.rst - stepbystep.rst - - -.. card-carousel:: 2 - - .. card:: Concepts and terminology + .. grid-item-card:: Concepts and terminology :link: user_guide_concepts :link-type: ref - :width: 25% :text-align: center .. image:: ../images/drawings/book-logo.png - .. card:: Ways of using DPF + .. grid-item-card:: Ways of using DPF :link: user_guide_waysofusing :link-type: ref - :width: 25% :text-align: center .. image:: ../images/drawings/using-dpf.png - .. card:: Using DPF: Step by step + .. grid-item-card:: Using DPF: Step by step :link: user_guide_stepbystep :link-type: ref - :width: 25% :text-align: center - .. image:: ../images/drawings/checklist.png + .. image:: ../images/drawings/checklist.png \ No newline at end of file diff --git a/doc/source/user_guide/concepts/stepbystep.rst b/doc/source/user_guide/concepts/stepbystep.rst index 1c72c53db8..55b9caad74 100644 --- a/doc/source/user_guide/concepts/stepbystep.rst +++ b/doc/source/user_guide/concepts/stepbystep.rst @@ -53,11 +53,11 @@ Define fields A **field** is a container of simulation data. In numerical simulations, result data is defined by values associated with entities: -.. image:: ../images/drawings/values-entities.png +.. image:: ../../images/drawings/values-entities.png Therefore, a field of data might look something like this: -.. image:: ../images/drawings/field.png +.. image:: ../../images/drawings/field.png This code shows how to define a field from scratch: @@ -83,7 +83,7 @@ be a set of mesh IDs, geometric entity IDs, time domain, or frequency domain. You specify the set of entities by defining a range of IDs: -.. image:: ../images/drawings/scoping-eg.png +.. image:: ../../images/drawings/scoping-eg.png You must define a scoping prior to its use in the transformation data workflow. @@ -109,13 +109,13 @@ A **field container** holds a set of fields. It is used mainly for transient, harmonic, modal, or multi-step analyses. This image explains its structure: -.. image:: ../images/drawings/field-con-overview.png +.. image:: ../../images/drawings/field-con-overview.png A field container is a vector of fields. Fields are ordered with labels and IDs. Most commonly, a field container is scoped on the time label, and the IDs are the time or frequency sets: -.. image:: ../images/drawings/field-con.png +.. image:: ../../images/drawings/field-con.png You can define a field container in multiple ways: @@ -162,14 +162,14 @@ An operator takes input from a field, field container, or scoping using an input pin. Based on what it is designed to do, the operator computes an output that it passes to a field or field container using an output pin. -.. image:: ../images/drawings/circuit.png +.. image:: ../../images/drawings/circuit.png Comprehensive information on operators is available in :ref:`ref_dpf_operators_reference`. In the **Available Operators** area for either the **Entry** or **Premium** operators, you can either type a keyword in the **Search** option or browse by operator categories: -.. image:: ../images/drawings/help-operators.png +.. image:: ../../images/drawings/help-operators.png The page for each operator describes how the operator transforms data, indicates input and output data, and provides usage examples. @@ -185,7 +185,7 @@ Defining an operator consists of three steps: This image shows how the page for an operator provides a usage example for each available language (IronPython, CPython, and C++). -.. image:: ../images/drawings/operator-def.png +.. image:: ../../images/drawings/operator-def.png This code shows how to define an operator from a model: @@ -210,7 +210,7 @@ the input to another operator. This image shows how you would get the norm of a resulting vector from the dot product of two vectors: -.. image:: ../images/drawings/connect-operators.png +.. image:: ../../images/drawings/connect-operators.png This code shows how to define a generic workflow that computes the minimum of displacement by chaining the ``U`` and ``min_max_fc`` operators: diff --git a/doc/source/user_guide/concepts/waysofusing.rst b/doc/source/user_guide/concepts/waysofusing.rst index 25077c38da..4887669f38 100644 --- a/doc/source/user_guide/concepts/waysofusing.rst +++ b/doc/source/user_guide/concepts/waysofusing.rst @@ -29,7 +29,7 @@ enabled using the DPF Server application. These capabilities can be accessed through client APIs, as shown here: -.. image:: ../images/drawings/apis_2.png +.. image:: ../../images/drawings/apis_2.png 1. DPF server application can be accessed using Ansys Inc product, or DPF Server package (see :ref:`ref_dpf_server`) available on the Customer portal. @@ -71,7 +71,7 @@ files. You can use it to generate TH-plots, screenshots, and animations or to create custom result plots using the `numpy `_ and `matplotlib `_ packages. -.. image:: ../images/drawings/dpf-reports.png +.. image:: ../../images/drawings/dpf-reports.png Mechanical ~~~~~~~~~~ @@ -79,4 +79,4 @@ Mechanical Use it to perform custom postprocessing and visualization of results directly within the Mechanical application. -.. image:: ../images/drawings/dpf-mech.png \ No newline at end of file +.. image:: ../../images/drawings/dpf-mech.png \ No newline at end of file diff --git a/doc/source/user_guide/create_sites_for_python_operators.ps1 b/doc/source/user_guide/how-to/create_sites_for_python_operators.ps1 similarity index 100% rename from doc/source/user_guide/create_sites_for_python_operators.ps1 rename to doc/source/user_guide/how-to/create_sites_for_python_operators.ps1 diff --git a/doc/source/user_guide/create_sites_for_python_operators.sh b/doc/source/user_guide/how-to/create_sites_for_python_operators.sh similarity index 100% rename from doc/source/user_guide/create_sites_for_python_operators.sh rename to doc/source/user_guide/how-to/create_sites_for_python_operators.sh diff --git a/doc/source/user_guide/custom_operator_example.py b/doc/source/user_guide/how-to/custom_operator_example.py similarity index 100% rename from doc/source/user_guide/custom_operator_example.py rename to doc/source/user_guide/how-to/custom_operator_example.py diff --git a/doc/source/user_guide/custom_operators.rst b/doc/source/user_guide/how-to/custom_operators.rst similarity index 97% rename from doc/source/user_guide/custom_operators.rst rename to doc/source/user_guide/how-to/custom_operators.rst index 1e211bd5b0..3f521303b1 100644 --- a/doc/source/user_guide/custom_operators.rst +++ b/doc/source/user_guide/how-to/custom_operators.rst @@ -34,8 +34,8 @@ installer's Python interpreter. #. Download the script for you operating system: - - For Windows, download this :download:`PowerShell script `. - - For Linux, download this :download:`Shell script ` + - For Windows, download this :download:`PowerShell script `. + - For Linux, download this :download:`Shell script ` #. Run the downloaded script for installing with optional arguments: @@ -48,8 +48,8 @@ If you ever want to uninstall the ``ansys-dpf-core`` module from the Ansys insta #. Download the script for your operating system: - - For Windows, download this :download:`PowerShell script `. - - For Linux, download this :download:`Shell script `. + - For Windows, download this :download:`PowerShell script `. + - For Linux, download this :download:`Shell script `. 3. Run the downloaded script for uninstalling with the optional argument: diff --git a/doc/source/user_guide/custom_operators_deps.rst b/doc/source/user_guide/how-to/custom_operators_deps.rst similarity index 94% rename from doc/source/user_guide/custom_operators_deps.rst rename to doc/source/user_guide/how-to/custom_operators_deps.rst index 754b587947..9ee680ba8f 100644 --- a/doc/source/user_guide/custom_operators_deps.rst +++ b/doc/source/user_guide/how-to/custom_operators_deps.rst @@ -23,8 +23,8 @@ For this approach, do the following: #. Download the script for your operating system: - - For Windows, download this :download:`PowerShell script `. - - For Linux, download this :download:`Shell script `. + - For Windows, download this :download:`PowerShell script `. + - For Linux, download this :download:`Shell script `. 3. Run the downloaded script with the mandatory arguments: diff --git a/doc/source/user_guide/custom_plugin.xml b/doc/source/user_guide/how-to/custom_plugin.xml similarity index 100% rename from doc/source/user_guide/custom_plugin.xml rename to doc/source/user_guide/how-to/custom_plugin.xml diff --git a/doc/source/user_guide/how-to/index.rst b/doc/source/user_guide/how-to/index.rst new file mode 100644 index 0000000000..821a728ae1 --- /dev/null +++ b/doc/source/user_guide/how-to/index.rst @@ -0,0 +1,39 @@ +.. _ref_how_to: + +Enriching DPF capabilities +---------------------------------------- + +.. grid:: 3 + :gutter: 2 + + .. grid-item-card:: Create custom operators and plugins + :link: user_guide_custom_operators + :link-type: ref + :text-align: center + + .. image:: ../images/drawings/plugin-logo.png + :width: 50% + + + .. grid-item-card:: Switch between local and remote server + :link: user_guide_server_types + :link-type: ref + :text-align: center + + .. image:: ../images/drawings/remote_machines.png + + + .. grid-item-card:: Access Entry and Premium capabilities + :link: user_guide_server_context + :link-type: ref + :text-align: center + + .. image:: ../images/drawings/entry_premium.png + + + .. grid-item-card:: Configure DPF plugins load + :link: user_guide_xmlfiles + :link-type: ref + :text-align: center + + .. image:: ../images/drawings/xml.png \ No newline at end of file diff --git a/doc/source/user_guide/install_ansys_dpf_core_in_ansys.ps1 b/doc/source/user_guide/how-to/install_ansys_dpf_core_in_ansys.ps1 similarity index 100% rename from doc/source/user_guide/install_ansys_dpf_core_in_ansys.ps1 rename to doc/source/user_guide/how-to/install_ansys_dpf_core_in_ansys.ps1 diff --git a/doc/source/user_guide/install_ansys_dpf_core_in_ansys.sh b/doc/source/user_guide/how-to/install_ansys_dpf_core_in_ansys.sh similarity index 100% rename from doc/source/user_guide/install_ansys_dpf_core_in_ansys.sh rename to doc/source/user_guide/how-to/install_ansys_dpf_core_in_ansys.sh diff --git a/doc/source/user_guide/server_context.rst b/doc/source/user_guide/how-to/server_context.rst similarity index 100% rename from doc/source/user_guide/server_context.rst rename to doc/source/user_guide/how-to/server_context.rst diff --git a/doc/source/user_guide/server_types.rst b/doc/source/user_guide/how-to/server_types.rst similarity index 100% rename from doc/source/user_guide/server_types.rst rename to doc/source/user_guide/how-to/server_types.rst diff --git a/doc/source/user_guide/uninstall_ansys_dpf_core_in_ansys.ps1 b/doc/source/user_guide/how-to/uninstall_ansys_dpf_core_in_ansys.ps1 similarity index 100% rename from doc/source/user_guide/uninstall_ansys_dpf_core_in_ansys.ps1 rename to doc/source/user_guide/how-to/uninstall_ansys_dpf_core_in_ansys.ps1 diff --git a/doc/source/user_guide/uninstall_ansys_dpf_core_in_ansys.sh b/doc/source/user_guide/how-to/uninstall_ansys_dpf_core_in_ansys.sh similarity index 100% rename from doc/source/user_guide/uninstall_ansys_dpf_core_in_ansys.sh rename to doc/source/user_guide/how-to/uninstall_ansys_dpf_core_in_ansys.sh diff --git a/doc/source/user_guide/xmlfiles.rst b/doc/source/user_guide/how-to/xmlfiles.rst similarity index 100% rename from doc/source/user_guide/xmlfiles.rst rename to doc/source/user_guide/how-to/xmlfiles.rst diff --git a/doc/source/user_guide/how_to.rst b/doc/source/user_guide/how_to.rst deleted file mode 100644 index 8d4247b932..0000000000 --- a/doc/source/user_guide/how_to.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. _ref_how_to: - -How-tos -~~~~~~~ - -.. toctree:: - :hidden: - - plotting.rst - custom_operators.rst - dpf_server.rst - server_types.rst - server_context.rst - xmlfiles.rst - - -.. card-carousel:: 2 - - .. card:: Plot - :link: user_guide_plotting - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/plotting/pontoon.png - .. image:: ../images/plotting/pontoon_strain.png - - - .. card:: Create custom operators - :link: user_guide_custom_operators - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/plugin-logo.png - :width: 50% - - - .. card:: Use DPF Server package - :link: ref_dpf_server - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/dpf_server_client.png - - -.. card-carousel:: 2 - - .. card:: Switch between local and remote server - :link: user_guide_server_types - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/remote_machines.png - - .. card:: Access Entry and Premium capabilities - :link: user_guide_server_context - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/entry_premium.png - - - .. card:: Use DPF XML Files - :link: user_guide_xmlfiles - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/xml.png \ No newline at end of file diff --git a/doc/source/user_guide/index.rst b/doc/source/user_guide/index.rst index 65b8cf0a28..2095c6699c 100644 --- a/doc/source/user_guide/index.rst +++ b/doc/source/user_guide/index.rst @@ -11,18 +11,55 @@ computation, customization, and remote postprocessing accessible in Python. The goals of this section are to: - Describe the most-used DPF entities and how they can help you to access and modify solver data. - - Provide simple how-tos for tackling the most common use cases. + - Provide simple tutorials for tackling the most common use cases. + - Explain how to customize DPF behavior. + - Present some systematic approaches to determine the cause of a malfunction or failure when using DPF. +.. include:: + concepts/index.rst + +.. include:: + tutorials/index.rst .. include:: - main_entities.rst + how-to/index.rst .. include:: - how_to.rst + troubleshooting/index.rst + + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: Concepts + concepts/concepts.rst + concepts/waysofusing.rst + concepts/stepbystep.rst -Troubleshooting -~~~~~~~~~~~~~~~ +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: Tutorials + + tutorials/model.rst + tutorials/operators.rst + tutorials/fields_container.rst + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: Accessing and enriching DPF capabilities + + how-to/plotting.rst + how-to/custom_operators.rst + how-to/server_context.rst + how-to/server_types.rst + how-to/xmlfiles.rst .. toctree:: - troubleshooting + :maxdepth: 1 + :hidden: + :caption: Troubleshooting + + troubleshooting/troubleshooting.rst diff --git a/doc/source/user_guide/main_entities.rst b/doc/source/user_guide/main_entities.rst deleted file mode 100644 index b98991d0f0..0000000000 --- a/doc/source/user_guide/main_entities.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _ref_main_entities: - -DPF most-used entities -~~~~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :hidden: - - model - operators - fields_container - -.. card-carousel:: 2 - - .. card:: DPF model - :link: user_guide_model - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/model.png - - .. card:: Fields container and fields - :link: ref_user_guide_fields_container - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/field.png - - .. card:: Operators - :link: ref_user_guide_operators - :link-type: ref - :width: 25% - :text-align: center - - .. image:: ../images/drawings/small_operator.svg - - - - - - diff --git a/doc/source/user_guide/troubleshooting/index.rst b/doc/source/user_guide/troubleshooting/index.rst new file mode 100644 index 0000000000..ee6250df72 --- /dev/null +++ b/doc/source/user_guide/troubleshooting/index.rst @@ -0,0 +1,39 @@ +.. _ref_troubleshooting_index: + +Troubleshooting +--------------- + +.. grid:: 3 + :gutter: 2 + + .. grid-item-card:: Server issues + :link: ref_server_issues + :link-type: ref + :text-align: center + + Start the DPF server + + Connect to the DPF server + + Import the pydpf-core package + + .. grid-item-card:: Model issues + :link: ref_model_issues + :link-type: ref + :text-align: center + + Invalid UTF-8 error + + .. grid-item-card:: Plotting issues + :link: ref_plotting_issues + :link-type: ref + :text-align: center + + .. grid-item-card:: Performance issues + :link: ref_performance_issues + :link-type: ref + :text-align: center + + Get and set a field's data + + Autocompletion in notebooks \ No newline at end of file diff --git a/doc/source/user_guide/troubleshooting.rst b/doc/source/user_guide/troubleshooting/troubleshooting.rst similarity index 94% rename from doc/source/user_guide/troubleshooting.rst rename to doc/source/user_guide/troubleshooting/troubleshooting.rst index 86fc50f5c2..8b2edc150d 100644 --- a/doc/source/user_guide/troubleshooting.rst +++ b/doc/source/user_guide/troubleshooting/troubleshooting.rst @@ -3,11 +3,15 @@ =============== Troubleshooting =============== + This page explains how to resolve the most common issues encountered when using PyDPF-Core. It also includes suggestions for improving scripts. +.. _ref_server_issues: + +============== Server issues -------------- +============== Start the DPF server ~~~~~~~~~~~~~~~~~~~~~ @@ -38,8 +42,11 @@ If an error lists missing modules, see :ref:`ref_compatibility`. For ``PyDPF-Core``<0.10.0, the `ansys.grpc.dpf `_ module should always be synchronized with its server version. +.. _ref_model_issues: + +============ Model issues ------------- +============ Invalid UTF-8 error ~~~~~~~~~~~~~~~~~~~ @@ -66,8 +73,11 @@ Then, with result files reproducing this issue, you can prevent the warning from However, the preceding code disables the reading and generation of the available results for the model. Any static results that are available for the model are used instead. +.. _ref_plotting_issues: + +=============== Plotting issues ---------------- +=============== When trying to plot a result with DPF, the following error might be raised: @@ -84,8 +94,11 @@ In that case, simply install `PyVista `_` with this comman Another option is to install PyVista along with PyDPF-Core. For more information, see :ref:`Install with plotting capabilities` +.. _ref_performance_issues: + +================== Performance issues ------------------- +================== Get and set a field's data ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/source/user_guide/fields_container.rst b/doc/source/user_guide/tutorials/fields_container.rst similarity index 100% rename from doc/source/user_guide/fields_container.rst rename to doc/source/user_guide/tutorials/fields_container.rst diff --git a/doc/source/user_guide/tutorials/index.rst b/doc/source/user_guide/tutorials/index.rst new file mode 100644 index 0000000000..5e3d5f9fc5 --- /dev/null +++ b/doc/source/user_guide/tutorials/index.rst @@ -0,0 +1,96 @@ +.. _ref_tutorials_index: + +Tutorials +--------- + + +The following tutorials show in details how to use basic features of PyDPF-Core +for each usage main step. + +:bdg-dark-line:`Define simulation data` :octicon:`arrow-right;1em` :bdg-dark-line:`Store input data in DPF` :octicon:`arrow-right;1em` :bdg-dark-line:`Transform available data` :octicon:`arrow-right;1em` :bdg-dark-line:`Extract data` + +**Define input data** + + +.. grid:: 3 + + .. grid-item-card:: Data Sources + :link: ref_tutorials_model + :link-type: ref + :text-align: center + + .. grid-item-card:: DPF model + :link: ref_tutorials_model + :link-type: ref + :text-align: center + +**Load data** + + +.. grid:: 3 + + .. grid-item-card:: Data arrays + :link: ref_tutorials_model + :link-type: ref + :text-align: center + + Fields + + PropertyField + + StringField + + CustomTypeField + + .. grid-item-card:: Data maps + :link: ref_tutorials_model + :link-type: ref + :text-align: center + + GenericDataContainer + + DataTree + + .. grid-item-card:: Collections + :link: ref_tutorials_model + :link-type: ref + :text-align: center + + LabelSpace + + FieldsContainer + + MeshContainer + +**Transform data** + + +.. grid:: 3 + + .. grid-item-card:: Process creation + :link: ref_tutorials_model + :link-type: ref + :text-align: center + + Operators + + Workflow + + .. grid-item-card:: Results visualization + :link: ref_tutorials_model + :link-type: ref + :text-align: center + + Plotter + + Animator + +**Export data** + + +.. grid:: 3 + + .. grid-item-card:: Serialization + :link: ref_tutorials_model + :link-type: ref + :text-align: center \ No newline at end of file diff --git a/doc/source/user_guide/model.rst b/doc/source/user_guide/tutorials/model.rst similarity index 99% rename from doc/source/user_guide/model.rst rename to doc/source/user_guide/tutorials/model.rst index bd3f773a04..f7f5b539fb 100644 --- a/doc/source/user_guide/model.rst +++ b/doc/source/user_guide/tutorials/model.rst @@ -1,4 +1,4 @@ -.. _user_guide_model: +.. _ref_tutorials_model: ========= DPF model diff --git a/doc/source/user_guide/operators.rst b/doc/source/user_guide/tutorials/operators.rst similarity index 100% rename from doc/source/user_guide/operators.rst rename to doc/source/user_guide/tutorials/operators.rst diff --git a/doc/source/user_guide/plotting.rst b/doc/source/user_guide/tutorials/plotting.rst similarity index 100% rename from doc/source/user_guide/plotting.rst rename to doc/source/user_guide/tutorials/plotting.rst diff --git a/examples/08-python-operators/02-python_operators_with_dependencies.py b/examples/08-python-operators/02-python_operators_with_dependencies.py index f88d9e4a80..da55847e4d 100644 --- a/examples/08-python-operators/02-python_operators_with_dependencies.py +++ b/examples/08-python-operators/02-python_operators_with_dependencies.py @@ -123,9 +123,9 @@ # Download the script for your operating system. # # - For Windows, download this -# :download:`PowerShell script `. +# :download:`PowerShell script `. # - For Linux, download this -# :download:`Shell script `. +# :download:`Shell script `. # # Run the downloaded script with the mandatory arguments: # @@ -157,6 +157,7 @@ "doc", "source", "user_guide", + "how-to", "create_sites_for_python_operators.ps1", ) args = [ @@ -189,6 +190,7 @@ "doc", "source", "user_guide", + "how-to", "create_sites_for_python_operators.sh", ) run_cmd = f"{cmd_file}" diff --git a/requirements/requirements_docs.txt b/requirements/requirements_docs.txt index df5b2a087a..3b8158ba8a 100644 --- a/requirements/requirements_docs.txt +++ b/requirements/requirements_docs.txt @@ -10,6 +10,7 @@ pyvista==0.44.1 sphinx==7.1.0 sphinx-autobuild==2024.2.4 sphinx-copybutton==0.5.2 +sphinx-exec-code==0.12 sphinx-gallery==0.17.0 sphinx-notfound-page==1.0.4 sphinx-reredirects==0.1.3