From 5781bc2e7feb9c221d44a5021802606b57116869 Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Wed, 19 Jul 2023 22:52:55 +0200 Subject: [PATCH 1/9] add action --- .github/workflows/check_urls.yml | 34 +++++++++++++ .github/workflows/documentation.yml | 77 ++++++++++++++++++++--------- 2 files changed, 89 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/check_urls.yml diff --git a/.github/workflows/check_urls.yml b/.github/workflows/check_urls.yml new file mode 100644 index 0000000..160b670 --- /dev/null +++ b/.github/workflows/check_urls.yml @@ -0,0 +1,34 @@ +name: Check URLs + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: urls-checker-code + uses: urlstechie/urlchecker-action@master + with: + subfolder: onnx_array_api + file_types: .md,.py,.rst,.ipynb + print_all: false + timeout: 2 + retry_count# : 2 + # exclude_urls: https://dumps.wikimedia.org/other/pageviews/%Y/%Y-%m/pageviews-%Y%m%d-%H0000.gz,https://dumps.wikimedia.org/frwiki/latest/latest-all-titles-in-ns0.gz + exclude_patterns: https://dumps.wikimedia.org/ + # force_pass : true + + - name: urls-checker-docs + uses: urlstechie/urlchecker-action@master + with: + subfolder: _doc + file_types: .md,.py,.rst,.ipynb + print_all: false + timeout: 2 + retry_count# : 2 + exclude_urls: https://hal.archives-ouvertes.fr/hal-00990252/document + exclude_patterns: https://www.data.gouv.fr/fr/datasets/r/e3d83ab3-dc52-4c99-abaf-8a38050cc68c + # force_pass : true diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index dcc6d51..84e0f61 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -1,24 +1,9 @@ -name: Documentation - -on: - push: - branches: [main] - pull_request: - branches: [main] - schedule: - # ┌───────────── minute (0 - 59) - # │ ┌───────────── hour (0 - 23) - # │ │ ┌───────────── day of the month (1 - 31) - # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) - # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) - # │ │ │ │ │ - # │ │ │ │ │ - # │ │ │ │ │ - # * * * * * - - cron: '30 1 * * 0' +name: Documentation and Code Coverage + +on: [push] jobs: - build_wheels: + run: name: Build documentation on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: @@ -33,17 +18,65 @@ jobs: with: python-version: '3.11' + - uses: tlylt/install-graphviz@v1 + + - name: Install pandoc + run: sudo apt-get install -y pandoc + - name: Install requirements run: python -m pip install -r requirements.txt - - name: Install requirements-dev.txt + - name: Install requirements dev run: python -m pip install -r requirements-dev.txt + - name: Cache pip + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + + - name: Generate coverage report + run: | + pip install pytest + pip install pytest-cov + export PYTHONPATH=. + pytest --cov=./onnx_array_api/ --cov-report=xml --durations=10 --ignore-glob=**LONG*.py --ignore-glob=**notebook*.py + export PYTHONPATH= + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + - name: Install - run: python -m pip install -e . + run: python setup.py install + + - name: Copy license + run: cp LICENSE* ./_doc + - name: Copy changelogs + run: cp CHANGELOGS* ./_doc - name: Documentation - run: python -m sphinx ./_doc ./dist/html + run: python -m sphinx ./_doc ./dist/html -n -w doc.txt + + - name: Summary + run: cat doc.txt + + - name: Check for errors and warnings + run: | + if [[ $(grep ERROR doc.txt) ]]; then + echo "Documentation produces errors." + grep ERROR doc.txt + exit 1 + fi + if [[ $(grep WARNING doc.txt) ]]; then + echo "Documentation produces warnings." + grep WARNING doc.txt + exit 1 + fi - uses: actions/upload-artifact@v3 with: From dd75a8ea4ea0bb5acbb6cba899c465f57a965c7f Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Wed, 19 Jul 2023 23:06:26 +0200 Subject: [PATCH 2/9] doc --- _doc/conf.py | 59 +++++++++++++++++++++++++++++++++++++------- requirements-dev.txt | 4 ++- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/_doc/conf.py b/_doc/conf.py index 52f54b6..c337528 100644 --- a/_doc/conf.py +++ b/_doc/conf.py @@ -1,24 +1,35 @@ import os import sys - +from sphinx_runpython.github_link import make_linkcode_resolve +from sphinx_runpython.conf_helper import has_dvipng, has_dvisvgm from onnx_array_api import __version__ extensions = [ "sphinx.ext.autodoc", - "sphinx.ext.intersphinx", - "sphinx.ext.todo", "sphinx.ext.coverage", - "sphinx.ext.mathjax", + "sphinx.ext.githubpages", "sphinx.ext.ifconfig", + "sphinx.ext.intersphinx", + "sphinx.ext.mathjax", "sphinx.ext.viewcode", - "sphinx.ext.githubpages", + "sphinx.ext.todo", "sphinx_gallery.gen_gallery", + "sphinx_issues", "matplotlib.sphinxext.plot_directive", - "pyquickhelper.sphinxext.sphinx_epkg_extension", - "pyquickhelper.sphinxext.sphinx_gdot_extension", - "pyquickhelper.sphinxext.sphinx_runpython_extension", + "sphinx_runpython.epkg", + "sphinx_runpython.gdot", + "sphinx_runpython.runpython", ] +if has_dvisvgm(): + extensions.append("sphinx.ext.imgmath") + imgmath_image_format = "svg" +elif has_dvipng(): + extensions.append("sphinx.ext.pngmath") + imgmath_image_format = "png" +else: + extensions.append("sphinx.ext.mathjax") + templates_path = ["_templates"] html_logo = "_static/logo.png" source_suffix = ".rst" @@ -37,18 +48,48 @@ html_theme_path = ["_static"] html_theme_options = {} html_static_path = ["_static"] +html_sourcelink_suffix = "" + +issues_github_path = "sdpython/onnx-array-api" +# The following is used by sphinx.ext.linkcode to provide links to github +linkcode_resolve = make_linkcode_resolve( + "mlstatpy", + ( + "https://github.com/sdpython/onnx-array-api/" + "blob/{revision}/{package}/" + "{path}#L{lineno}" + ), +) + +latex_elements = { + "papersize": "a4", + "pointsize": "10pt", + "title": project, +} intersphinx_mapping = { - "onnx": ("https://onnx.ai/onnx/", None), "matplotlib": ("https://matplotlib.org/", None), "numpy": ("https://numpy.org/doc/stable", None), + "onnx": ("https://onnx.ai/onnx/", None), "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), "python": (f"https://docs.python.org/{sys.version_info.major}", None), "scipy": ("https://docs.scipy.org/doc/scipy/reference", None), + "sklearn": ("https://scikit-learn.org/stable/", None), + "sklearn-onnx": ("https://onnx.ai/sklearn-onnx/", None), "torch": ("https://pytorch.org/docs/stable/", None), } +# Check intersphinx reference targets exist +nitpicky = True +# See also scikit-learn/scikit-learn#26761 +nitpick_ignore = [ + ("py:class", "False"), + ("py:class", "True"), + ("py:class", "pipeline.Pipeline"), + ("py:class", "default=sklearn.utils.metadata_routing.UNCHANGED"), +] + sphinx_gallery_conf = { # path to your examples scripts "examples_dirs": os.path.join(os.path.dirname(__file__), "examples"), diff --git a/requirements-dev.txt b/requirements-dev.txt index 07fd7c3..bda3c19 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -19,9 +19,11 @@ pyquickhelper pytest pytest-cov rstcheck[sphinx,toml] +sphinx-issues +git+https://github.com/sdpython/sphinx-runpython.git ruff scikit-learn -skl2onnx +git+https://github.com/onnx/sklearn-onnx.git sphinx sphinx-gallery tomli From b8ca6bd30aa22471dbe15eb1231505103c2b2bbe Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Wed, 19 Jul 2023 23:26:37 +0200 Subject: [PATCH 3/9] doc --- CHANGELOGS.rst | 2 +- README.rst | 3 +++ _doc/api/array_api.rst | 4 ++-- _doc/examples/plot_first_example.py | 4 +++- _doc/index.rst | 3 +++ _doc/tech/aapi.rst | 5 ++++- onnx_array_api/array_api/onnx_numpy.py | 3 --- onnx_array_api/npx/npx_functions.py | 4 ++-- onnx_array_api/npx/npx_functions_test.py | 6 ++---- 9 files changed, 20 insertions(+), 14 deletions(-) diff --git a/CHANGELOGS.rst b/CHANGELOGS.rst index ec31997..554f796 100644 --- a/CHANGELOGS.rst +++ b/CHANGELOGS.rst @@ -8,6 +8,6 @@ Change Logs an array to a TensorProto, including bfloat16 and float 8 types * :pr:`24`: add ExtendedReferenceEvaluator to support scenario for the Array API onnx does not support -* :pr:`22`: support OrtValue in function :func:`ort_profile` +* :pr:`22`: support OrtValue in function *ort_profile* * :pr:`17`: implements ArrayAPI * :pr:`3`: fixes Array API with onnxruntime and scikit-learn diff --git a/README.rst b/README.rst index 790e838..9890a18 100644 --- a/README.rst +++ b/README.rst @@ -26,6 +26,9 @@ onnx-array-api: (Numpy) Array API for ONNX .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black +.. image:: https://codecov.io/gh/sdpython/onnx-array-api/branch/main/graph/badge.svg?token=Wb9ZGDta8J + :target: https://codecov.io/gh/sdpython/onnx-array-api + **onnx-array-api** implements a numpy API for ONNX. It gives the user the ability to convert functions written following the numpy API to convert that function into ONNX as diff --git a/_doc/api/array_api.rst b/_doc/api/array_api.rst index f07716a..f98fd45 100644 --- a/_doc/api/array_api.rst +++ b/_doc/api/array_api.rst @@ -3,5 +3,5 @@ onnx_array_api.array_api .. toctree:: - array_api_onnx_numpy - array_api_onnx_ort + array_api_numpy + array_api_ort diff --git a/_doc/examples/plot_first_example.py b/_doc/examples/plot_first_example.py index 09d1b26..590507d 100644 --- a/_doc/examples/plot_first_example.py +++ b/_doc/examples/plot_first_example.py @@ -108,7 +108,9 @@ def myloss(x, y): # Eager mode is enabled by function :func:`eager_onnx`. # It intercepts all calls to `my_loss`. On the first call, # it replaces a numpy array by a tensor corresponding to the -# selected runtime, here numpy as well through :class:`EagerNumpyTensor`. +# selected runtime, here numpy as well through +# :class:`EagerNumpyTensor +# `. eager_myloss = eager_onnx(myloss) x = np.array([[0.1, 0.2], [0.3, 0.4]], dtype=np.float32) diff --git a/_doc/index.rst b/_doc/index.rst index 30997b0..c782c8c 100644 --- a/_doc/index.rst +++ b/_doc/index.rst @@ -23,6 +23,9 @@ onnx-array-api: (Numpy) Array API for ONNX .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black +.. image:: https://codecov.io/gh/sdpython/onnx-array-api/branch/main/graph/badge.svg?token=Wb9ZGDta8J + :target: https://codecov.io/gh/sdpython/onnx-array-api + **onnx-array-api** implements a numpy API for ONNX. It gives the user the ability to convert functions written following the numpy API to convert that function into ONNX as diff --git a/_doc/tech/aapi.rst b/_doc/tech/aapi.rst index ddb0bbe..b714c70 100644 --- a/_doc/tech/aapi.rst +++ b/_doc/tech/aapi.rst @@ -55,7 +55,10 @@ Tensor type An :class:`EagerTensor` must be used to represent any tensor. This class defines the backend to use as well. -`EagerNumpyTensor` for :epkg:`numpy`, `EagerOrtTensor` +:class:`EagerNumpyTensor +` +for :epkg:`numpy`, :class:`EagerOrtTensor +` for :epkg:`onnxruntime`. Since the Array API is new, existing packages do not fully support the API if they support it (:epkg:`scikit-learn`). Some numpy array may still be used. diff --git a/onnx_array_api/array_api/onnx_numpy.py b/onnx_array_api/array_api/onnx_numpy.py index cf39774..bf9eae6 100644 --- a/onnx_array_api/array_api/onnx_numpy.py +++ b/onnx_array_api/array_api/onnx_numpy.py @@ -1,6 +1,3 @@ -""" -Array API valid for an :class:`EagerNumpyTensor`. -""" from ..npx.npx_numpy_tensors import EagerNumpyTensor from . import _finalize_array_api diff --git a/onnx_array_api/npx/npx_functions.py b/onnx_array_api/npx/npx_functions.py index a8bb62a..db29ca2 100644 --- a/onnx_array_api/npx/npx_functions.py +++ b/onnx_array_api/npx/npx_functions.py @@ -30,7 +30,7 @@ def _cstv(x): @npxapi_inline def abs(x: TensorType[ElemType.numerics, "T"], /) -> TensorType[ElemType.numerics, "T"]: - "See :func:`numpy.abs`." + "See :func:`numpy.absolute`." return var(x, op="Abs") @@ -38,7 +38,7 @@ def abs(x: TensorType[ElemType.numerics, "T"], /) -> TensorType[ElemType.numeric def absolute( x: TensorType[ElemType.numerics, "T"], / ) -> TensorType[ElemType.numerics, "T"]: - "See :func:`numpy.abs`." + "See :func:`numpy.absolute`." return var(x, op="Abs") diff --git a/onnx_array_api/npx/npx_functions_test.py b/onnx_array_api/npx/npx_functions_test.py index 0a4d607..4d442dd 100644 --- a/onnx_array_api/npx/npx_functions_test.py +++ b/onnx_array_api/npx/npx_functions_test.py @@ -24,7 +24,6 @@ def _min_max( x: TensorType[ElemType.numerics, "T"] ) -> TupleType[TensorType[ElemType.numerics, "T"], TensorType[ElemType.numerics, "T"]]: - "See :func:`numpy.abs`." return tuple_var(var(x, op="ReduceMin"), var(x, op="ReduceMax")) @@ -32,7 +31,6 @@ def _min_max( def _min_max_inline( x: TensorType[ElemType.numerics, "T"] ) -> TupleType[TensorType[ElemType.numerics, "T"], TensorType[ElemType.numerics, "T"]]: - "See :func:`numpy.abs`." return tuple_var(var(x, op="ReduceMin"), var(x, op="ReduceMax")) @@ -40,7 +38,7 @@ def _min_max_inline( def absolute( x: TensorType[ElemType.numerics, "T"] ) -> TensorType[ElemType.numerics, "T"]: - "See :func:`numpy.abs`." + "See :func:`numpy.absolute`." return var(x, op="Abs") @@ -94,7 +92,7 @@ def log1p(x: TensorType[ElemType.floats, "T"]) -> TensorType[ElemType.floats, "T def negative( x: TensorType[ElemType.numerics, "T"] ) -> TensorType[ElemType.numerics, "T"]: - "See :func:`numpy.abs`." + "See :func:`numpy.negative`." return var(x, op="Neg") From 3dd562dd0c15bfaf79e7d9366ce086fbecee67df Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Thu, 20 Jul 2023 23:13:05 +0200 Subject: [PATCH 4/9] doc --- .github/workflows/documentation.yml | 16 +++++++++++----- _doc/api/index.rst | 4 +++- _doc/api/npx_jit_eager.rst | 21 +++++++++++++++++++++ _doc/api/npx_tensors.rst | 10 ++++++++++ _doc/api/profiling.rst | 7 +++++++ _doc/conf.py | 5 +++++ onnx_array_api/array_api/onnx_ort.py | 3 --- onnx_array_api/npx/npx_jit_eager.py | 9 +++++---- onnx_array_api/npx/npx_types.py | 2 +- 9 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 _doc/api/npx_jit_eager.rst create mode 100644 _doc/api/npx_tensors.rst create mode 100644 _doc/api/profiling.rst diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 84e0f61..05b6a19 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -1,6 +1,12 @@ name: Documentation and Code Coverage -on: [push] +on: + push: + pull_request: + types: + - closed + branches: + - main jobs: run: @@ -54,10 +60,10 @@ jobs: - name: Install run: python setup.py install - - name: Copy license - run: cp LICENSE* ./_doc - - name: Copy changelogs - run: cp CHANGELOGS* ./_doc + - name: Copy license, changelogs + run: | + cp LICENSE* ./_doc + cp CHANGELOGS* ./_doc - name: Documentation run: python -m sphinx ./_doc ./dist/html -n -w doc.txt diff --git a/_doc/api/index.rst b/_doc/api/index.rst index a95b2f4..c64d733 100644 --- a/_doc/api/index.rst +++ b/_doc/api/index.rst @@ -8,8 +8,9 @@ API array_api npx_functions - npx_jit + npx_jit_eager npx_numpy + npx_tensors npx_types npx_var onnx_tools @@ -17,3 +18,4 @@ API plotting reference tools + profiling diff --git a/_doc/api/npx_jit_eager.rst b/_doc/api/npx_jit_eager.rst new file mode 100644 index 0000000..b8970f2 --- /dev/null +++ b/_doc/api/npx_jit_eager.rst @@ -0,0 +1,21 @@ +============= +npx_jit_eager +============= + + +eaer_onnx +========= + +.. autofunction:: onnx_array_api.npx.npx_jit_eager.eager_onnx + +JitEager +======== + +.. autoclass:: onnx_array_api.npx.npx_jit_eager.JitEager + :members: + +JitOnnx +======= + +.. autoclass:: onnx_array_api.npx.npx_jit_eager.JitOnnx + :members: diff --git a/_doc/api/npx_tensors.rst b/_doc/api/npx_tensors.rst new file mode 100644 index 0000000..d86c252 --- /dev/null +++ b/_doc/api/npx_tensors.rst @@ -0,0 +1,10 @@ +=========== +npx_tensors +=========== + + +EagerTensor +=========== + +.. autoclass:: onnx_array_api.npx.npx_tensors.EagerTensor + :members: diff --git a/_doc/api/profiling.rst b/_doc/api/profiling.rst new file mode 100644 index 0000000..ea89b86 --- /dev/null +++ b/_doc/api/profiling.rst @@ -0,0 +1,7 @@ +profiling +========= + +API ++++ + +.. autoclass:: onnx_array_api.profiling.ProfileNode diff --git a/_doc/conf.py b/_doc/conf.py index c337528..26a7b20 100644 --- a/_doc/conf.py +++ b/_doc/conf.py @@ -90,6 +90,11 @@ ("py:class", "default=sklearn.utils.metadata_routing.UNCHANGED"), ] +nitpic_ignore_regex = [ + ("py:func", "numpy[.].*"), + ("py:class", "onnxruntime[.].*"), +] + sphinx_gallery_conf = { # path to your examples scripts "examples_dirs": os.path.join(os.path.dirname(__file__), "examples"), diff --git a/onnx_array_api/array_api/onnx_ort.py b/onnx_array_api/array_api/onnx_ort.py index e1427e1..d285246 100644 --- a/onnx_array_api/array_api/onnx_ort.py +++ b/onnx_array_api/array_api/onnx_ort.py @@ -1,6 +1,3 @@ -""" -Array API valid for an :class:`EagerOrtTensor`. -""" from ..ort.ort_tensors import EagerOrtTensor from . import _finalize_array_api diff --git a/onnx_array_api/npx/npx_jit_eager.py b/onnx_array_api/npx/npx_jit_eager.py index 0cfe9f7..ef24af7 100644 --- a/onnx_array_api/npx/npx_jit_eager.py +++ b/onnx_array_api/npx/npx_jit_eager.py @@ -18,7 +18,7 @@ class JitEager: :param f: function to convert :param tensor_class: wrapper around a class defining the backend, - if None, it defaults to :class:`onnx.reference.ReferenceEvalutor` + if None, it defaults to :class:`onnx.reference.ReferenceEvaluator` :param target_opsets: dictionary `{opset: version}` :param output_types: shape and type inference cannot be run before the onnx graph is created and type is needed to do such, @@ -551,7 +551,7 @@ class JitOnnx(JitEager): :param f: function to convert :param tensor_class: wrapper around a class defining the backend, - if None, it defaults to :class:`onnx.reference.ReferenceEvalutor` + if None, it defaults to :class:`onnx.reference.ReferenceEvaluator` :param target_opsets: dictionary `{opset: version}` :param output_types: shape and type inference cannot be run before the onnx graph is created and type is needed to do such, @@ -608,7 +608,7 @@ class EagerOnnx(JitEager): :param f: function to convert :param tensor_class: wrapper around a class defining the backend, - if None, it defaults to :class:`onnx.reference.ReferenceEvalutor` + if None, it defaults to :class:`onnx.reference.ReferenceEvaluator` :param target_opsets: dictionary `{opset: version}` :param output_types: shape and type inference cannot be run before the onnx graph is created and type is needed to do such, @@ -801,6 +801,7 @@ def jit_onnx(*args, **kwargs): def eager_onnx(*args, **kwargs): """ - Returns an instance of :class:`EagerOnnx`. + Returns an instance of :class:`EagerOnnx + `. """ return EagerOnnx(*args, **kwargs) diff --git a/onnx_array_api/npx/npx_types.py b/onnx_array_api/npx/npx_types.py index 54cc618..8284765 100644 --- a/onnx_array_api/npx/npx_types.py +++ b/onnx_array_api/npx/npx_types.py @@ -20,7 +20,7 @@ class DType(WrapperType): following the :epkg:`Array API`. :param code: element type based on onnx definition, - if str, it looks into class :class:`onnxTensorProto` + if str, it looks into class :class:`onnx.TensorProto` to retrieve the code """ From ddcd64a50b374c0b3e441b699eb33a4394af9167 Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Thu, 20 Jul 2023 23:27:12 +0200 Subject: [PATCH 5/9] doc2 --- _doc/api/npx_jit_eager.rst | 6 ++++++ _doc/conf.py | 4 ++-- _doc/examples/plot_first_example.py | 7 +++++-- _doc/tech/aapi.rst | 3 ++- onnx_array_api/npx/npx_core_api.py | 6 ++++-- onnx_array_api/npx/npx_graph_builder.py | 4 +++- onnx_array_api/npx/npx_var.py | 7 ++++--- onnx_array_api/plotting/_helper.py | 18 ++++++++++++------ onnx_array_api/plotting/stat_plot.py | 2 +- onnx_array_api/plotting/text_plot.py | 24 +++++++++++++++--------- 10 files changed, 54 insertions(+), 27 deletions(-) diff --git a/_doc/api/npx_jit_eager.rst b/_doc/api/npx_jit_eager.rst index b8970f2..b5da438 100644 --- a/_doc/api/npx_jit_eager.rst +++ b/_doc/api/npx_jit_eager.rst @@ -8,6 +8,12 @@ eaer_onnx .. autofunction:: onnx_array_api.npx.npx_jit_eager.eager_onnx +EagerOnnx +========= + +.. autoclass:: onnx_array_api.npx.npx_jit_eager.EagerOnnx + :members: + JitEager ======== diff --git a/_doc/conf.py b/_doc/conf.py index 26a7b20..e050bf4 100644 --- a/_doc/conf.py +++ b/_doc/conf.py @@ -91,8 +91,8 @@ ] nitpic_ignore_regex = [ - ("py:func", "numpy[.].*"), - ("py:class", "onnxruntime[.].*"), + ("py:func", ".*numpy[.].*"), + ("py:class", ".*onnxruntime[.].*"), ] sphinx_gallery_conf = { diff --git a/_doc/examples/plot_first_example.py b/_doc/examples/plot_first_example.py index 590507d..2866165 100644 --- a/_doc/examples/plot_first_example.py +++ b/_doc/examples/plot_first_example.py @@ -87,9 +87,12 @@ def myloss(x, y): def l1_loss(x, y): + """ + err is a type inheriting from + :class:`EagerTensor `. + It needs to be converted to numpy first before any display. + """ err = absolute(x - y).sum() - # err is a type inheriting from :class:`EagerTensor`. - # It needs to be converted to numpy first before any display. print(f"l1_loss={err.numpy()}") return err diff --git a/_doc/tech/aapi.rst b/_doc/tech/aapi.rst index b714c70..20f0002 100644 --- a/_doc/tech/aapi.rst +++ b/_doc/tech/aapi.rst @@ -53,7 +53,8 @@ Beside, from onnx point of view, argument dtype should be named. Tensor type +++++++++++ -An :class:`EagerTensor` must be used to represent any tensor. +An :class:`EagerTensor ` +must be used to represent any tensor. This class defines the backend to use as well. :class:`EagerNumpyTensor ` diff --git a/onnx_array_api/npx/npx_core_api.py b/onnx_array_api/npx/npx_core_api.py index 1249273..d6688cf 100644 --- a/onnx_array_api/npx/npx_core_api.py +++ b/onnx_array_api/npx/npx_core_api.py @@ -20,7 +20,8 @@ class args_tuple(tuple): def cst(*args, **kwargs): """ - Wraps a call to the building of class :class:`Cst`. + Wraps a call to the building of class + :class:`Cst `. """ return Cst(*args, **kwargs) @@ -52,7 +53,8 @@ def make_tuple( def var(*args: Sequence[Var], **kwargs: Dict[str, Any]) -> Var: """ - Wraps a call to the building of class :class:`Var`. + Wraps a call to the building of class + :class:`Var `. """ return Var(*args, **kwargs) diff --git a/onnx_array_api/npx/npx_graph_builder.py b/onnx_array_api/npx/npx_graph_builder.py index b5333b5..53d2899 100644 --- a/onnx_array_api/npx/npx_graph_builder.py +++ b/onnx_array_api/npx/npx_graph_builder.py @@ -728,7 +728,9 @@ def to_onnx( """ Conversion to onnx. - :param output_vars: list of :class:`Var` holding the final outputs + :param output_vars: list of + :class:`Var ` + holding the final outputs :return: onnx graph """ # _GraphBuilder.to_onnx diff --git a/onnx_array_api/npx/npx_var.py b/onnx_array_api/npx/npx_var.py index 3e77cc5..27f5455 100644 --- a/onnx_array_api/npx/npx_var.py +++ b/onnx_array_api/npx/npx_var.py @@ -87,7 +87,7 @@ def __ge__(self, x): class ManyIdentity: """ - Holds several instances of :class:`Var`. + Holds several instances of :class:`Var `. """ def __init__(self, *inputs, input_indices=None): @@ -930,7 +930,7 @@ def flatten(self) -> "Var": Flattens a matrix (see :meth:`numpy.ndarray.flatten`). :param axis: only flatten from axis to the end. - :return: :class:`Var` + :return: :class:`Var ` """ cst, var = Var.get_cst_var() @@ -964,7 +964,8 @@ def __getitem__(self, index: Any) -> "Var": * *index* is an integer or a slice, a tuple of integers and slices, example: `[0, 1]`, `[:5, :6]`, `[::2]` (**scenario 1**) * *index* is an *ONNX* object (more precisely an instance of - :class:`Var`), then the method assumes it is an array of + :class:`Var `), + then the method assumes it is an array of boolean to select a subset of the tensor along the first axis, example: `mat[mat == 0]` (**scenario 2**) """ diff --git a/onnx_array_api/plotting/_helper.py b/onnx_array_api/plotting/_helper.py index a4c1915..6b5e1e3 100644 --- a/onnx_array_api/plotting/_helper.py +++ b/onnx_array_api/plotting/_helper.py @@ -90,10 +90,10 @@ def _extract_attribute_value( value = fct(att) return value if ref_att is None: - raise AttributeError( + raise AttributeError( # pragma: no cover f"Unable to convert attribute {att.name!r} type {att.type!r}." ) - raise AttributeError( + raise AttributeError( # pragma: no cover f"Unable to convert default value for {ref_att.name!r} " f"type {att.type!r}." ) @@ -115,7 +115,9 @@ def get_tensor_shape(obj): if isinstance(obj, ValueInfoProto): return get_tensor_shape(obj.type) elif not isinstance(obj, TypeProto): - raise TypeError(f"Unexpected type {type(obj)!r}.") + raise TypeError( # pragma: no cover + f"Unexpected type {type(obj)!r}." + ) shape = [] for d in obj.tensor_type.shape.dim: v = d.dim_value if d.dim_value > 0 else d.dim_param @@ -161,7 +163,9 @@ def _get_type(obj0): obj = obj.tensor_type if hasattr(obj, "elem_type"): return tensor_dtype_to_np_dtype(obj.elem_type) - raise RuntimeError(f"Unable to guess type from {obj0!r}.") + raise RuntimeError( # pragma: no cover + f"Unable to guess type from {obj0!r}." + ) def _get_shape(obj): @@ -183,11 +187,13 @@ def _get_shape(obj): if hasattr(obj, "raw_data") and len(obj.raw_data) > 0: arr = to_array(obj) return arr.shape - raise RuntimeError( + raise RuntimeError( # pragma: no cover f"Unable to guess type from {obj0!r}, " f"data_type is {obj.data_type!r}." ) if hasattr(obj, "type"): obj = obj.type if hasattr(obj, "tensor_type"): return get_tensor_shape(obj) - raise RuntimeError(f"Unable to guess type from {obj0!r}.") + raise RuntimeError( # pragma: no cover + f"Unable to guess type from {obj0!r}." + ) diff --git a/onnx_array_api/plotting/stat_plot.py b/onnx_array_api/plotting/stat_plot.py index eaa6a70..4def331 100644 --- a/onnx_array_api/plotting/stat_plot.py +++ b/onnx_array_api/plotting/stat_plot.py @@ -23,7 +23,7 @@ def plot_ort_profile( See :ref:`l-example-ort-profiling` for an example. """ if ax0 is None: - ax0 = plt.gca() + ax0 = plt.gca() # pragma: no cover gr_dur = ( df[["dur", "args_op_name"]].groupby("args_op_name").sum().sort_values("dur") diff --git a/onnx_array_api/plotting/text_plot.py b/onnx_array_api/plotting/text_plot.py index d8976a9..04b7ec4 100644 --- a/onnx_array_api/plotting/text_plot.py +++ b/onnx_array_api/plotting/text_plot.py @@ -184,7 +184,9 @@ def iterate(nodes, node, depth=0, true_false=""): rows.extend(r) return "\n".join(rows) - raise NotImplementedError(f"Type {node.op_type!r} cannot be displayed.") + raise NotImplementedError( # pragma: no cover + f"Type {node.op_type!r} cannot be displayed." + ) def _append_succ_pred( @@ -401,7 +403,7 @@ def _find_sequence(node_name, known, done): ) if len(sequences) == 0: - raise RuntimeError( + raise RuntimeError( # pragma: no cover "Unexpected empty sequence (len(possibles)=%d, " "len(done)=%d, len(nodes)=%d). This is usually due to " "a name used both as result name and node node. " @@ -432,7 +434,7 @@ def _find_sequence(node_name, known, done): best = k if best is None: - raise RuntimeError( + raise RuntimeError( # pragma: no cover f"Wrong implementation (len(sequence)={len(sequences)})." ) if verbose: @@ -451,7 +453,7 @@ def _find_sequence(node_name, known, done): known |= set(v.output) if len(new_nodes) != len(nodes): - raise RuntimeError( + raise RuntimeError( # pragma: no cover "The returned new nodes are different. " "len(nodes=%d) != %d=len(new_nodes). done=\n%r" "\n%s\n----------\n%s" @@ -484,7 +486,7 @@ def _find_sequence(node_name, known, done): n0s = set(n.name for n in nodes) n1s = set(n.name for n in new_nodes) if n0s != n1s: - raise RuntimeError( + raise RuntimeError( # pragma: no cover "The returned new nodes are different.\n" "%r !=\n%r\ndone=\n%r" "\n----------\n%s\n----------\n%s" @@ -756,7 +758,7 @@ def str_node(indent, node): try: val = str(to_array(att.t).tolist()) except TypeError as e: - raise TypeError( + raise TypeError( # pragma: no cover "Unable to display tensor type %r.\n%s" % (att.type, str(att)) ) from e @@ -851,7 +853,9 @@ def str_node(indent, node): if isinstance(att, str): rows.append(f"attribute: {att!r}") else: - raise NotImplementedError("Not yet introduced in onnx.") + raise NotImplementedError( # pragma: no cover + "Not yet introduced in onnx." + ) # initializer if hasattr(model, "initializer"): @@ -890,7 +894,7 @@ def str_node(indent, node): try: nodes = reorder_nodes_for_display(model.node, verbose=verbose) - except RuntimeError as e: + except RuntimeError as e: # pragma: no cover if raise_exc: raise e else: @@ -920,7 +924,9 @@ def str_node(indent, node): indent = mi if previous_indent is not None and indent < previous_indent: if verbose: - print(f"[onnx_simple_text_plot] break2 {node.op_type}") + print( # pragma: no cover + f"[onnx_simple_text_plot] break2 {node.op_type}" + ) add_break = True if not add_break and previous_out is not None: if len(set(node.input) & previous_out) == 0: From d7af74ca36f7bec378790ef8795445fb8c47dc0f Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Thu, 20 Jul 2023 23:27:57 +0200 Subject: [PATCH 6/9] black --- onnx_array_api/plotting/_helper.py | 12 +++--------- onnx_array_api/plotting/text_plot.py | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/onnx_array_api/plotting/_helper.py b/onnx_array_api/plotting/_helper.py index 6b5e1e3..ddca631 100644 --- a/onnx_array_api/plotting/_helper.py +++ b/onnx_array_api/plotting/_helper.py @@ -115,9 +115,7 @@ def get_tensor_shape(obj): if isinstance(obj, ValueInfoProto): return get_tensor_shape(obj.type) elif not isinstance(obj, TypeProto): - raise TypeError( # pragma: no cover - f"Unexpected type {type(obj)!r}." - ) + raise TypeError(f"Unexpected type {type(obj)!r}.") # pragma: no cover shape = [] for d in obj.tensor_type.shape.dim: v = d.dim_value if d.dim_value > 0 else d.dim_param @@ -163,9 +161,7 @@ def _get_type(obj0): obj = obj.tensor_type if hasattr(obj, "elem_type"): return tensor_dtype_to_np_dtype(obj.elem_type) - raise RuntimeError( # pragma: no cover - f"Unable to guess type from {obj0!r}." - ) + raise RuntimeError(f"Unable to guess type from {obj0!r}.") # pragma: no cover def _get_shape(obj): @@ -194,6 +190,4 @@ def _get_shape(obj): obj = obj.type if hasattr(obj, "tensor_type"): return get_tensor_shape(obj) - raise RuntimeError( # pragma: no cover - f"Unable to guess type from {obj0!r}." - ) + raise RuntimeError(f"Unable to guess type from {obj0!r}.") # pragma: no cover diff --git a/onnx_array_api/plotting/text_plot.py b/onnx_array_api/plotting/text_plot.py index 04b7ec4..8736d97 100644 --- a/onnx_array_api/plotting/text_plot.py +++ b/onnx_array_api/plotting/text_plot.py @@ -925,7 +925,7 @@ def str_node(indent, node): if previous_indent is not None and indent < previous_indent: if verbose: print( # pragma: no cover - f"[onnx_simple_text_plot] break2 {node.op_type}" + f"[onnx_simple_text_plot] break2 {node.op_type}" ) add_break = True if not add_break and previous_out is not None: From 06b744c9d8085fa6e71767eed9575c31063f7583 Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Thu, 20 Jul 2023 23:42:19 +0200 Subject: [PATCH 7/9] doc3 --- .github/workflows/check_urls.yml | 2 +- _doc/api/index.rst | 1 + _doc/api/{npx_jit.rst => npx_core_api.rst} | 36 ++++++++++++---------- _doc/api/npx_jit_eager.rst | 18 +++++++++-- 4 files changed, 37 insertions(+), 20 deletions(-) rename _doc/api/{npx_jit.rst => npx_core_api.rst} (52%) diff --git a/.github/workflows/check_urls.yml b/.github/workflows/check_urls.yml index 160b670..df5f1ac 100644 --- a/.github/workflows/check_urls.yml +++ b/.github/workflows/check_urls.yml @@ -30,5 +30,5 @@ jobs: timeout: 2 retry_count# : 2 exclude_urls: https://hal.archives-ouvertes.fr/hal-00990252/document - exclude_patterns: https://www.data.gouv.fr/fr/datasets/r/e3d83ab3-dc52-4c99-abaf-8a38050cc68c + exclude_patterns: https://www.data.gouv.fr/fr/datasets/r/e3d83ab3-dc52-4c99-abaf-8a38050cc68c,https://dev.azure.com/ # force_pass : true diff --git a/_doc/api/index.rst b/_doc/api/index.rst index c64d733..c39b7c0 100644 --- a/_doc/api/index.rst +++ b/_doc/api/index.rst @@ -7,6 +7,7 @@ API :maxdepth: 1 array_api + npx_core_api npx_functions npx_jit_eager npx_numpy diff --git a/_doc/api/npx_jit.rst b/_doc/api/npx_core_api.rst similarity index 52% rename from _doc/api/npx_jit.rst rename to _doc/api/npx_core_api.rst index 05f6fbe..370c443 100644 --- a/_doc/api/npx_jit.rst +++ b/_doc/api/npx_core_api.rst @@ -1,31 +1,33 @@ -npx, jit and eager mode -======================= +============ +npx_core_api +============ - -API -+++ - -.. autofunction:: onnx_array_api.npx.npx_core_api.var +cst +=== .. autofunction:: onnx_array_api.npx.npx_core_api.cst -.. autofunction:: onnx_array_api.npx.npx_jit_eager.eager_onnx - -.. autofunction:: onnx_array_api.npx.npx_jit_eager.jit_onnx +make_tuple +========== .. autofunction:: onnx_array_api.npx.npx_core_api.make_tuple +tuple_var +========= + .. autofunction:: onnx_array_api.npx.npx_core_api.tuple_var +npxapi_inline +============= + .. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_inline -.. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_function +npxapi_function +=============== -JIT, Eager -++++++++++ +.. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_function -.. autoclass:: onnx_array_api.npx.npx_jit_eager.JitEager - :members: +var +=== -.. autoclass:: onnx_array_api.npx.npx_jit_eager.JitOnnx - :members: +.. autofunction:: onnx_array_api.npx.npx_core_api.var diff --git a/_doc/api/npx_jit_eager.rst b/_doc/api/npx_jit_eager.rst index b5da438..7bf4aab 100644 --- a/_doc/api/npx_jit_eager.rst +++ b/_doc/api/npx_jit_eager.rst @@ -3,8 +3,17 @@ npx_jit_eager ============= -eaer_onnx -========= + +.. autofunction:: onnx_array_api.npx.npx_core_api.make_tuple + +.. autofunction:: onnx_array_api.npx.npx_core_api.tuple_var + +.. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_inline + +.. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_function + +eager_onnx +========== .. autofunction:: onnx_array_api.npx.npx_jit_eager.eager_onnx @@ -20,6 +29,11 @@ JitEager .. autoclass:: onnx_array_api.npx.npx_jit_eager.JitEager :members: +jit_onnx +======== + +.. autofunction:: onnx_array_api.npx.npx_jit_eager.jit_onnx + JitOnnx ======= From dcbc7eda4054665ebcfdf7d9826bb19bace8526b Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Fri, 21 Jul 2023 00:50:20 +0200 Subject: [PATCH 8/9] fix doc --- .github/workflows/check_urls.yml | 15 ++++++++++++++- _doc/api/array_api.rst | 1 + _doc/api/npx_array_api.rst | 5 +++++ _doc/api/npx_jit_eager.rst | 10 ---------- _doc/api/npx_numpy.rst | 9 +++++++++ _doc/api/ort.rst | 22 +++++++++++++++------- _doc/api/profiling.rst | 14 ++++++++++++-- _doc/api/tools.rst | 10 ---------- _doc/conf.py | 17 ++++++++++++++++- _doc/examples/plot_first_example.py | 3 ++- _doc/examples/prof_base.xlsx | Bin 0 -> 27436 bytes _doc/examples/prof_cuda_base.xlsx | Bin 0 -> 26197 bytes _doc/examples/prof_cuda_opti.xlsx | Bin 0 -> 44392 bytes _doc/examples/prof_opti.xlsx | Bin 0 -> 35170 bytes _doc/tech/aapi.rst | 3 ++- onnx_array_api/npx/npx_tensors.py | 3 ++- onnx_array_api/ort/ort_tensors.py | 7 ++++--- 17 files changed, 82 insertions(+), 37 deletions(-) create mode 100644 _doc/api/npx_array_api.rst create mode 100644 _doc/examples/prof_base.xlsx create mode 100644 _doc/examples/prof_cuda_base.xlsx create mode 100644 _doc/examples/prof_cuda_opti.xlsx create mode 100644 _doc/examples/prof_opti.xlsx diff --git a/.github/workflows/check_urls.yml b/.github/workflows/check_urls.yml index df5f1ac..67d7731 100644 --- a/.github/workflows/check_urls.yml +++ b/.github/workflows/check_urls.yml @@ -1,6 +1,19 @@ name: Check URLs -on: [push] +on: + pull_request: + branches: [main] + schedule: + # ┌───────────── minute (0 - 59) + # │ ┌───────────── hour (0 - 23) + # │ │ ┌───────────── day of the month (1 - 31) + # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) + # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) + # │ │ │ │ │ + # │ │ │ │ │ + # │ │ │ │ │ + # * * * * * + - cron: '30 1 * * 0' jobs: build: diff --git a/_doc/api/array_api.rst b/_doc/api/array_api.rst index f98fd45..9d06bee 100644 --- a/_doc/api/array_api.rst +++ b/_doc/api/array_api.rst @@ -5,3 +5,4 @@ onnx_array_api.array_api array_api_numpy array_api_ort + npx_array_api diff --git a/_doc/api/npx_array_api.rst b/_doc/api/npx_array_api.rst new file mode 100644 index 0000000..7481e71 --- /dev/null +++ b/_doc/api/npx_array_api.rst @@ -0,0 +1,5 @@ +onnx_array_api.npx.npx_array_api +================================ + +.. automodule:: onnx_array_api.npx.npx_array_api.BaseArrayApi + :members: diff --git a/_doc/api/npx_jit_eager.rst b/_doc/api/npx_jit_eager.rst index 7bf4aab..f3faa08 100644 --- a/_doc/api/npx_jit_eager.rst +++ b/_doc/api/npx_jit_eager.rst @@ -2,16 +2,6 @@ npx_jit_eager ============= - - -.. autofunction:: onnx_array_api.npx.npx_core_api.make_tuple - -.. autofunction:: onnx_array_api.npx.npx_core_api.tuple_var - -.. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_inline - -.. autofunction:: onnx_array_api.npx.npx_core_api.npxapi_function - eager_onnx ========== diff --git a/_doc/api/npx_numpy.rst b/_doc/api/npx_numpy.rst index deb8c99..11b752e 100644 --- a/_doc/api/npx_numpy.rst +++ b/_doc/api/npx_numpy.rst @@ -1,11 +1,20 @@ npx.npx_numpy_tensors ===================== +EagerNumpyTensor +++++++++++++++++ + .. autoclass:: onnx_array_api.npx.npx_numpy_tensors.EagerNumpyTensor :members: +JitNumpyTensor +++++++++++++++ + .. autoclass:: onnx_array_api.npx.npx_numpy_tensors.JitNumpyTensor :members: +NumpyTensor ++++++++++++ + .. autoclass:: onnx_array_api.npx.npx_numpy_tensors.NumpyTensor :members: \ No newline at end of file diff --git a/_doc/api/ort.rst b/_doc/api/ort.rst index 1a09e3d..2aadcdc 100644 --- a/_doc/api/ort.rst +++ b/_doc/api/ort.rst @@ -1,27 +1,35 @@ ort === -Optimization -++++++++++++ +ort_optimized_model ++++++++++++++++++++ .. autofunction:: onnx_array_api.ort.ort_optimizers.ort_optimized_model -OrtTensor -+++++++++ +EagerOrtTensor +++++++++++++++ .. autoclass:: onnx_array_api.ort.ort_tensors.EagerOrtTensor :members: +JitOrtTensor +++++++++++++ + .. autoclass:: onnx_array_api.ort.ort_tensors.JitOrtTensor :members: +OrtTensor ++++++++++ + .. autoclass:: onnx_array_api.ort.ort_tensors.OrtTensor :members: -Profiling -+++++++++ +merge_ort_profile ++++++++++++++++++ .. autofunction:: onnx_array_api.ort.ort_profile.merge_ort_profile -.. autofunction:: onnx_array_api.ort.ort_profile.ort_profile +ort_profile ++++++++++++ +.. autofunction:: onnx_array_api.ort.ort_profile.ort_profile diff --git a/_doc/api/profiling.rst b/_doc/api/profiling.rst index ea89b86..7a20874 100644 --- a/_doc/api/profiling.rst +++ b/_doc/api/profiling.rst @@ -1,7 +1,17 @@ profiling ========= -API -+++ +ProfileNode ++++++++++++ .. autoclass:: onnx_array_api.profiling.ProfileNode + +profile ++++++++ + +.. autofunction:: onnx_array_api.profiling.profile + +profile2graph ++++++++++++++ + +.. autofunction:: onnx_array_api.profiling.profile2graph diff --git a/_doc/api/tools.rst b/_doc/api/tools.rst index b93d918..ef161e0 100644 --- a/_doc/api/tools.rst +++ b/_doc/api/tools.rst @@ -11,16 +11,6 @@ Examples .. autofunction:: onnx_array_api.ext_test_case.example_path -Profiling -+++++++++ - -.. autofunction:: onnx_array_api.profiling.profile - -.. autofunction:: onnx_array_api.profiling.profile2graph - -.. autofunction:: onnx_array_api.profiling.profile2df - - Unit tests ++++++++++ diff --git a/_doc/conf.py b/_doc/conf.py index e050bf4..c58576c 100644 --- a/_doc/conf.py +++ b/_doc/conf.py @@ -90,9 +90,15 @@ ("py:class", "default=sklearn.utils.metadata_routing.UNCHANGED"), ] -nitpic_ignore_regex = [ +nitpick_ignore_regex = [ ("py:func", ".*numpy[.].*"), + ("py:func", ".*scipy[.].*"), ("py:class", ".*onnxruntime[.].*"), + ("py:class", ".*onnx_array_api.npx.npx_types.OptParTypeTupleType_.*"), + ("py:class", ".*onnx_array_api.npx.npx_types.ParType[a-z].*"), + ("py:class", ".*onnx_array_api.npx.npx_types.OptTensorType_.*"), + ("py:class", ".*onnx_array_api.npx.npx_types.TensorType_.*"), + ("py:class", ".*onnx_array_api.npx.npx_types.[ui].*"), ] sphinx_gallery_conf = { @@ -124,4 +130,13 @@ "scipy": "https://scipy.org/", "sphinx-gallery": "https://github.com/sphinx-gallery/sphinx-gallery", "torch": "https://pytorch.org/docs/stable/torch.html", + # + "C_OrtValue": ( + "http://www.xavierdupre.fr/app/onnxcustom/helpsphinx/" + "api/onnxruntime_python/ortvalue.html#c-class-ortvalue-or-c-ortvalue" + ), + "OrtValue": ( + "http://www.xavierdupre.fr/app/onnxcustom/helpsphinx/" + "api/onnxruntime_python/ortvalue.html#onnxruntime.OrtValue" + ), } diff --git a/_doc/examples/plot_first_example.py b/_doc/examples/plot_first_example.py index 2866165..2c01f4e 100644 --- a/_doc/examples/plot_first_example.py +++ b/_doc/examples/plot_first_example.py @@ -108,7 +108,8 @@ def myloss(x, y): ################################# -# Eager mode is enabled by function :func:`eager_onnx`. +# Eager mode is enabled by function :func:`eager_onnx +# `. # It intercepts all calls to `my_loss`. On the first call, # it replaces a numpy array by a tensor corresponding to the # selected runtime, here numpy as well through diff --git a/_doc/examples/prof_base.xlsx b/_doc/examples/prof_base.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d2d94774c0aad6a78cf4b406890e3c94cbdd8189 GIT binary patch literal 27436 zcmaI7by(C<*Y}H}s7OdRh;&Ogs7QBrw+`KngmgDUC@^$MBLhfFOLsFM%?u?uXW+h{ z_kF~3&L2O$ye?X_);(391%0^_^3n3o+h4zU50}|muvI^N$^LRYce&R~ikBzWOw2X-%3HN9W=?4F zb>w%vKCMnFH}21!1-@9ll1O#WB|5~$iijj>h^@8A-wb&~;LKQdQdg4nARFPyaSj2m z$aZT5Hc7$Us|;Hu^}(qb&M6<*>HnmBJc6Ps>XL{9+gV3dcOQzoCTaxQ&E~xZbbjKe_YZmkqlHk7M6Z-bEFS)e^m>Z2 zG??`Uzl+=5#1x$*HAq`4ay74}fxbf$VDU-(%V(k5j4uPS4V7{u1)?MyW|Sf8_{9g8 z;0g=d`NE*7o{&wC^MTqh`3P!f8)aka4*l^l@fAKUZf~Z^f*HfdRV5AqtEOL~_~_Us z_7+YJth9eJGTCxy1I&viHD$_|Xs2RsB7V6|?#+uvT7D{DnQGlq{QF?i^fIVkpdcY- z&>@9W^520%kC?YEhr}f}fAe`9?X#Nv{v4VJb2pk{o11K^ zXIos>E#~P`F&!-m$yJJ2e;;F1VZvUj-vMw$XuhRw46T8k1G=te7e&m6w*<&I zKH0t|(R%4OWLL1RpcA^H*53K!gQcj($DWZWT?z;SA-WI;qJBhU&Pi(we z$eXd3NLu!;lLMp3$p#D;E{Vi5WK9ci^$xZ6`NOboy1O1tT8|PXb4fU6#y-YC;_V!f zQ}V8OTNl3E9zUuVJ2}iyt3>=X{pY6>$pFf(`HJh4l&0Q1PR~pqfuWCye%2)q3ig_S z!wFYTzt^)15~k$e4cUX4pFuCFbd5vkYz1)~1xPL5c@LkS#(`)!h7ZnBcNByyDKwHR z^@oSovmza-nifvAd`=Z5ZK>Va=~v(z8K-UPutHW;ks)jQ}p6fFwpv)xq<* zDOz|BQV5s0in*D)Cf$>MK+7_O$Z)U+6Q85J{hUHgi(SO;D=&p}!vvbW$ryWcn8-$b zArlv4T}@TsOgs3SlekTyg2W}nYE;Pc=J9z3H!5iy3E4wSl4=RcAnT?>@(Swc^s;s= zrgtJHL_EZfwfLXv9EyUBbg;We+!aP^u&%UAxf4W;e(ny&xeQIlVPM4@@FM>2P(&Y?-3O`o% zQ}tWwhO3CaL&nZ$zs+=Mp7pDZne&EYXT2k_-BLY~Nt%LGG}1Q+>8@{8e03IK9zGW` z+^iXV&M8*!D7#&k*iuW&Cv*I5z+Qp8A5G9wD4wj&?F$+A<*B~wIu+=(YKm9`@w*me zo9~(P0(@DiagC^BDzSDQ=UZLw#H;)>j~abaHElMhM@B9;+mtJF4}_A*dO~42l>1*l zrw(_Bg?M-wrdlR-D{}NI_mID5BY$?-3f_#~rBO=w7O(yA1b-q?{&N}QALh#x~kAs401GZ}&=0lFgCjKH% zb9T#o*b)ocGiKdTZR}Nf{k@4zU`Dy;E7yw@w>Bf#wSBK7CPZ-4@K|50-1l^0?ZP%e zP)aVtqYLYSv-m@*BvKT70*-a1{rFfEoCkx6z3&en2AJiO`lntzZ-${YGT;rBiSYZ0 zGY5WFFc_u5#tpATdrV2-xOQ-m@WCx|>Vo-`O^_Og*#tqKSXi4dr=!@k8qHDpEba5) zxmC5nCgK)aBiRm5+e{WZ_?*GGa1DX5#8GbAGI@1~6VS7vUAz>oHA#NXvBYmbC$NZY zuz|xYmgn2%6CUo5RbtZey+ZMvCPT2s3;O9L@M>}{?{r}q&3n8=2V};CB`W*Gn<5^? zG*b7N%PUeV36;OrdZw}Ba+dHFI_99vz{9QmYg?6wNwULmL>yeQN|5HHR>>NKjS(%$V zJF(sUbyr0onLE*>J+&Z1@n0115hC?P&c`$Ud(@js1A^=XM)ogjdh5pRt98YAY+^94 z_7mj8^@)fs=LB=KUh7IC52JP29YmUqZx>Ezm%M7Zp4$Vqg0G=4*nUK7YfFpAOFox32l>3Mm#3!-3nvqUkmHSr`U8X37WX6gjlGA@W&M(Gn)f-BExClk7wiQm zFof^VWwZJ=csqEUiTdi0Ov0}&Rs<@_4Gb5-&EK2PR|g^4ewUDg1UrK~^OKfMpFueI z`_->N!G{g|D{S}acDfdTNd{$W3)lOQu7!HTrLuYl zc(!5dRpS<>=a`~qMNq!zw!E8(Y6)+%=b40+r%B|o#&3@gR|&qjo;OX4PEODZmERX` z%{!}un0BqL*IQn{ee>O%*4!R+EMB|Akx#C#W9CcTK6YU)wKg}sDA@7%DZ09_pm?y~ z(t7D9s_zRw?TN_FYuawFI6B>?7{$BrXS#BRT4W|R_47K%Q7*qa@Uvjs_w(LjH2tA& zYip?Q>*sQ`4LfLmobUf!Zy_~7AVjVgIM-^>{5{dv8^8G)R*}N%mRCjKc`$K749CM7|Q6Hn9& zW5D@ia>;R{3p*4LARZv+O6~gidW^ep%{8LLv!ac~rpmM6-FI!}V705$j#hxaRr!87 zYk9>D<<$@0*wq_UNrqSF7`;x^Wbx#^{$}qvDAVGYvxOqqs*r>?Fg*v1!Ny4~)ZKan zxzTeh3a%>7S_vRQmeHtioxD|G$C+OX*u&%eI-6BmNrh!EoCD;_aO59f;XTYlv zxbBAlfhU8T`!YP&!N=v1rUns)kDcuGw}R{2KeoZ8Z%nUC zQc650;Zl>Lb((eui+a~v3)jWN!p^}GxYfcDT(aA8 zxw*~Ebi}CWRL;sXA+No0vhqc*>1tCH&TyUlzM>y~KD>10QOn?VV7Xty)^}CH7EkR1 zhhO!G!o@Cx!^#su9~IMNTM3nAlM-u>1z$|ib$yirMaKzHM=5-AinA$LEn(w1^i8h9 zgdc?pedN3umxr(QF0mQ5q^#y$(Z0XFz`TrjWmL;dq0!IbSj&7eq0+O5e~=2iRrg)H>oaHKR1e zYjrBr+co8O5`tlfn7{_D0y~{E#|2nYrVgm%U|R7~XA_cfueM^3rBJA;;-B?Kntk(yNlo#51VFcL0{< zb3>#ymM|m1BLUIbp;D2+ExBAdOJZ{Y)j8+U5^OtxEt&AGyyO~snqeZ*b}5$lcLfO> z?M|5=#UElMpgeU+9k=5f5HKUdcHD@+=eh|BG@Cf@r2j9>limz5)*?+c$$wXI=vdey*sjHTxjpGs7KnJQ3Q@gkEG zc?%u+U42%=W-pH!L#b?P5mgCXQPRZ}3hw?w({WB>!l+1E3C`Td1#OO5Lpw3s3!U`8 zsT9@hObRtO%Q}vVr+22>#OvTcun#mR*(^vo`U6Z#SPjXQ64{dAI~i8$*&PuUx@?{( zOzGm$n}L+*4@D^_rMSKGH(sxk8|^WTqxXt(TlH_3?hXj(Hx5RD;N*49%?2=*05Q=tKcCNtuas zDiFDJuIg{SAU>5y<6r@m@BR=ev3TiT_VmO~iv(<{3^T-6EH+)>krEO(xoIN-V@BGev0tPd<-)1IDaUpG3?~H3*VKd} zN4%Qz!;f)eiXbp0ZM2b2`WbqKo^RP_pX12S(|*s#HMx`z;@4AON}Etohs9B{yYCzd zEqttZtl0s*gSwjUnS7_>U7)XJ9EFU$-%>em9SYm#Irir{J~R@;l*I9z2L9?`8x9(k zt>QE&vU#^9)4LLjHwv_mVX1l^MQ+rIFP(+3nEKB%pHSWG^G)XQFQbo{1Bv5}Wuhtb zsd>5*3E628A$qpBmYJwJvVQ5p!T2+10`mY0P-3@g+o6u3El;?F4eAQzL@N(l8F6u> z6Anh=XQ1?Fd^VGdH~mQ+CZ9$vG0?eelk-@fR4ehxaE64qeC0)cLeGndpvm{oi*T)nmd3F#ZKQ~Z*rUtgSF4>KpyG~VIwhp zkyi<3sEc<@`bG^gInOQ6Qek&jN4?uaG&$Q2}F%Py?+13&6R8VJHlo`Fhi*6*zlg*7EPF2zB7$${y3!wcT~$w zD4EKMb6r|0RHkh|fz_ySI95p2bAS`{%_D#OCnwQu+VW%xG8sEeR|F|r)0XspyKZ_}SfoAL4MHl=m&z!TjBrm8u?*m#>Jja#KMQ3e~u;%%4p@@S8LjC z(bvz@NkM(hAtp$991C={@%A3{$_;8a5f?f>I<^CrtBu1rSrN&~`_++-+2;P2c_}nE zUMKDhkcg9MDiS5~uW~TGZK7|IDqFY$WZRpk4|-Kd>8Af1$@Vfa&k#OcNhE%D>(jHv zjrz&~#^Em#k25MSR&27+8EZ#Pdd0#bXzY^yF}Z-!0bw$)wCNgc5f<;Q$qopUi%$lu z)#e|S*kNCORG5y8IY}CM4{==lTcCylw-m)5(rvNZ$9JPBs8HD>1Pan3YC{U0%o2?X z&oDY^c4rABCgC4J!Ksx!iP=cFWL{6WWvH19oD@Y-QQAMxz&76BJ9AM1Q5B5Mep@ z^ROJV9(oyk67k+h`tY_nxriJ-d%SWtW-&F~$0c?j#%fFsC|LImZusW2NkOFIhjK(Z zYV35X_YztQgXeizzFChIVkPoqU!c7+}6wJA>Lj#jSw-gQ?>*$`;~(8t+h zn732={JJPk{4AIv*rcyIG{A|lN<6Q4F-C4QIy4TG80yij8X_p#&NDwsPd#v^QcMKF zYoYRLi521|{vQlH?~=4Pd9|PLStNFc{Gs7&XG5{$WVu@XQCuj5B^hjp zNa1hSw!2%3eMUL9{1^At+PQ&pCS^C(r`M#KEiKOHR;^DKE|m7Vboo|KvPM_Q`d7Q; zWK2Ehr>VXsetW+sav}EhoyjBh@4|SDWf2=_!`3_WPP&q5a{@o+vktWA!HE{O&@Tnx z;?7O=j%OW_(^N$+0yYYrlC|tl-a|2s3!{Xgp@q!Ukx677TG{|YCeC&(6g#pO_$z

WQC9$2mtNxk3Sh}{v2dlWy(hzf!<>#!FT)dqifn$MN)4z zL%W%%z8*xRd$XJo`_v@zq!%v2u?u9))m>^T&WXSuaUl9Y`h(d=?o&sZtidUx;E(I) zDs++TCNYI$2p5O(o1#iSFjHdM82OHM3F12|#p;&Y z`c_K3cYI=z4z!Zlx>c}`9;xk$pD+f7ZC_tWDrQom0`t!;2ukw$`Z%>F&Xz7v&x+?@ zNY&q2=<37S6acUA**e3t04qJE(>V?5iSgT$f?+YMoWUA8BBp;yn~-ORH|Ob_Gb=Y`!!wHW zN{^07NiY&6pXg?Gw9q=7a)(t{Nc;Ol@qLl5uW+X9YLOt*2%eDkpzo8L4@>guJW^Fm zL$hvuV3T7(NMhmT-g2#IDNQ|s5jQ%r*Ux+-?SxE^$#OUUiiIJr61I$~3nWir6fH+o5-U$` z4rWBkWs#@*$U(wXW5?6#=OwzdDlbkh3>WYX_%deydiSj=(H%e+`w-KKpRLQMmbR_~hvs zA=*#Vzz2<3Xs;1!Lp$U5>_=OPv(o``aiJBG#!@OjBS0Ji)5>wAxK?1fYVx@_Z1OR% zQ~YWh?{wvw-F^L^2j$AuZ*-p;c5nvuDmtE4r2!q&v^*e*UscLe=?`TwiDz_v$8nNd z#0*O)Qd}r~%w}}my)-Rr<$zX*`|Uwe`_n=~FiVYpIPzF&(Wzl>`y3vDQfUi&uKKjh z^Fof~8h=knPrdKGhM@c4a)?Q>O4vd*d>SBQY^Hh}-U&8U341rH42T1$%fMr2VLCOT zRw9zeWjz?WuePw#p$Nr3VcG}b)6{Q_sUILdE>w25;zwW^MNr&Ml3d$QF|3<~r>p&4 zD3xBH5iTwcA2X?@lXbx8PwWFD%rs59>(pk1t51>yFG3&-Aw8b@Mzb@EME<6z_5 z^kBWaW-$11STN)%)(>I#Rq5#`}H>ANhFE{Rc_eGfK{7yCE5r4FLS1+d7*<@xDuzGck;R+xUiqSySCT&y^AX} zGrfHg0-I<`NxAM?5{Dvi#oZ$i@7`hMOAjKCdqqCL{l@O!9{K=*Ozz4SUf1~Lz9a{Y zZ`58OmDmj|aPeQ$&{iZ9SKYNd`UhQ8yt#`kDX2n`i)Jka2_7sI-&d;`WN z#}6elaYZfRP6-#zkrkf%%*koMI31nUU>sgu^{d@IG7b0JB?wod`*y?4^)7V&@l%kS zTopv-X?F_C4Y(t|3jwv)svf7=Et#gnu=@#$a|E)R-fm_nZDvVw1AeGL1HB>6lZFY!nc#L||EjzL;7iOR$ zLVL5ysN}05x$^kI<`Q2Q7l?96dawjwDl_KPFxr4zn$Un#n&3}W3at%u10fn?&^Tq& zD2}T_8#&ZD`B&pp2T=BRF;s&ej-Utpg{!H7j3!P>!Eu2ch_3x0b3ytoo<~)TFv3O8 zsb~`hkTokOvbPEhQX$8oHwQcfabY7Gc3GBBt3TAiTQ{1FV0~q< zmQMn(4%Z9r?sWuPRZuDC$jH;HxGL1U=i+1<7GxEA2z#(fcfOJgRWQP4$Yl(S?E44a zx$L3vGp3IOfs~C9sc-6WtTD7QXGaGyu-_P(=T{=QhDn)cGV&DRnlcz6rLl`4UI45p zt1Bd`Iw{o5cbo5oduO?JIpKwmJ=MVeE6V-;^Qs;L!b#s63r2qm{|5!KzsrK$s9z(B zikis_hI%2!I!0NV7+TgO1l~2>$GeVffePVgXQ^)(OmXNzac|h&bw51AeNx_DcIG9u zyw}&>r6gs1sk#jct>H*5)K&O$FDG6vSigA$5|U8rn|>-|{a)!da}~pzosTk|&ls%1 z#@gQrpE1aJ5qq`7a3mMbOIBX?67d|A@Z50mXV84m>E<8j82Xz00E64U3G-5#!QfeT zqKV{W=;f(#vxzb^|9u28A5oEo@*U#E315$ADjq&e7Dks6O6uuUB?7uLMs+42dQh(e zn8IR_750I?2;;#m*1`aarZEXB-PkEIi)VlL^9q6H3dk^ocVbk!H=^}22xMvtLq z4%|2ObZ@Exu#>CIZs69R+~VC{QiEj-M;5()bnboAudUyZgM>De`=*6ttk;#%7QcJL zJzB&xp`N<3tJi(2UCvV0v#RqX5+kgbbRSas{03tbMO*nnnly_Uqe;^lDj`?LT&EXQ zu2K_YGZrS@Opi&FzWbZML0*-IurI20cLQap7VkzCf*yOUpBD)-4_zT$FLEV7)^Cc` zbLyWm$YwcmyH)V{{1P9NC|%%#bH~Ub;=? z06dtL>oNrISEGwz|7B?xv@Er6Z3%r(vu3mUml%TrAd@n+#&g_mcvkuFUFJLiL`BdL3QxCdAxJbX+NZFQw&=EdAs?Z zf@kxftYV5E@PW)yb%zhA^JH4h)7oU1t?fDVoMt+{6iz-QfyEA}l!Y zndV>w#Hij7p`DaDKj^PVdGxi|^hI$v`a5-r7k#%S<;imAm%ctYw$af@s=Wt#mO z8obWe>@PP?x=toUS@+iixw06B4t3EEyIQ*5w3KDh(Wv$1`pm#hA zL_p4#vw)3+(6DE_;ZL3vTe|5D#83)I5?fFl?NQ9gqo_{gan}yc2jCPGhtE4bS9V}5 z^|gP#>sZ8X9|wu+5>Ku_zaO63i~fXiE|G0&-`G?8LfZ(zWi^D6$eLILS)sWmueE%} zrjvP3nHkMrE7y|--2ZU;yg#m-iyY#^45@umh!4BC$3q5hE;SU|7#FYC<_p~WtK8W$ zM^kxtPq`Rxo8XumuHuK8dr+=oYT4>R?Xe#3Hag)lo7F2DoJ~6*lAl-0QQ@IVdTZAj z2v&@pt%FX7#)$yi>8%=mEQ;xFQkgE%kgp1-onl4B{$?6JauyTcdP`@eEN(%5@e$u^ zMU2HQ5%;E5f$#}TTBJ14RNSd--gYyyO`-%hpNERDY6my;`z(b)*a*m*%+T<9A zWyU#+R+1Ns<;=Pww0$B{ctB_kstq4vA{GC)`A0@GQvxq(R4G(BTmUlpJSrTBiBuNI z>m*CsQzkzN{t^tg-MA9Umi$YPYG_SkEXkqi|_*(cxW^l4hP z!N&Q`b6xi)m}jpw!_jZGUC4nLWjBKpsc@g5;LGGItilu%^boKAlS zpS}8i%O%5Nd8uA>;dDWP3Fl1!C=!v?$n5vBS`J7Y8(I_-hBz)PRgy5oabXN6Tt7il zbQNL)haf9|B`j^xtbnMR)_*|EZn`edV?Y9u)OFT8hVvi#oCqhVhYD#OB)FfwF2<5% zFN)IwzmPQf7Mxva5@Dg{KnQ(0kxInBMx}8>iRMy4M{cJ6#H?!Dl(r;#&}>42_Lgjg zF)M>Tl=pcpJ;LjmDsoaIWCjA&zY%CEo4}eZtH7{!h}rYMGx*6^6UuwtZPOZ1bX48A zM9pmmk2%9_Sf5nPvVbK~lvnUeTc*m*^@~#SN+M|xtw*+gQld*%mhsf5Dv=|xNv@%$ ze1}DD^uuzjCp=q=NvwJ9Q-vKRl>!WyCDvGOW)O0y+=MEv*sS9lU?I_yXSYoM5n*}p zwrPHG^q|^=ME`CDh5yVoO$vTjmz$UIFcI-V3Y6eIf^-kIM&cQ z`aJ0~424Yu949qu6ZtgacC1+BhJT1t|5DJs0C`0}0;YZwwbL{?xG>Rm5&~L39pqi| z{*&-$@<4xcWx})jx1hxEU!$)KYYjs_HrIy%!nB&iGDKDZ-0e)ah?g&46@%39cxI&% zzJPk5gU_tqYOo|%esCR5uNZ0Z|H6t2=^X?^&!tU-B$U&q>19mcBdWcCH@y7d2UxE9 zT4NXC98`8Hvi# z#37kGrn=O_-&}afm)V_Ruu28f>_(B$w3D1&+GRGV^ZkuOkddF~DhAVk5YKD0(?XG$ z%Ins`DmsjTl2O5}hj)aB@xKT!I_ushE76KepKI3ltV`nng{&jjZztPc-^=tDJPr3c z=8{|@v|k8v1UL6XO5E7kE+bkaRv}mj%o}37cT{o-j3piF2kei3b><@xQ$039FpoN9 zYpVBw+Jtd75J9vj5!r*lZw!D5NI!Bo?D`5=qIN=5`oX1e2%sLpSEAFYJ@M*CF^Vmf zNj5>KX8X~@Z(?!^#JP3W0T%H^}~UtiwC2 zm6#}p`hkV)Rwm@@?aj&g9&*}aYVc5RfRxM^sXorj=?15YvD?Srsp7mgjHk+*!MSSw zm5w&6CYYHw?8)~>icw2rI|&xi|81P+_`Q zGdw_aiL*3`(1v69Nkp?OM7a%}$zRJ(%5F6B^IFYf+Mf;Fv24^9 zHAU8>5KKH73)O3U+(Jgb0I5FSd!x1y-cPaXziO8>sA+$`4qb;NoEiSJ+0;dzmuLy3 z#ZjrIYp)TTWhePWh%ng+65a^wB25ZgfdOCrm{Z~Gs;gZwV{u}YFwSiE3`R#K!Q){7 zXiT>s84J$&2gx}W@|r{s{`B5e>ICGO%?AhxyE~Ta^G~(ZMuqp;pEFvH&32Q&$%~>b zImg-^g>B6lSwd(nV>8#z0eG7>C46?e!R~WE^rhcr4Ud8nH>=0vxmWiC=D(!rg4t%~ zQHG?7)8B_hF8pv zs#E_Xp-N1Xpd)_u4t@!M5?jSUM=>wo$0K^#vGy=8?jm8He~V-V1d?Nb;AD#>G$ z6-$>YMJfOK{`gX!J$v_%(Ta`cGcS5Tx4*14vF@(=$pCVnXa0rZk=Wd@9RO+`##`sk zz*9HQ5m&BZju%eOYRq!=T~l556wQFm}BnE*=Dg_Y9A)$RCMnEkB*O0FLk&8*^o zqsg0?TSW#;vK&tAT3Gd2z@vy-ER{Gnw2P78GK1GmAGQ00(wWU^ggfqQ0^oocJ6oCu znno=klAr}8y4}cVDQrCBV0>4+9a{c&Fx9dMa3s@AZ$U1H&p83lIc1PaKOXoxBQVr7 z>9AOf0WCl7>$Fq*F{R?lxJ+AFAtaHu-Z;+Xn2UAd1W z|7_QrrU{yse<))9!wZGxi09n{!xtU4R~c_f6g8^jvyJb`7iC=&`mD<3BRq9B60MJEG4>S!=D9(AFH*D?WD(ggaEOgs?QWpT?^D;s%nj>9;w9 zDUHj`a5iLeI`qQuHaKo$^6Z(e4rzGbB{9(=Cv%DSqvUI04#0-FI+22bhQ}0DunX!A z9uGZ0Z91<~+xWR+sI{k94tFoDPQrW1kJwB)rnoh>pV&6K@v7ahv6nbQi8@$a{5L@x zqI&bqR}Kw6M;EIX+Y|(DFn-$Mnl^KDCTWs?;+teSwov|i*lga2GH^V6mhf?zuG0S0 z3gR%j7Tk?Vz#p~ewOYdGV6D?6g*N5@Zi37BlALD`{-{qtq-8~yEtw6x%2ClbZ{^) zEAD3qW_bV^$LVKQuuvWNkWrA8{hv^0Eub{ca>m(^&g~E?!rQpZ=<0q9miU1s+h+$v zK~Xd5-F5xbk*${u9lbglIYI;XHG%8rmxRnzUhOO{f&K&?ZSvbdk7pj1QT#Qd@N033 z8QSvpS8Am-AcEAZE|n*}bQ5v=6;Z~fTFWme{nqj zw77Me9e$njH6=`eY|ZO)EgrIA)LwuoCi$2|!jy)&9qm6(x>$@&RQxV|o;SjfJuY*8 z>!fAbMthK+#}cf~3x(lm%jk5gaXzXbu@Je>Q6op>p7nH{buEO z=l60+)Zcv-rap2r#c^2vb|j;P9diO=A^xk+z3L0aHM=>b7st9abV7R!OB;LBD}iqb z81!fHC{wk2O2x-+UD~`LlEX29etN6ZI*h+8GUO?516`Kp2J4%KaNAcF*3O;GwXZBB z5S_}O@*mH>;1$8mUxF>Q#Q34+S*87heZ<9)bQNFwSmpoO>v02RW0rHmj&!b*a8c6E zov$^W_6qq0-Omld2w8h#vy1H32=p^n?M|2|edLvTKTm8N#NvgwXlD{6=)6>zW^VK3 zZPso*w#O>|JkzXf@rq4g4!dDOYR{n~=W`t*1^nYp(dAvVxoAiTV9kMIDD)3?0AYB(%mO(H+E`?FiryJ@xpfcQAFD6LayIt8da)Mr(dQM6+C+p}Llak#Qx ztdYHCbK0J_f7RO#f77cPX(^&Yq2{2AiJ^tSYrUe`*h7UpoFn0E4nhlcUrMleKRf*v zSe7RFjHkim3jFjr1SKA=C>mkCc7e$mFEQ*k{@oHl^l+|B=rFLMw4V}``QG7u!)w2dDkD6H zt<19>wNi^xD1}hxV~5JClZ#0wA3JBWUX!ZzwDuO&X{WzMxZis0+~ll1;SFzGI zoL5r3N~APdq$a8QZ6;0af2u+e?LW&xV{y!bVfF!C*Xd>?l!hXF3?Ug(Gy%~7R6R&eMpjmJGNL`-2ZWTtV1pcavyHs1x%r)vEZx*QU$5~0ku}#-KKQg9EIs#M<@FX$O)dLmC~K2F&k@EK&x&rcUCG4iN#Q9Y%5qCf}`{ zlp$9&U`opT@Xt=Sti%Gi&S|9*B%fG2GD+RJneF#1o-+jg8J{4p4FWQfd$we*A04YauS3K%r0iyd&-}xp$W7MCr3+LKg9Fri%D3qzIC%^?fn33Od3O#ba9R!LKLaBzBAUqrmf$^`Z$zrAefCw!NiY9NjMteq zSn+ubJksf}1f*59r0;|P)}G?D-Pd@C5!v2^!f#p*dR@kHia=^E?LjrTRf`0EVo4d# z+^@VXe)3_7E=_ry=7!coa|Wh!}g6k%zME zl|Y`l7Uloo;V1$RD@d1xJ06BP6piv!jF+&+3Vi{;Vbp!~Ps=>k`Z>rdTs|~E6k`Ne zBlJHe4o)ZxE=E6bAO2#2R-^XdCMg|pOIVeNa8I9%_rKx1$W1M(3V?BnJNxEW!Z;<~ zHZe(|Dh?_H(8^v{XCa!#K|-tl4TqxX3mEUByQI^ve(N(0gR@|2bzz(p@);gB?*^Ef zx#$3H{!^oMfkOMy`CG#WOj~&`kkunE5sr}`8BWZ7D>Eh;}UT= zZ~oGpiH|_zUtryy_23t^^?UeEl`k_m!O9U8<9vd_GX&nf$sZTpeY_UlN|Sz9

9pa}RUKXUdrihd(N~blRBd(zpR39O&1ICjt6aiucPMJ|8jIMf9)xyC zU81K^hH2+&OqCKEO4{^R}ug*sZrYrELB+g@@{<%zq&hntSBg?@^VIo=93#G6764s_YgFgX%E zjXLbwf5ZI&M(=DQuvDHXvzDQ(^e)`Z*T@pq4!s<_vNe|V0~^>cRpxF|JjH4UP5WmN z!w?6B6?Q&jPi+PFaYUgeKQU2tM7+$`gZJXX|C^-TULvica( zM~Of#MWW0NhBB_0yEe2^R&%Cq-JQD5qK^>6Q^^eLkIa zafeidD>P$@9G07lo1Qo4uxv&QGF#aQDgT;2jOc^syHq)}Z2p9ASZ6@x*COqRjl7{C z{wOnfv^3L-!&vGN@sTo}b9CUJq1Uo1L$XE^992?Z7x=Uxx28w@2YMYx6+$lKV zli1D)+&ug6(xT+3EI6M&y@K+E;as+i|@UPe_JV4?=$7l}r`UsGnpQ%EPn>HQsdY7Ms?61$>q@Jt%a3y0C-#7tNtBqh~_J#kxohHOyH0=q1 zdogb6Fx;oUSjr7jpR%`3M>=XqBtWjtG2hGf2`GwQOV#9w91*p8kZ*b&A*KN#e-=Y= zexNPMYL0r_&Bs}3WhI8>46LKOHA;)DpCuB-@woo7__(3mj=o=108*!%sr-4tGnGuyN7U5pHIx3RfyQ)1a+^WgSp2<)5XFYrBTXsl4f)Ei(HK1A8kGn-%nkz$&KShpodE1I1U-MNo@D9ktJEnhO23*#f%{+>^Dv2@lH~K$Xq7SI z1#r+Y`p-{-cRvxmryy0!4w8DSbtiO{?k4_2mw)S!qS#}h^_r#HJ#c_c* zB04b$r)^U_@%WGIt1?948+_evlmU(=E)Et=y4^Di97Frbl&)uymut(lYE828$LgUt z5=4#C3SpT%Ov+0^KPcOq_lg7;8~O=YZo!Z&^J~$6!LX&?g@emu&ClTT8QOFD5FLP> zY;)hkzK-7Kh1g&3s|Q7XBg?xQu=KC-k!R_%GQaMIavvM#t!LoEEUcmku6f|_8es6> zmjkc#@ws9cp6kqP{o7@s)T1dM(+(<077%@48Z^2cR;B$xsdwbozeM3>9rj1SFg2PN zy7WNL8BUHuPfTr%}x7W;? zEUY}e_-6nhe89WRp3Q5!g?nE{yaYnarYd=$tEy{!H|@VVgR|I#b3mH`dP=ug_#1(R z9}!qsktCD&&t_A7d8h?c?Q%F>jyJe#ll}(_*S7gj0t^vtrRBUV?Xn&P;70pb3IU8K zukTA$PEy{#k%EA{>HL`>oAlq6@}|Kyw^^*EKVUG9(MnKjX$37eS2jJ5@~Oi-B~I7q z#^sJWiTOG5S*T$!VK8uRm08htO~GjR_7PJs>LH+899acTkC;U4T7A=Vs+p#yIKUC0 zq>RR|z}vM#^i#Pu?^g8&X@@4>_cRj!x1TzjYZU`>FkE+Wunq(x7&J_H`XfuSP(E0T zQFr1WUg#g?p;S({zyVq3euT)T^pi{i(qg=!UW6*FU3=n(FdIsUaYrJPuibbt&I}I;f2;ey0;XuO{}@+Z)8C_&HmRnF5sm-XM}p z2(^rPkbgqlAV$&L-XLNP+`bn0&kZ8O?*F+#+;-)Xm+~)}dDM{p8%fjjal>7C&9djO zVHj(Vpjs8~fQ5M!&!5)!*>W{_!`xx8B7o#Si701Bf(^3fQBJ27kQvib{?C|)ouE8b z)^NZv}rMOBH^PdvOvHg;?=;f->%nftPWB0zo9>~IKC|ypzYyA*+ zhq~qrLIj}^Hpb_H1WJ)M$569AE7)q$?z?}j)+LEAw&p29Sgk&$RrKHC)>L^SiCw=E z*fN$wLaz@=H$wM+&`|yV6Ah~oXvl>?L!8WF>;IzR4aPH!7J?eMmyTX3%54wXjnBI~ za{Pbq4JC~LTju<2)1x3<)BmThGmnR|`~N>hLXv$eQjC2mdq^c^FjC6CWEo5Lt!zce zlHJ%c4B7WJTlRe&LNV5{OZJ_F-!K_4}Vbac~W0sh~yjh7*Xh)bkv+1 zEuB2ShjZKGtxh0!Ws!06g}po4Ak)VY2wMjGLkSV`$c{(IB8E7?3lJB4DOh_lXBheI z`P{KEcKtN3$vseK?{KoJ6@5Dtr1)t-=q!S)T6KJ=r7Wfu65I_1ZMCD?9x0=&>PyLjeFFUo+^C&BuEV>vKW+lA`F6Y_)xrs~K>t}9tep+ae z70oFjdUvZx_GvLiq8;h3xmHZR!h}uLpU5?a$nH^!Vf2+5>)-MBuRT!{S}?^mLSRVZ z#c!#8hBp^bc*wTPay^ecTlqAOqB+bs9;mVtd6{)90stupK3`P>_?# z=LTe`K53VzKB;2A!&PfNHal9efRYNZe@ogBXczBlEhUR*lXS=LC+9*H`8wY;McOqB z_{kwZ+O5v`>DDxs6~1^!?=1}=#qDZ*yZmhx>*zt0_z=(&<|5NN*6-I`5(L#>Ko1Kd zwxpXHJN@2%LbJ`7=xIbv&3=d~mwSfej_`>s6T7YhW5!qonnbWxfhk6eRiKn=>s_Ki zEwHL=)%}Gxq=-CYG96Gyn0t41&gTaIbGscN@MZP*2Jmeao78JeWf+gh=*7_rLOGb* zbiS_L!Xb(eE#lAABv88InI-moRH`i3D*J?nh=$plDm`W{(yzvmZ^uADB(IKD;aU?{ z6CfafZ|Ur`r0U!n^*!a%4~fg$fqjA-M6-?kfK|ZN$iV=x3ZxCSe*mlkIktudPGvHQ zdt7KC-s;%?Y%4#dn$M&Hp?m_>)r%2lp7cu>s~y6aY5|-)BNafifX(bwWwL7@bXPtE z@9~l{b=feE@*4>quV!50cr~1ZHv5Dt8DlR<5QDea0Le+2Fb~c>m7IHvLQi@Fau)jC zc0BvW!arN@p8gY!0AEq-wkBl>XqCU$xcbXtB3ox(A?AyUi2!8p;HIeYdUtODgR<2*!z0t2A_@nU9e*hN0I$qtR&Iu zd9Ahkx_1VCfp2TdXt%Ex0E=({EV`=op9PD%wXAlD##DPi_uUPk*~4_-b#w*`qT-KU zf7G4?^Mt5;9F_R|M(tQGrxwE#wQY}Js@_ec>Qw3-zdhu1HNctPmRwnLtG(H~ua&(Q zEVa2D`Sg)BC5d5Io7r!1j=c~rcnf2q z69U-MEfpQ>?JUz@&YRqwZX&qOfd@*7Oc5(!(P0GJol%&^FqZ$iOTvTwlz;(9p+-o`L4)$?gZP6I2cyr>3G&?{QzoNtZHH!m)S4>gT{PFY^j}rQUz@L7sYfAjA0|-WL3$4sFA-^a*3+Lyv%HH;L6Jb zK;QoE8n5$Uw|S9F#*w2L@C$eKb7l0<*Vw5aqQ(*2^D9+N4Wl}}j1zU8i)V6@90dG) z%lSwdyVeM;H1#b((iSNJuC2ZvpSSpyq>dc-;8)A^y(QaR>f|UE-Uf=VX%jf>ySpUU z2kpEzk}@k1+2U*f(G|P|7%Uqo+S<_2+);_Q z)X)&CD9Y;7z|S})Zt7K=YslRyi;DHbcM!@?2Ih3`Y|F!D9M8xD-cY!&k9|LclOwIY zIgor!xEPVA6M~5#Z~}9+%>@Y>h#F{OXkvZve*YfTubWF(S_AEmq*sZl*)n^}K?P{GJ@$C15+4^f>JI-fWrnAfv9JF_MKK)+Q zq&=8oIJtg7MqS*A<(jEnBh(323K$GTv!Y6|apsY)@-^^Pjf~g|7h0G%JN9i6%m~#L z$Q=q2$X57vR$GM9bY20Hk*K+252(~$^fVde>+p#YtpzqX4Q$Ohm)M6AW0$iY=e)> zh_5)5b@UteX~uPT_G2Yvz;GH^ZNCaU1L-ns-GqA@(~Ank6in1qFAE&=b89iEKL4U# z_f!}cQwmDwrw~PMg9gLo+8A&144%qJS9DN&L``Om{>XaS{qOW5g#!jC3$r*s3~DQ{ z&-x|gPU`HG3-?4dW!+1hby^ZH&~9@Xzf-?7okR6Dh+Ur~v}l%Ag4K5}4mk(voA*_g zZ+|M|ocB^DP`&U^Zprsa*Gh1YG4-3to&JwV?Bi?W`GH&_4sxJ6CKxeEO~1>SgAtR_ z3fX7cuYnkRdY;4;mfVrN_oXBE;%Ofyl_Vq`t$f}{zyGbGMX5eO2KA>TSwLWR1sruB z3g*c=>tTYAgiS)qh$oEu8sOa|6PV{%KOPuJ$lj{Su6a&BA)3ipBDh;5gR%$!D5D%e z8OtOBbCAE>XI_z;+LhY*mC#}S;`^0sn28{t9^N=8}?1a4@*zWD@)hTR|c7nz6vUNvU zHR@R`v@l4*^$45`OaP@p}as905a^NSyorEFt{4L&XwWed(lqe6v?4vkHKX ztD@uqc5`rgb>?d`oq6=wH;!PjHGh_xR^CQ8A)K2So5`*8Ca|XZ-KN>*?<`B@Gn$gu z2JZLJaud=F3JpQcsx_Z>K-Z#P7oxlcSY#PZqjK(ng9NRsYB2DY4oH>)uxpgQxKv8wsltrkAS zUEF+VLI$)kEH;7L>O`UD7fHwYPM*|aP0BOrhtEt759s9g~@1(;1Tz|JE<<;ehV17PD@%mVF@NNUo`JO0+_ zv*F_?*QZFS*j$rr4`KLqf`oWg%VmqzgCSJ}5@dHQ60lVO_V-AOnfKAXvaU74e-TAM z8{NhUlZuH0c+>11!rp*5nTs8$>3dVOG5IgG#=;2HYr(d2eZ=`=3bxo4v_P`8XAb9) z_cvfPQ?%TB0oB&|)gl*31fzQjHDx<9;f#!i@j_}l`e%U*KK54zSFD@>Ywmwx@`_zhW!f57-VMu*VsI?Er!`NW5FG6^IsdlXI&QoCcg~ zE@=8gQX^Eimzpn(5CTZZ_gA(dMX!wPdpD$uZU=8wn8&w4WTp6PZuc$B0F-gd4oewd z+Goif=F^AX^w8urQ4308m08}Usi@*R;k*FX15lf*Y=mwLX!ylLjw%wKVJu`^pw@|t z^c!)r_Y~tR$kBM`NV4oz;2O59F&hf(y=dmQECqfuLa5j;!{j|2#KF;{NnX$Fsj zCB!ia$cBiKy=om(v>Mg3JWCmSFqAR6jPmQ5(VkAk|KOQe3&=_JVTLscj}x{_p1Lrj zrq+I}NGH{gUT`uZNf+f4-1YqkZ;NgL!hF8IaY3wUzc_xqo~|HGdc7qb_(1U=%CQSj zj_v#mYaA%{85-W0WnS%yUF&m(a*p?M3(sL!mHV}gNWUoPN

VfgrEPI?YFL`oy=W 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 F`+rG5Y;OPn literal 0 HcmV?d00001 diff --git a/_doc/examples/prof_cuda_base.xlsx b/_doc/examples/prof_cuda_base.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a793465379866b11560ccdbf626b32ff6bb2c511 GIT binary patch literal 26197 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 literal 0 HcmV?d00001 diff --git a/_doc/examples/prof_cuda_opti.xlsx b/_doc/examples/prof_cuda_opti.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2d659f8d202af3cb22ca192791feec8b4c95f15f GIT binary patch literal 44392 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 literal 0 HcmV?d00001 diff --git a/_doc/tech/aapi.rst b/_doc/tech/aapi.rst index 20f0002..0f96464 100644 --- a/_doc/tech/aapi.rst +++ b/_doc/tech/aapi.rst @@ -21,7 +21,8 @@ backend. It can be :epkg:`numpy`, :epkg:`onnxruntime` or any other backend. The generation of every graph takes a significant amount of time. It must be avoided. These graphs are cached. But a graph can be reused only if the inputs - by ONNX semantic - change. If a parameter change, -a new graph must be cached. Method :meth:`JitEager.make_key` +a new graph must be cached. Method :meth:`JitEager.make_key +` generates a unique key based on the input it receives, the signature of the function to call. If the key is the same, a cached onnx can be reused on the second call. diff --git a/onnx_array_api/npx/npx_tensors.py b/onnx_array_api/npx/npx_tensors.py index b8f9637..3e4faa7 100644 --- a/onnx_array_api/npx/npx_tensors.py +++ b/onnx_array_api/npx/npx_tensors.py @@ -17,7 +17,8 @@ class EagerTensor(BaseArrayApi): """ Defines a value for a specific eager mode. An eager tensor must overwrite every call to a method listed in class - :class:`BaseArrayApi`. + :class:`BaseArrayApi + `. """ @classmethod diff --git a/onnx_array_api/ort/ort_tensors.py b/onnx_array_api/ort/ort_tensors.py index c78fccd..2117e3f 100644 --- a/onnx_array_api/ort/ort_tensors.py +++ b/onnx_array_api/ort/ort_tensors.py @@ -39,7 +39,7 @@ def from_array( Creates an instance of :class:`OrtTensor` from a numpy array. Relies on `ortvalue_from_numpy`. A copy of the data in the Numpy object is held by the - :class:`C_OrtValue` only if the device is **not cpu**. + :epkg:`C_OrtValue` only if the device is **not cpu**. Any expression such as `from_array(x.copy())`, or `from_array(x.astype(np.float32))`, ... creates an intermediate variable scheduled to be deleted by the garbage collector @@ -60,7 +60,7 @@ def from_array( def numpy(self) -> np.ndarray: """ - Converts the :class:`OrtValue` into numpy array. + Converts the :epkg:`OrtValue` into numpy array. """ return self._tensor.numpy() @@ -69,7 +69,8 @@ class Evaluator: Wraps class :class:`onnxruntime.InferenceSession` to have a signature closer to python function. - :param tensor_class: class tensor such as :class:`NumpyTensor` + :param tensor_class: class tensor such as :class:`NumpyTensor + ` :param input_names: input names :param onx: onnx model :param f: unused except in error messages From eee11f287328bb0d8218fa571ad35e513fc4278b Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Fri, 21 Jul 2023 00:51:14 +0200 Subject: [PATCH 9/9] clean --- _doc/examples/prof_base.xlsx | Bin 27436 -> 0 bytes _doc/examples/prof_cuda_base.xlsx | Bin 26197 -> 0 bytes _doc/examples/prof_cuda_opti.xlsx | Bin 44392 -> 0 bytes _doc/examples/prof_opti.xlsx | Bin 35170 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 _doc/examples/prof_base.xlsx delete mode 100644 _doc/examples/prof_cuda_base.xlsx delete mode 100644 _doc/examples/prof_cuda_opti.xlsx delete mode 100644 _doc/examples/prof_opti.xlsx diff --git a/_doc/examples/prof_base.xlsx b/_doc/examples/prof_base.xlsx deleted file mode 100644 index d2d94774c0aad6a78cf4b406890e3c94cbdd8189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27436 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

VfgrEPI?YFL`oy=W zn6_wjJt)svPv)KZFr6nw9Xr&0m59d99qi=CBZ=m!+CWgxK)j1@nG6t!&;PvnEfRxa zvY5|=j@xXQ#*?A|pn@Vq<40@-VONVgB?*vu73yF1AR^UvD#E^2jHB$2S-jGNK%~F> zSiERA<11cWM)omfX!ga=Xxh=5hL(uC#eYD}2qC}Hg^%A~5^c<2_EqzFi2Mlop6eeHN2B(=8-tM0{NloSm%ViTN#lTouB#Gc zyKP{G*&@rf9L8Nv-&I;-irC{4bxFK&XH8YZg$2V(-1*e=qha2A;kPG*%|4NHkcuDE zRUIr-S>4m@Rrra^Sbb2dVr)CAmd|A59DijLK9j-BD$gtTq(%MEiX$?Y$!wU|kP=r9 z30_*NQRfA5@cgE8zdka5Y0|yqsjMsQ8obQ~E!A^4&pNRe#F0Ez`h1Pa?Z(J|fyR)B zO{|TO)vU+KG_2+&hA>f{Z53Yjr~lqiN-tO3m?0JWvBo|s3#XS z4nH$K7ae48+?@kWt3G<{uD~;mB|03YG5PiY6BSrbhe{Y7Kqzg03A~=Mu^Mqsj<4|z zj{k(~M>Tio3JZHuNqi95$C}tr0vLE#@+WQErNJC-U^jhq^Wg=s(RWZ$?@^11+Lzn$ zxj%b7m`4~8o9QjPTs8;zB=Xu&P`FO-7RgbKN@37tmcM%_ zW}?+|;2-00Rd!qe;Hz~|`JUXd+3wDt@tWpyr+jtAOSVL|1bt}}vo_6(-BwtpdSCPj zFdU1!Shc(j$E9M<4|unh~hd~NraJ(TKcaZN%N$1 zxE}v8O=pKDWF)S>gJqAzq8&8Qw|jm^+YOdqDypS;?87h^lb@=It`Hh1l;R?n`_!Sm zVGnbsUgr|JVYQot9PCc1JyrF;`m4MbUsr|c} zVIpM^vcjJ`r6Vx2_=E~)N+Z6-XDtuP7&Eq4P*AGgUw?FSY53zDrVqk|!B3szUhjD- z01-bdFd=CccapUPAN}j2#re~Z7O7$hl#--WQEy1x@(cgr|CAUasI%2S^m<+mo{5Zv zsl2cxw8vu1xb4YN?Kf12?a8&~z`e`d7};0_$i|^?kwC8hk8E@r=h+6%8`jgCD5ZNt z2b?XO5y--S7$_#AGhTf({d=?5qIat9#nO$V`Coo4EXOmeyBXM1hFcP?*H*3d>rQ4u zb4+X99rOz~WzZ87(tp}q*Yr~IS1VLT6|sDI ze77jcXX9#OrKGWRMapdGwFQ0&&MZIfmG~tY=y2gug<%uXfCHJlMXurH=+}v4HFLQP zVX4Mt)m1#VTYQwoETpsD=6sD!AFX6>^FxY}UqxJ>@eL$-)+lYve(K;Jzs>cEr_m(c zN9w{+zs2iEjBs&(U-iYt9N(Bi1Bw{>S6|Y6L6)-%u~Uv*Q~B4Qb82s2QxVD=w57Q>Tgi+%Fq5{=d;@*n z(q}?D@-BmYW>e_9n+fk!2-5}WqjZnq<9bp|dr+UCFZw5p!87F1<S9Z`WP# z_D1Z~NWF_TETADDt{a^(K`K|L3aM3lip6(a;}j2C7AjX>RyhwLA-waYNMYgJfxYgJ z<6Ox4y%&q*Qkk1K`dq2|iLa?Am@($-m*Xu`nh&qq@u^t`VFP+f9oiMvrO_9Rg zTg6;RYd6H^(ezY@dcgdG=>xGp^>8blk+&-?1O&EB1%mBj-)ibE`Wq95d0t_A8*UJm zTYvNIQK(Da&+2pXk1AZ5wEA*skR;V&pY!U#`UE*Xf%28STh*NHo7Uwve!$XOgL{uWByHuP_#aG>(adf zN~pe4R`a=Axu`-}f6|J8g_KXt;YQ8dyTPdX>t+;+CkO;z0l9F}>#Gim%{s$s zB6)bl7F;h8cF7vtB8vC;J`0C^+d*C7o!??_=WDVaELU>)1KuVHU;66s1^R}BdIx_$ zzbWpff~?lCou`oE339BLYgjMt`a zr5PE1aYp|<+4`1AEqzdzAea`=KO{#CvMD^kxtV0w2|rs9xRrzpXejyV(8ZjeZfIj; zff>BPVSSi;N#s1zI*Gnndx4df^kO~17q7^=^=iE-jc$&bu`Vp&0COo#f8b~v8tkai zi}xp&OqSg>2;Oqwf5Fp_+!|Bo(^x6UJWpprR`i2XYhvNMutvkj>_a$k1fEhBsOcpsuf|chSl@ir#6hb6L`_R~S{w~N z>be`4DWJf+!?H;@g4x5={AL2H0ggvTmes#DN&gu| zLQ6AW^MFo01Ui`Uv~y1b>A$-e8&sv?(wDsjFMTMWoWrBf{Qmh|I)5$=oxj%s#ruav zIgKk!4S4d`z6xsgM%V2bn+gbjbd!8KBuTkt2I_>iEi>b#N?xUr8=RsB1@ELxUw=!g zym-I#qWM*H0}DfOdx+9gzRM@9Bk7AGck|wbif@n$y63WF${KTV&uP!X>HIEMPW9}fq!74Z9$K;p^Kea*@zWh!QLhx~eO!^pI=Q_xjnhcD?*ktupn*f@ zPp@#%mbI~Vgjzf5KXMJcAV?(RAKVb3WyBIv$jDy`-sOU?4(-VaZhhVMnhO(%I}%9Hd2|7WH4 zMAPpo-LG&vpL;^M!+79Y`d(|5588XpCWW}RlS-qzB;!_*>5IysK1TL{nd!+La)k{! z&Px0ChSrBVwhs^iCH}12JX6p2T|Fa%d@XsXYUJC@lS|Gmn&EeKF`9n8D=FoQo6Nb8qjmGZOStw<<_O9?y{5-b;U0^1*iwd+XC`WUYa zbNEcyk^NQ^f3klw_4PVIOJO(5)|*6*BW*?(^3O+WZi5ABu+}GJ{!`KgGQe#H_~)q4 z|L>cPfT+R#@dSGK>^(=grE%{WIxUNb=ZRnV-=+WW)*;;DxVQ2AUAzPM@Big)9^49W zZ)5mR1@B2NVk`L9yBTn6!Cg-LrxyHB18gmSFD`J4;^ytYiy9dJBa7n}#La_$7gT`$ z=gI#sE8-T$9p`@+&M?6i{vV?rw;tS~^mjc$rg(V&GO$z>34zO#@bHL%pSwT?N10)M F`+rG5Y;OPn diff --git a/_doc/examples/prof_cuda_base.xlsx b/_doc/examples/prof_cuda_base.xlsx deleted file mode 100644 index a793465379866b11560ccdbf626b32ff6bb2c511..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26197 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 diff --git a/_doc/examples/prof_cuda_opti.xlsx b/_doc/examples/prof_cuda_opti.xlsx deleted file mode 100644 index 2d659f8d202af3cb22ca192791feec8b4c95f15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44392 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