From 7e94de4b282442653596f20cdd69579e6147f169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 01:21:44 +0100 Subject: [PATCH 1/8] upgrade version --- .local.jenkins.lin.yml | 30 -------------- _doc/index.rst | 1 + .../dsgarden/correlation_non_lineaire.ipynb | 4 +- _doc/notebooks/metric/pvalues_examples.ipynb | 6 +-- _doc/notebooks/ml/logreg_voronoi.ipynb | 4 +- _unittests/ut_nlp/test_completion.py | 10 ++--- _unittests/ut_nlp/test_completion_mks.py | 4 +- _unittests/ut_nlp/test_completion_simple.py | 4 +- .../test_documentation_examples.py | 2 +- .../test_documentation_notebook.py | 2 +- mlstatpy/ext_test_case.py | 7 ++-- mlstatpy/graph/graph_distance.py | 4 +- .../detection_segment/detection_segment.py | 2 +- mlstatpy/nlp/completion_simple.py | 6 ++- pyproject.toml | 40 ++++++++++++++++++- requirements.txt | 6 +-- setup.py | 3 +- 17 files changed, 73 insertions(+), 62 deletions(-) delete mode 100644 .local.jenkins.lin.yml diff --git a/.local.jenkins.lin.yml b/.local.jenkins.lin.yml deleted file mode 100644 index de16e7c3..00000000 --- a/.local.jenkins.lin.yml +++ /dev/null @@ -1,30 +0,0 @@ - -language: python - -python: - - { PATH: "{{Python39}}", VERSION: 3.9, DIST: std, PYINT: python3.9 } - -virtualenv: - - path: {{ospathjoin(root_path, pickname("$NAME_JENKINS", project_name + "_$VERSION_$DIST_$NAME"), "_venv")}} - -install: - - $PYINT -m pip install --upgrade pip - - $PYINT -m pip install --upgrade --no-cache-dir --no-deps --index http://localhost:8067/simple/ scikit-learn>=0.24 --extra-index-url=https://pypi.python.org/simple/ - - $PYINT -m pip install --upgrade --no-cache-dir --no-deps --index http://localhost:8067/simple/ mlinsights>=0.3 --extra-index-url=https://pypi.python.org/simple/ - - $PYINT -m pip install -r requirements.txt - - $PYINT -m pip install -r requirements-dev.txt - - $PYINT --version - - $PYINT -m pip freeze - -script: - - { CMD: "$PYINT -m pytest _unittests --durations=10 --ignore-glob=**LONG*.py", NAME: "UT", TIMEOUT: 3000 } - - { CMD: "$PYINT -m pytest _unittests/ut_run_long --durations=10", NAME: "UT", TIMEOUT: 7200 } - -after_script: - - $PYINT -u setup.py bdist_wheel - - if [ ${VERSION} == "3.9" and ${DIST} != "conda" and ${NAME} == "UT" ] then cp dist/*.whl {{root_path}}/../local_pypi/local_pypi_server fi - -documentation: - - if [ ${NAME} == "UT" ] then $PYINT -u setup.py build_sphinx --layout=html fi - - if [ ${NAME} == "UT" ] then cp -R -f _doc/sphinxdoc/build/html dist/html fi - # - if [ ${NAME} == "UT" ] then cp -R -f _doc/sphinxdoc/build/elatex/*.pdf dist/html fi diff --git a/_doc/index.rst b/_doc/index.rst index 1c92e321..877d55b5 100644 --- a/_doc/index.rst +++ b/_doc/index.rst @@ -78,4 +78,5 @@ Xavier Dupré Older versions ++++++++++++++ +* `0.5.0 <../v0.5.0/index.html>`_ * `0.4.0 <../v0.4.0/index.html>`_ diff --git a/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb b/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb index b668be60..3f5c9956 100644 --- a/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb +++ b/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb @@ -940,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": { "scrolled": false }, @@ -962,7 +962,7 @@ "\n", "def pairplot_cross_val(data, model=None, ax=None, **params):\n", " if ax is None:\n", - " fig, ax = plt.subplots(\n", + " _fig, ax = plt.subplots(\n", " data.shape[1], data.shape[1], figsize=params.get(\"figsize\", (10, 10))\n", " )\n", " if \"figsize\" in params:\n", diff --git a/_doc/notebooks/metric/pvalues_examples.ipynb b/_doc/notebooks/metric/pvalues_examples.ipynb index 24e7722c..48fd8cff 100644 --- a/_doc/notebooks/metric/pvalues_examples.ipynb +++ b/_doc/notebooks/metric/pvalues_examples.ipynb @@ -1045,7 +1045,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1087,7 +1087,7 @@ " if ax is None:\n", " import matplotlib.pyplot as plt\n", "\n", - " fig, ax = plt.subplots(1, 1, figsize=figsize)\n", + " _fig, ax = plt.subplots(1, 1, figsize=figsize)\n", "\n", " smarker = {\n", " (True, True): \"o-\",\n", @@ -1262,4 +1262,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/_doc/notebooks/ml/logreg_voronoi.ipynb b/_doc/notebooks/ml/logreg_voronoi.ipynb index 978832ac..37ee1351 100644 --- a/_doc/notebooks/ml/logreg_voronoi.ipynb +++ b/_doc/notebooks/ml/logreg_voronoi.ipynb @@ -167,7 +167,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -233,7 +233,7 @@ " cmap = plt.cm.tab20\n", " Z = Z.reshape(xx.shape)\n", " if ax is None:\n", - " fig, ax = plt.subplots(1, 1, figsize=figsize or (4, 3))\n", + " _fig, ax = plt.subplots(1, 1, figsize=figsize or (4, 3))\n", " ax.pcolormesh(xx, yy, Z, cmap=cmap)\n", "\n", " # Plot also the training points\n", diff --git a/_unittests/ut_nlp/test_completion.py b/_unittests/ut_nlp/test_completion.py index 742677ce..68091bbc 100644 --- a/_unittests/ut_nlp/test_completion.py +++ b/_unittests/ut_nlp/test_completion.py @@ -184,7 +184,7 @@ def cmks(trie): nb += 1 return nb, gmks, gmksd, size - nb, gmks, gmksd, size = cmks(trie) + nb, gmks, gmksd, _size = cmks(trie) # print(nb, size, gmks / nb, gmksd / nb, gmks / size, gmksd / size) if gmks > gmksd: raise AssertionError(f"gmks={gmks} gmksd={gmksd}") @@ -198,7 +198,7 @@ def cmks(trie): raise AssertionError("should not happen") trie = CompletionTrieNode.build(titles) - nb2, gmks2, gmksd2, size = cmks(trie) + nb2, gmks2, gmksd2, _size = cmks(trie) self.assertEqual(nb, nb2) self.assertEqual(gmks, gmks2) self.assertEqual(gmksd, gmksd2) @@ -207,7 +207,7 @@ def cmks(trie): # print("-----") for i in range(1, 20): trie = CompletionTrieNode.build(titles[:i]) - nb, gmks, gmksd, size = cmks(trie) + nb, gmks, gmksd, _size = cmks(trie) if i == 1: self.assertEqual(gmks, 30) # print(i, nb, size, gmks / nb, gmksd / nb, gmks / size, gmksd / size, gmks) @@ -231,14 +231,14 @@ def cmks(trie): (None, '"contra el gang del chicharron"', '"Contra el gang del chicharron') ] trie = CompletionTrieNode.build(titles) - nb, gmks, gmksd, size = cmks(trie) + _nb, gmks, _gmksd, _size = cmks(trie) # print("***", 1, nb, size, gmks / nb, gmksd / nb, # gmks / size, gmksd / size, gmks) self.assertEqual(gmks, 30) titles.append((None, '"la sequestree"', '"La séquestrée')) trie = CompletionTrieNode.build(titles) - nb, gmks, gmksd, size = cmks(trie) + _nb, gmks, _gmksd, _size = cmks(trie) # print("***", 2, nb, size, gmks / nb, gmksd / nb, # gmks / size, gmksd / size, gmks) # for n in trie.leaves(): diff --git a/_unittests/ut_nlp/test_completion_mks.py b/_unittests/ut_nlp/test_completion_mks.py index 9eb42f31..55ecb81b 100644 --- a/_unittests/ut_nlp/test_completion_mks.py +++ b/_unittests/ut_nlp/test_completion_mks.py @@ -56,8 +56,8 @@ def gain_dynamique_moyen_par_mot(queries, weights): titles = [_.strip(" \n\r\t") for _ in f.readlines()] # print(titles[:5]) trie = CompletionTrieNode.build([(None, q) for q in titles]) - nb, gmks, gmksd, gmksd2, size = cmks(trie) - gain, gain_dyn, gain_dyn2, ave_length = gain_dynamique_moyen_par_mot( + nb, _gmks, _gmksd, _gmksd2, _size = cmks(trie) + _gain, _gain_dyn, _gain_dyn2, _ave_length = gain_dynamique_moyen_par_mot( titles, [1.0] * len(titles) ) # print("***", 1, nb, size, "*", gmks / size, gmksd / size, gmksd2 / size) diff --git a/_unittests/ut_nlp/test_completion_simple.py b/_unittests/ut_nlp/test_completion_simple.py index 6cd069cf..082f9e0f 100644 --- a/_unittests/ut_nlp/test_completion_simple.py +++ b/_unittests/ut_nlp/test_completion_simple.py @@ -185,8 +185,8 @@ def gain_dynamique_moyen_par_mot(queries, weights): # print(titles[:5]) trie = CompletionSystem([(None, q) for q in titles]) trie.compute_metrics(details=True) - nb, gmks, gmksd, gmksd2, size = cmks(trie) - gain, gain_dyn, gain_dyn2, ave_length = gain_dynamique_moyen_par_mot( + nb, _gmks, _gmksd, _gmksd2, _size = cmks(trie) + _gain, _gain_dyn, _gain_dyn2, _ave_length = gain_dynamique_moyen_par_mot( titles, [1.0] * len(titles) ) # print("***", 1, nb, size, "*", gmks / size, gmksd / size, gmksd2 / size) diff --git a/_unittests/ut_xrun_doc/test_documentation_examples.py b/_unittests/ut_xrun_doc/test_documentation_examples.py index 681f6384..d6f2aea2 100644 --- a/_unittests/ut_xrun_doc/test_documentation_examples.py +++ b/_unittests/ut_xrun_doc/test_documentation_examples.py @@ -40,7 +40,7 @@ def run_test(self, fold: str, name: str, verbose=0) -> int: cmds = [sys.executable, "-u", os.path.join(fold, name)] p = subprocess.Popen(cmds, stdout=subprocess.PIPE, stderr=subprocess.PIPE) res = p.communicate() - out, err = res + _out, err = res st = err.decode("ascii", errors="ignore") if "No such file or directory" in st: raise FileNotFoundError(st) # noqa: B904 diff --git a/_unittests/ut_xrun_doc/test_documentation_notebook.py b/_unittests/ut_xrun_doc/test_documentation_notebook.py index a3efb612..af136bff 100644 --- a/_unittests/ut_xrun_doc/test_documentation_notebook.py +++ b/_unittests/ut_xrun_doc/test_documentation_notebook.py @@ -76,7 +76,7 @@ def run_test(self, nb_name: str, verbose=0) -> int: cmds, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) res = p.communicate() - out, err = res + _out, err = res st = err.decode("ascii", errors="ignore") if "No such file or directory" in st: raise FileNotFoundError(st) # noqa: B904 diff --git a/mlstatpy/ext_test_case.py b/mlstatpy/ext_test_case.py index bde7403f..2f093bdc 100644 --- a/mlstatpy/ext_test_case.py +++ b/mlstatpy/ext_test_case.py @@ -50,7 +50,6 @@ def get_url_content_timeout( The function raises the exception :class:`InternetException`. """ import gzip - import socket import urllib.error as urllib_error import urllib.request as urllib_request import http.client as http_client @@ -110,7 +109,7 @@ def _local_loop(ur): urllib_error.HTTPError, urllib_error.URLError, ConnectionRefusedError, - socket.timeout, + TimeoutError, ConnectionResetError, http_client.BadStatusLine, http_client.IncompleteRead, @@ -384,7 +383,9 @@ def assertAlmostEqual( value = numpy.array(value).astype(expected.dtype) self.assertEqualArray(expected, value, atol=atol, rtol=rtol) - def assertRaise(self, fct: Callable, exc_type: Optional[Exception] = None): + def assertRaise( + self, fct: Callable, exc_type: Optional[Exception] = None + ): # noqa: UP045 exct = exc_type or Exception try: fct() diff --git a/mlstatpy/graph/graph_distance.py b/mlstatpy/graph/graph_distance.py index 25e4af41..cb6f3de5 100644 --- a/mlstatpy/graph/graph_distance.py +++ b/mlstatpy/graph/graph_distance.py @@ -758,7 +758,7 @@ def private_kruskal_matrix(self, matrix, reverse): max(sum(_.values()) for _ in countLeft.values()), ) while count > 1: - k, v = matrix.pop() + _k, v = matrix.pop() i, j = v countRight[i][j] -= 1 countLeft[j][i] -= 1 @@ -915,7 +915,7 @@ def distance_matching_graphs_paths( if verbose > 0: print("[distance_matching_graphs_paths] private_count_left_right") - count_edge_left, count_edge_right = self.private_count_left_right( + _count_edge_left, count_edge_right = self.private_count_left_right( reduction_edge ) count_vertex_left, count_vertex_right = self.private_count_left_right( diff --git a/mlstatpy/image/detection_segment/detection_segment.py b/mlstatpy/image/detection_segment/detection_segment.py index 08c68106..7fff854e 100644 --- a/mlstatpy/image/detection_segment/detection_segment.py +++ b/mlstatpy/image/detection_segment/detection_segment.py @@ -233,7 +233,7 @@ def detect_segments( # on calcule les tables de la binomiale pour eviter d'avoir a le fait a # chaque fois qu'on en a besoin yy, xx = grad.shape[:2] - nbbin = int(math.ceil(math.sqrt(xx * xx + yy * yy))) + nbbin = int(math.ceil(math.sqrt(xx * xx + yy * yy))) # noqa: RUF046 binomiale = tabule_queue_binom(nbbin, proba_bin) # nb_seg est le nombre total de segment de l'image diff --git a/mlstatpy/nlp/completion_simple.py b/mlstatpy/nlp/completion_simple.py index d5d72f7f..fa7576d8 100644 --- a/mlstatpy/nlp/completion_simple.py +++ b/mlstatpy/nlp/completion_simple.py @@ -139,7 +139,9 @@ def str_all_completions(self, maxn=10, use_precompute=True) -> str: return "\n".join(rows) def init_metrics( - self, position: int, completions: Optional[List["CompletionElement"]] = None + self, + position: int, + completions: Optional[List["CompletionElement"]] = None, # noqa: UP045 ): """ Initializes the metrics. @@ -198,7 +200,7 @@ def update_metrics( position: int, improved: dict, delta: float, - completions: Optional[List["CompletionElement"]] = None, + completions: Optional[List["CompletionElement"]] = None, # noqa: UP045 iteration=-1, ): """ diff --git a/pyproject.toml b/pyproject.toml index fa4debec..d23b7681 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,39 @@ +[project] +authors = [{name="Xavier Dupré", email="xavier.dupre@gmail.com"}] +classifiers = [ + "Intended Audience :: Science/Research", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: C", + "Programming Language :: Python", + "Topic :: Software Development", + "Topic :: Scientific/Engineering", + "Development Status :: 5 - Production/Stable", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX", + "Operating System :: Unix", + "Operating System :: MacOS", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] +dependencies = ["numpy>=2", "scikit-learn>=1.5", "scipy"] +description = "Points de détails liés au machine learning" +keywords = ["cython", "scikit-learn", "machine-learning"] +license = {file = "LICENSE.txt"} +name = "mlstatpy" +readme = "README.rst" +requires-python = ">=3.10" +version = "0.5.0" + +[project.urls] +homepage = "https://sdpython.github.io/doc/mlstatpy/dev/" +documentation = "https://sdpython.github.io/doc/mlstatpy/dev/" +repository = "https://github.com/sdpython/mlstatpy/" +changelog = "https://sdpython.github.io/doc/mlstatpy/dev/CHANGELOGS.html" + [tool.rstcheck] report_level = "INFO" ignore_directives = [ @@ -81,8 +117,8 @@ select = [ "B905", "C401", "C408", "C413", "RUF012", "RUF100", "RUF010", - "SIM108", "SIM910", "SIM110", "SIM102", "SIM114", "SIM103", - "UP015", "UP027", "UP031", "UP034", "UP032", "UP006", "UP035", "UP007", "UP030", "UP038" + "SIM905", "SIM108", "SIM910", "SIM110", "SIM102", "SIM114", "SIM103", + "UP015", "UP027", "UP031", "UP034", "UP032", "RUF051", "UP006", "UP035", "UP045", "UP007", "UP030", "UP038" ] "_unittests/**" = ["SIM113", "RUF005", "E402"] "**/plot*.py" = ["B018"] diff --git a/requirements.txt b/requirements.txt index e9368453..231d9584 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -mlinsights>=0.2 -onnxruntime>=1.12 -skl2onnx +mlinsights>=0.4 +onnxruntime>=1.23 +skl2onnx>=1.14 diff --git a/setup.py b/setup.py index 57ca3446..bed3e6a1 100644 --- a/setup.py +++ b/setup.py @@ -58,8 +58,9 @@ "Development Status :: 5 - Production/Stable", "Operating System :: OS Independent", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ], ) From 9f6dcce7aa1123c5dbea8495c0e61763aa6f4242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 09:38:06 +0100 Subject: [PATCH 2/8] fix --- _doc/index.rst | 2 +- requirements-dev.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/_doc/index.rst b/_doc/index.rst index 877d55b5..86cdd522 100644 --- a/_doc/index.rst +++ b/_doc/index.rst @@ -10,7 +10,7 @@ Les maths d'abord, la programmation ensuite Le livre `The Elements of Statistical Learning `_ est considéré comme la bible en matière de machine learning. Ce site aborde des sujets connexes. Le site est aussi disponible (format brut de fonderie) sur -`GitHub/mlstatpy `_ |gitlogo|. +`github/mlstatpy `_ |gitlogo|. .. toctree:: :maxdepth: 1 diff --git a/requirements-dev.txt b/requirements-dev.txt index cb400493..503a9602 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -24,6 +24,7 @@ mlinsights nbconvert nbsphinx notebook +onnxscript onnx-array-api onnx-extended onnxruntime>=1.12 From 2e6b38ba59443bb2d1a311c5ae3a95560a8b8887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 09:41:08 +0100 Subject: [PATCH 3/8] fix doc --- .github/workflows/documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index db344d67..0df27e1c 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/setup-python@v4 with: - python-version: '3.11' + python-version: '3.12' - uses: tlylt/install-graphviz@v1 From c13b08664473bf3ef6c8e786238c6ce884b3d130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 10:40:17 +0100 Subject: [PATCH 4/8] fix notebooks --- MANIFEST.in | 1 - _doc/notebooks/dsgarden/correlation_non_lineaire.ipynb | 2 +- _doc/notebooks/dsgarden/discret_gradient.ipynb | 2 +- _doc/notebooks/dsgarden/quantization_f8.ipynb | 2 +- _doc/notebooks/dsgarden/regression_lineaire.ipynb | 2 +- _doc/notebooks/dsgarden/split_train_test.ipynb | 2 +- _doc/notebooks/image/segment_detection.ipynb | 2 +- _doc/notebooks/metric/pvalues_examples.ipynb | 2 +- _doc/notebooks/ml/logreg_voronoi.ipynb | 2 +- _doc/notebooks/ml/neural_tree.ipynb | 2 +- _doc/notebooks/ml/neural_tree_cost.ipynb | 6 +++--- _doc/notebooks/ml/neural_tree_onnx.ipynb | 6 +++--- _doc/notebooks/ml/piecewise_linear_regression.ipynb | 2 +- _doc/notebooks/ml/regression_no_inversion.ipynb | 4 ++-- _doc/notebooks/ml/survival.ipynb | 2 +- _doc/notebooks/nlp/completion_profiling.ipynb | 2 +- mlstatpy/ext_test_case.py | 2 +- requirements-dev.txt | 7 +++---- 18 files changed, 24 insertions(+), 26 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index fec251fa..0c421b23 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,3 @@ -recursive-include onnx_extended *.c *.cpp *.h *.pyx *.pxd *.pxi *.py include pyproject.toml include MANIFEST.in include setup.cfg diff --git a/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb b/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb index 3f5c9956..009ddf49 100644 --- a/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb +++ b/_doc/notebooks/dsgarden/correlation_non_lineaire.ipynb @@ -3040,4 +3040,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/dsgarden/discret_gradient.ipynb b/_doc/notebooks/dsgarden/discret_gradient.ipynb index 74e23a7b..2ed9beb8 100644 --- a/_doc/notebooks/dsgarden/discret_gradient.ipynb +++ b/_doc/notebooks/dsgarden/discret_gradient.ipynb @@ -3910,4 +3910,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/dsgarden/quantization_f8.ipynb b/_doc/notebooks/dsgarden/quantization_f8.ipynb index 232923ce..f4dd0541 100644 --- a/_doc/notebooks/dsgarden/quantization_f8.ipynb +++ b/_doc/notebooks/dsgarden/quantization_f8.ipynb @@ -833,4 +833,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/_doc/notebooks/dsgarden/regression_lineaire.ipynb b/_doc/notebooks/dsgarden/regression_lineaire.ipynb index bf1d6240..410415b5 100644 --- a/_doc/notebooks/dsgarden/regression_lineaire.ipynb +++ b/_doc/notebooks/dsgarden/regression_lineaire.ipynb @@ -2385,4 +2385,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/dsgarden/split_train_test.ipynb b/_doc/notebooks/dsgarden/split_train_test.ipynb index 9ad56d39..5e286259 100644 --- a/_doc/notebooks/dsgarden/split_train_test.ipynb +++ b/_doc/notebooks/dsgarden/split_train_test.ipynb @@ -1348,4 +1348,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/image/segment_detection.ipynb b/_doc/notebooks/image/segment_detection.ipynb index 751d23f3..18c26dd6 100644 --- a/_doc/notebooks/image/segment_detection.ipynb +++ b/_doc/notebooks/image/segment_detection.ipynb @@ -470,4 +470,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/metric/pvalues_examples.ipynb b/_doc/notebooks/metric/pvalues_examples.ipynb index 48fd8cff..a25e3476 100644 --- a/_doc/notebooks/metric/pvalues_examples.ipynb +++ b/_doc/notebooks/metric/pvalues_examples.ipynb @@ -1262,4 +1262,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/ml/logreg_voronoi.ipynb b/_doc/notebooks/ml/logreg_voronoi.ipynb index 37ee1351..1714a946 100644 --- a/_doc/notebooks/ml/logreg_voronoi.ipynb +++ b/_doc/notebooks/ml/logreg_voronoi.ipynb @@ -1963,4 +1963,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/ml/neural_tree.ipynb b/_doc/notebooks/ml/neural_tree.ipynb index 7363b2b2..9457d7e1 100644 --- a/_doc/notebooks/ml/neural_tree.ipynb +++ b/_doc/notebooks/ml/neural_tree.ipynb @@ -1826,4 +1826,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/_doc/notebooks/ml/neural_tree_cost.ipynb b/_doc/notebooks/ml/neural_tree_cost.ipynb index c009d8a1..2411696f 100644 --- a/_doc/notebooks/ml/neural_tree_cost.ipynb +++ b/_doc/notebooks/ml/neural_tree_cost.ipynb @@ -351,7 +351,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "ecef383a", "metadata": {}, "outputs": [ @@ -773,7 +773,7 @@ ], "source": [ "from tqdm import tqdm\n", - "from onnx_array_api.ext_test_case import measure_time\n", + "from mlstatpy.ext_test_case import measure_time\n", "\n", "data = []\n", "for d in tqdm(range(2, 10)):\n", @@ -870,4 +870,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/_doc/notebooks/ml/neural_tree_onnx.ipynb b/_doc/notebooks/ml/neural_tree_onnx.ipynb index c89d1e80..1b8268b2 100644 --- a/_doc/notebooks/ml/neural_tree_onnx.ipynb +++ b/_doc/notebooks/ml/neural_tree_onnx.ipynb @@ -853,13 +853,13 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "id": "11bccd22", "metadata": {}, "outputs": [], "source": [ "from onnxruntime import InferenceSession, SessionOptions\n", - "from onnx_extended.tools.js_profile import js_profile_to_dataframe\n", + "from onnx_diagnostic.helpers.rt_helper import js_profile_to_dataframe\n", "\n", "sess_options = SessionOptions()\n", "sess_options.enable_profiling = True\n", @@ -2731,4 +2731,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/_doc/notebooks/ml/piecewise_linear_regression.ipynb b/_doc/notebooks/ml/piecewise_linear_regression.ipynb index dd30e746..90f81aaf 100644 --- a/_doc/notebooks/ml/piecewise_linear_regression.ipynb +++ b/_doc/notebooks/ml/piecewise_linear_regression.ipynb @@ -312,4 +312,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/_doc/notebooks/ml/regression_no_inversion.ipynb b/_doc/notebooks/ml/regression_no_inversion.ipynb index d060a242..161883d1 100644 --- a/_doc/notebooks/ml/regression_no_inversion.ipynb +++ b/_doc/notebooks/ml/regression_no_inversion.ipynb @@ -202,11 +202,11 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "from onnx_array_api.ext_test_case import measure_time" + "from mlstatpy.ext_test_case import measure_time" ] }, { diff --git a/_doc/notebooks/ml/survival.ipynb b/_doc/notebooks/ml/survival.ipynb index 0684afbd..92723968 100644 --- a/_doc/notebooks/ml/survival.ipynb +++ b/_doc/notebooks/ml/survival.ipynb @@ -1231,4 +1231,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/_doc/notebooks/nlp/completion_profiling.ipynb b/_doc/notebooks/nlp/completion_profiling.ipynb index 8bd09905..e0eb912c 100644 --- a/_doc/notebooks/nlp/completion_profiling.ipynb +++ b/_doc/notebooks/nlp/completion_profiling.ipynb @@ -645,4 +645,4 @@ }, "nbformat": 4, "nbformat_minor": 1 -} +} \ No newline at end of file diff --git a/mlstatpy/ext_test_case.py b/mlstatpy/ext_test_case.py index 2f093bdc..535fcc13 100644 --- a/mlstatpy/ext_test_case.py +++ b/mlstatpy/ext_test_case.py @@ -234,7 +234,7 @@ def measure_time( .. runpython:: :showcode: - from onnx_extended.ext_test_case import measure_time + from mlstatpy.ext_test_case import measure_time from math import cos res = measure_time(lambda: cos(0.5)) diff --git a/requirements-dev.txt b/requirements-dev.txt index 503a9602..8065e7f2 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -26,8 +26,7 @@ nbsphinx notebook onnxscript onnx-array-api -onnx-extended -onnxruntime>=1.12 +onnxruntime>=1.23 pandas pillow psutil @@ -38,13 +37,13 @@ pytest ruff seaborn snakeviz -scikit-learn>=1.1 +scikit-learn>=1.5 skl2onnx sphinx sphinx-gallery sphinx-issues sphinxcontrib-blockdiag -git+https://github.com/sdpython/sphinx-runpython.git +sphinx-runpython stack_data statsmodels tqdm From 83307394b0c02a90744ea60bb8d10ddb22cfc296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 10:54:39 +0100 Subject: [PATCH 5/8] vers --- requirements-dev.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements-dev.txt b/requirements-dev.txt index 8065e7f2..905dd9f9 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -26,6 +26,7 @@ nbsphinx notebook onnxscript onnx-array-api +onnx-diagnostic onnxruntime>=1.23 pandas pillow From 4aa3fef730d8bddeb4c99db5443669c7c379f692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 11:14:14 +0100 Subject: [PATCH 6/8] doc --- _doc/conf.py | 1 - requirements-dev.txt | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/_doc/conf.py b/_doc/conf.py index 1123958d..2ea8b9ec 100644 --- a/_doc/conf.py +++ b/_doc/conf.py @@ -24,7 +24,6 @@ "sphinx_runpython.epkg", "sphinx_runpython.gdot", "sphinx_runpython.runpython", - "sphinxcontrib.blockdiag", "matplotlib.sphinxext.plot_directive", ] diff --git a/requirements-dev.txt b/requirements-dev.txt index 905dd9f9..e29c232a 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,6 +1,5 @@ astroid black -blockdiag coverage Cython cytoolz @@ -43,12 +42,12 @@ skl2onnx sphinx sphinx-gallery sphinx-issues -sphinxcontrib-blockdiag sphinx-runpython stack_data statsmodels tqdm traitlets +transformers vprof wheel xgboost From 57bdc97d52c8db37f3c5fc86026a7b99ab566062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 12:20:46 +0100 Subject: [PATCH 7/8] fix notebook --- _doc/notebooks/ml/neural_tree_onnx.ipynb | 2407 +++++++++++++++++----- 1 file changed, 1874 insertions(+), 533 deletions(-) diff --git a/_doc/notebooks/ml/neural_tree_onnx.ipynb b/_doc/notebooks/ml/neural_tree_onnx.ipynb index 1b8268b2..1afcce43 100644 --- a/_doc/notebooks/ml/neural_tree_onnx.ipynb +++ b/_doc/notebooks/ml/neural_tree_onnx.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 1, "id": "2f698cc0", "metadata": {}, "outputs": [], @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 2, "id": "a8feffa5", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 3, "id": "3c854905", "metadata": {}, "outputs": [], @@ -77,17 +77,17 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 4, "id": "bfc49123", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(0.618779473874829, 0.38661000086182784)" + "(0.6168207374163092, 0.35236821090506987)" ] }, - "execution_count": 51, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -102,17 +102,17 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 5, "id": "a38b0426", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.38661000086182784" + "0.35236821090506987" ] }, - "execution_count": 52, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -141,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 6, "id": "f6849a2d", "metadata": {}, "outputs": [], @@ -153,17 +153,17 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 7, "id": "3daf9db1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "np.float64(1.4748302929273112)" + "np.float64(1.7091389654766018)" ] }, - "execution_count": 54, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -182,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 8, "id": "7ce247da", "metadata": { "scrolled": false @@ -194,8 +194,9 @@ "text": [ "opset: domain='ai.onnx.ml' version=1\n", "opset: domain='' version=21\n", + "opset: domain='' version=21\n", "input: name='X' type=dtype('float32') shape=['', 10]\n", - "TreeEnsembleRegressor(X, n_targets=1, nodes_falsenodeids=255:[128,65,34...254,0,0], nodes_featureids=255:[8,4,5...8,0,0], nodes_hitrates=255:[1.0,1.0...1.0,1.0], nodes_missing_value_tracks_true=255:[0,0,0...0,0,0], nodes_modes=255:[b'BRANCH_LEQ',b'BRANCH_LEQ'...b'LEAF',b'LEAF'], nodes_nodeids=255:[0,1,2...252,253,254], nodes_treeids=255:[0,0,0...0,0,0], nodes_truenodeids=255:[1,2,3...253,0,0], nodes_values=255:[-0.002677354495972395,-0.16326862573623657...0.0,0.0], post_transform=b'NONE', target_ids=128:[0,0,0...0,0,0], target_nodeids=128:[7,8,10...251,253,254], target_treeids=128:[0,0,0...0,0,0], target_weights=128:[-0.7625784277915955,-0.5277675986289978...0.5070647597312927,0.7122518420219421]) -> variable\n", + "TreeEnsembleRegressor(X, n_targets=1, nodes_falsenodeids=255:[128,65,34...254,0,0], nodes_featureids=255:[3,4,0...4,0,0], nodes_hitrates=255:[1.0,1.0...1.0,1.0], nodes_missing_value_tracks_true=255:[0,0,0...0,0,0], nodes_modes=255:[b'BRANCH_LEQ',b'BRANCH_LEQ'...b'LEAF',b'LEAF'], nodes_nodeids=255:[0,1,2...252,253,254], nodes_treeids=255:[0,0,0...0,0,0], nodes_truenodeids=255:[1,2,3...253,0,0], nodes_values=255:[0.12306099385023117,-0.19721701741218567...0.0,0.0], post_transform=b'NONE', target_ids=128:[0,0,0...0,0,0], target_nodeids=128:[7,8,10...251,253,254], target_treeids=128:[0,0,0...0,0,0], target_weights=128:[-0.9612963795661926,-0.5883080959320068...0.49337825179100037,0.7387731075286865]) -> variable\n", "output: name='variable' type=dtype('float32') shape=['', 1]\n" ] } @@ -226,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 9, "id": "7729c242", "metadata": {}, "outputs": [ @@ -234,14 +235,7 @@ "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/18 [00:00\n", " 0\n", " 0.3\n", - " 0.608627\n", - " 0.184665\n", + " 0.890666\n", + " 0.212437\n", " \n", " \n", " 1\n", " 0.4\n", - " 0.512055\n", - " 0.134114\n", + " 0.586997\n", + " 0.141997\n", " \n", " \n", " 2\n", " 0.5\n", - " 0.589569\n", - " 0.127825\n", + " 0.520952\n", + " 0.129502\n", " \n", " \n", " 3\n", " 0.7\n", - " 0.656907\n", - " 0.129821\n", + " 0.588261\n", + " 0.127598\n", " \n", " \n", " 4\n", " 0.9\n", - " 0.678652\n", - " 0.126351\n", + " 0.579515\n", + " 0.123064\n", " \n", " \n", " 5\n", " 1.0\n", - " 0.682859\n", - " 0.122856\n", + " 0.599704\n", + " 0.119385\n", " \n", " \n", " 6\n", " 5.0\n", - " 0.642153\n", - " 0.017346\n", + " 0.486386\n", + " 0.021135\n", " \n", " \n", " 7\n", " 10.0\n", - " 0.285482\n", - " 0.004404\n", + " 0.485185\n", + " 0.005929\n", " \n", " \n", " 8\n", " 15.0\n", - " 0.228076\n", - " 0.001954\n", + " 0.325395\n", + " 0.002471\n", " \n", " \n", " 9\n", " 20.0\n", - " 0.193608\n", - " 0.000996\n", + " 0.309316\n", + " 0.001763\n", " \n", " \n", " 10\n", " 25.0\n", - " 0.113368\n", - " 0.000424\n", + " 0.214692\n", + " 0.000968\n", " \n", " \n", " 11\n", " 30.0\n", - " 0.113368\n", - " 0.000324\n", + " 0.214629\n", + " 0.000846\n", " \n", " \n", " 12\n", " 35.0\n", - " 0.113368\n", - " 0.000278\n", + " 0.163406\n", + " 0.000659\n", " \n", " \n", " 13\n", " 40.0\n", - " 0.113367\n", - " 0.000252\n", + " 0.069112\n", + " 0.000268\n", " \n", " \n", " 14\n", " 45.0\n", - " 0.113361\n", - " 0.000238\n", + " 0.064403\n", + " 0.000214\n", " \n", " \n", " 15\n", " 50.0\n", - " 0.113318\n", - " 0.000231\n", + " 0.059307\n", + " 0.000172\n", " \n", " \n", " 16\n", " 55.0\n", - " 0.113074\n", - " 0.000228\n", + " 0.053915\n", + " 0.000140\n", " \n", " \n", " 17\n", " 60.0\n", - " 0.111955\n", - " 0.000224\n", + " 0.048336\n", + " 0.000114\n", " \n", " \n", "\n", @@ -412,27 +406,27 @@ ], "text/plain": [ " k max mean\n", - "0 0.3 0.608627 0.184665\n", - "1 0.4 0.512055 0.134114\n", - "2 0.5 0.589569 0.127825\n", - "3 0.7 0.656907 0.129821\n", - "4 0.9 0.678652 0.126351\n", - "5 1.0 0.682859 0.122856\n", - "6 5.0 0.642153 0.017346\n", - "7 10.0 0.285482 0.004404\n", - "8 15.0 0.228076 0.001954\n", - "9 20.0 0.193608 0.000996\n", - "10 25.0 0.113368 0.000424\n", - "11 30.0 0.113368 0.000324\n", - "12 35.0 0.113368 0.000278\n", - "13 40.0 0.113367 0.000252\n", - "14 45.0 0.113361 0.000238\n", - "15 50.0 0.113318 0.000231\n", - "16 55.0 0.113074 0.000228\n", - "17 60.0 0.111955 0.000224" + "0 0.3 0.890666 0.212437\n", + "1 0.4 0.586997 0.141997\n", + "2 0.5 0.520952 0.129502\n", + "3 0.7 0.588261 0.127598\n", + "4 0.9 0.579515 0.123064\n", + "5 1.0 0.599704 0.119385\n", + "6 5.0 0.486386 0.021135\n", + "7 10.0 0.485185 0.005929\n", + "8 15.0 0.325395 0.002471\n", + "9 20.0 0.309316 0.001763\n", + "10 25.0 0.214692 0.000968\n", + "11 30.0 0.214629 0.000846\n", + "12 35.0 0.163406 0.000659\n", + "13 40.0 0.069112 0.000268\n", + "14 45.0 0.064403 0.000214\n", + "15 50.0 0.059307 0.000172\n", + "16 55.0 0.053915 0.000140\n", + "17 60.0 0.048336 0.000114" ] }, - "execution_count": 57, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -444,13 +438,13 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 11, "id": "0fcb9789", "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -473,17 +467,17 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 12, "id": "2f3eb6d0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(np.float64(0.19684418355179628), np.float64(0.0001876957464482374))" + "(np.float64(0.14867156347163313), np.float64(0.00014171388788628532))" ] }, - "execution_count": 59, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -514,7 +508,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 13, "id": "2439e4fa", "metadata": {}, "outputs": [], @@ -527,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 14, "id": "eae47e6a", "metadata": {}, "outputs": [ @@ -537,13 +531,13 @@ "text": [ "opset: domain='' version=21\n", "input: name='X' type=dtype('float32') shape=['', 10]\n", - "init: name='Ma_MatMulcst' type=dtype('float32') shape=(10, 127)\n", - "init: name='Ad_Addcst' type=dtype('float32') shape=(127,)\n", - "init: name='Mu_Mulcst' type=dtype('float32') shape=(1,) -- array([4.], dtype=float32)\n", - "init: name='Ma_MatMulcst1' type=dtype('float32') shape=(127, 128)\n", - "init: name='Ad_Addcst1' type=dtype('float32') shape=(128,)\n", - "init: name='Ma_MatMulcst2' type=dtype('float32') shape=(128, 1)\n", - "init: name='Ad_Addcst2' type=dtype('float32') shape=(1,) -- array([0.], dtype=float32)\n", + "init: name='Ma_MatMulcst' type=float32 shape=(10, 127)\n", + "init: name='Ad_Addcst' type=float32 shape=(127,)\n", + "init: name='Mu_Mulcst' type=float32 shape=(1,) -- array([4.], dtype=float32)\n", + "init: name='Ma_MatMulcst1' type=float32 shape=(127, 128)\n", + "init: name='Ad_Addcst1' type=float32 shape=(128,)\n", + "init: name='Ma_MatMulcst2' type=float32 shape=(128, 1)\n", + "init: name='Ad_Addcst2' type=float32 shape=(1,) -- array([0.], dtype=float32)\n", "MatMul(X, Ma_MatMulcst) -> Ma_Y02\n", " Add(Ma_Y02, Ad_Addcst) -> Ad_C02\n", " Mul(Ad_C02, Mu_Mulcst) -> Mu_C01\n", @@ -565,17 +559,17 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 15, "id": "1d4e272f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "np.float64(1.4748302929273112)" + "np.float64(1.7091389654766018)" ] }, - "execution_count": 62, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -608,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 16, "id": "a6febd37", "metadata": {}, "outputs": [], @@ -626,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 17, "id": "07caad53", "metadata": {}, "outputs": [ @@ -634,7 +628,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "485 μs ± 15.9 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "312 μs ± 9.06 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -652,7 +646,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 18, "id": "984413fa", "metadata": {}, "outputs": [ @@ -660,7 +654,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "39.8 μs ± 4.37 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" + "35 μs ± 595 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" ] } ], @@ -678,7 +672,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 19, "id": "e3268dcd", "metadata": {}, "outputs": [ @@ -686,7 +680,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.23 ms ± 57.6 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "1.18 ms ± 7.98 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -704,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 20, "id": "d9911fff", "metadata": {}, "outputs": [ @@ -733,7 +727,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 21, "id": "e97479fe", "metadata": {}, "outputs": [ @@ -760,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 22, "id": "125547d9", "metadata": {}, "outputs": [ @@ -768,7 +762,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "4.47 μs ± 236 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" + "2.87 μs ± 177 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" ] } ], @@ -780,7 +774,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 23, "id": "ad7173e5", "metadata": {}, "outputs": [ @@ -788,7 +782,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "6.33 μs ± 289 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" + "3.53 μs ± 88.3 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" ] } ], @@ -807,7 +801,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 24, "id": "0c1839fd", "metadata": {}, "outputs": [ @@ -817,13 +811,13 @@ "text": [ "opset: domain='' version=21\n", "input: name='X' type=dtype('float32') shape=['', 10]\n", - "init: name='Ma_MatMulcst' type=dtype('float32') shape=(10, 127)\n", - "init: name='Ad_Addcst' type=dtype('float32') shape=(127,)\n", - "init: name='Mu_Mulcst' type=dtype('float32') shape=(1,) -- array([4.], dtype=float32)\n", - "init: name='Ma_MatMulcst1' type=dtype('float32') shape=(127, 128)\n", - "init: name='Ad_Addcst1' type=dtype('float32') shape=(128,)\n", - "init: name='Ma_MatMulcst2' type=dtype('float32') shape=(128, 1)\n", - "init: name='Ad_Addcst2' type=dtype('float32') shape=(1,) -- array([0.], dtype=float32)\n", + "init: name='Ma_MatMulcst' type=float32 shape=(10, 127)\n", + "init: name='Ad_Addcst' type=float32 shape=(127,)\n", + "init: name='Mu_Mulcst' type=float32 shape=(1,) -- array([4.], dtype=float32)\n", + "init: name='Ma_MatMulcst1' type=float32 shape=(127, 128)\n", + "init: name='Ad_Addcst1' type=float32 shape=(128,)\n", + "init: name='Ma_MatMulcst2' type=float32 shape=(128, 1)\n", + "init: name='Ad_Addcst2' type=float32 shape=(1,) -- array([0.], dtype=float32)\n", "MatMul(X, Ma_MatMulcst) -> Ma_Y02\n", " Add(Ma_Y02, Ad_Addcst) -> Ad_C02\n", " Mul(Ad_C02, Mu_Mulcst) -> Mu_C01\n", @@ -853,7 +847,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "11bccd22", "metadata": {}, "outputs": [], @@ -875,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 26, "id": "5485970b", "metadata": {}, "outputs": [ @@ -907,14 +901,14 @@ " ts\n", " ph\n", " name\n", - " args_op_name\n", - " op_name\n", " args_thread_scheduling_stats\n", " args_output_size\n", " args_parameter_size\n", " args_activation_size\n", " args_node_index\n", " args_provider\n", + " args_op_name\n", + " op_name\n", " event_name\n", " iteration\n", " it==0\n", @@ -924,9 +918,9 @@ " \n", " 0\n", " Session\n", - " 32438\n", - " 32438\n", - " 511\n", + " 50840\n", + " 50840\n", + " 458\n", " 9\n", " X\n", " model_loading_array\n", @@ -945,10 +939,10 @@ " \n", " 1\n", " Session\n", - " 32438\n", - " 32438\n", - " 1851\n", - " 2693\n", + " 50840\n", + " 50840\n", + " 1365\n", + " 529\n", " X\n", " session_initialization\n", " NaN\n", @@ -966,41 +960,41 @@ " \n", " 2\n", " Node\n", - " 32438\n", - " 32438\n", - " 0\n", - " 8036\n", + " 50840\n", + " 50840\n", + " 3437\n", + " 2343\n", " X\n", - " Ma_MatMul/MatMulAddFusion/_fence_before\n", + " Ma_MatMul/MatMulAddFusion_kernel_time\n", + " {'main_thread': {'thread_pool_name': 'session-...\n", + " 2540000\n", + " 508\n", + " 200000\n", + " 11\n", + " CPUExecutionProvider\n", " Gemm\n", - " Ma_MatMul/MatMulAddFusion/\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " fence_before\n", + " Ma_MatMul/MatMulAddFusion\n", + " kernel_time\n", " -1\n", " 1\n", " \n", " \n", " 3\n", " Node\n", - " 32438\n", - " 32438\n", - " 632\n", - " 8043\n", + " 50840\n", + " 50840\n", + " 776\n", + " 5808\n", " X\n", - " Ma_MatMul/MatMulAddFusion/_kernel_time\n", - " Gemm\n", - " Ma_MatMul/MatMulAddFusion/\n", + " Mu_Mul_kernel_time\n", " {'main_thread': {'thread_pool_name': 'session-...\n", " 2540000\n", - " 508\n", - " 200000\n", - " 11\n", + " 4\n", + " 2540000\n", + " 2\n", " CPUExecutionProvider\n", + " Mul\n", + " Mu_Mul\n", " kernel_time\n", " -1\n", " 1\n", @@ -1008,21 +1002,21 @@ " \n", " 4\n", " Node\n", - " 32438\n", - " 32438\n", - " 0\n", - " 8687\n", + " 50840\n", + " 50840\n", + " 130\n", + " 6604\n", " X\n", - " Ma_MatMul/MatMulAddFusion/_fence_after\n", - " Gemm\n", - " Ma_MatMul/MatMulAddFusion/\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " fence_after\n", + " Si_Sigmoid_kernel_time\n", + " {'main_thread': {'thread_pool_name': 'session-...\n", + " 2540000\n", + " 0\n", + " 2540000\n", + " 3\n", + " CPUExecutionProvider\n", + " Sigmoid\n", + " Si_Sigmoid\n", + " kernel_time\n", " -1\n", " 1\n", " \n", @@ -1048,75 +1042,75 @@ " ...\n", " \n", " \n", - " 986\n", + " 384\n", " Node\n", - " 32438\n", - " 32438\n", - " 0\n", - " 175317\n", + " 50840\n", + " 50840\n", + " 52\n", + " 134871\n", " X\n", - " Ma_MatMul2_fence_before\n", - " MatMul\n", - " Ma_MatMul2\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " fence_before\n", + " Mu_Mul1_kernel_time\n", + " {'main_thread': {'thread_pool_name': 'session-...\n", + " 2560000\n", + " 4\n", + " 2560000\n", + " 6\n", + " CPUExecutionProvider\n", + " Mul\n", + " Mu_Mul1\n", + " kernel_time\n", " 41\n", " 0\n", " \n", " \n", - " 987\n", + " 385\n", " Node\n", - " 32438\n", - " 32438\n", - " 77\n", - " 175318\n", + " 50840\n", + " 50840\n", + " 72\n", + " 134943\n", " X\n", - " Ma_MatMul2_kernel_time\n", - " MatMul\n", - " Ma_MatMul2\n", + " Si_Sigmoid1_kernel_time\n", " {'main_thread': {'thread_pool_name': 'session-...\n", - " 20000\n", + " 2560000\n", " 0\n", " 2560000\n", - " 8\n", + " 7\n", " CPUExecutionProvider\n", + " Sigmoid\n", + " Si_Sigmoid1\n", " kernel_time\n", " 41\n", " 0\n", " \n", " \n", - " 988\n", + " 386\n", " Node\n", - " 32438\n", - " 32438\n", - " 0\n", - " 175401\n", + " 50840\n", + " 50840\n", + " 79\n", + " 135022\n", " X\n", - " Ma_MatMul2_fence_after\n", + " Ma_MatMul2_kernel_time\n", + " {'main_thread': {'thread_pool_name': 'session-...\n", + " 20000\n", + " 0\n", + " 2560000\n", + " 8\n", + " CPUExecutionProvider\n", " MatMul\n", " Ma_MatMul2\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " fence_after\n", + " kernel_time\n", " 41\n", " 0\n", " \n", " \n", - " 989\n", + " 387\n", " Session\n", - " 32438\n", - " 32438\n", - " 1448\n", - " 173955\n", + " 50840\n", + " 50840\n", + " 1508\n", + " 133600\n", " X\n", " SequentialExecutor::Execute\n", " NaN\n", @@ -1132,12 +1126,12 @@ " 0\n", " \n", " \n", - " 990\n", + " 388\n", " Session\n", - " 32438\n", - " 32438\n", - " 1458\n", - " 173948\n", + " 50840\n", + " 50840\n", + " 1523\n", + " 133591\n", " X\n", " model_run\n", " NaN\n", @@ -1154,92 +1148,92 @@ " \n", " \n", "\n", - "

991 rows × 18 columns

\n", + "

389 rows × 18 columns

\n", "" ], "text/plain": [ " cat pid tid dur ts ph \\\n", - "0 Session 32438 32438 511 9 X \n", - "1 Session 32438 32438 1851 2693 X \n", - "2 Node 32438 32438 0 8036 X \n", - "3 Node 32438 32438 632 8043 X \n", - "4 Node 32438 32438 0 8687 X \n", + "0 Session 50840 50840 458 9 X \n", + "1 Session 50840 50840 1365 529 X \n", + "2 Node 50840 50840 3437 2343 X \n", + "3 Node 50840 50840 776 5808 X \n", + "4 Node 50840 50840 130 6604 X \n", ".. ... ... ... ... ... .. \n", - "986 Node 32438 32438 0 175317 X \n", - "987 Node 32438 32438 77 175318 X \n", - "988 Node 32438 32438 0 175401 X \n", - "989 Session 32438 32438 1448 173955 X \n", - "990 Session 32438 32438 1458 173948 X \n", - "\n", - " name args_op_name \\\n", - "0 model_loading_array NaN \n", - "1 session_initialization NaN \n", - "2 Ma_MatMul/MatMulAddFusion/_fence_before Gemm \n", - "3 Ma_MatMul/MatMulAddFusion/_kernel_time Gemm \n", - "4 Ma_MatMul/MatMulAddFusion/_fence_after Gemm \n", - ".. ... ... \n", - "986 Ma_MatMul2_fence_before MatMul \n", - "987 Ma_MatMul2_kernel_time MatMul \n", - "988 Ma_MatMul2_fence_after MatMul \n", - "989 SequentialExecutor::Execute NaN \n", - "990 model_run NaN \n", - "\n", - " op_name \\\n", - "0 NaN \n", - "1 NaN \n", - "2 Ma_MatMul/MatMulAddFusion/ \n", - "3 Ma_MatMul/MatMulAddFusion/ \n", - "4 Ma_MatMul/MatMulAddFusion/ \n", - ".. ... \n", - "986 Ma_MatMul2 \n", - "987 Ma_MatMul2 \n", - "988 Ma_MatMul2 \n", - "989 NaN \n", - "990 NaN \n", + "384 Node 50840 50840 52 134871 X \n", + "385 Node 50840 50840 72 134943 X \n", + "386 Node 50840 50840 79 135022 X \n", + "387 Session 50840 50840 1508 133600 X \n", + "388 Session 50840 50840 1523 133591 X \n", + "\n", + " name \\\n", + "0 model_loading_array \n", + "1 session_initialization \n", + "2 Ma_MatMul/MatMulAddFusion_kernel_time \n", + "3 Mu_Mul_kernel_time \n", + "4 Si_Sigmoid_kernel_time \n", + ".. ... \n", + "384 Mu_Mul1_kernel_time \n", + "385 Si_Sigmoid1_kernel_time \n", + "386 Ma_MatMul2_kernel_time \n", + "387 SequentialExecutor::Execute \n", + "388 model_run \n", "\n", " args_thread_scheduling_stats args_output_size \\\n", "0 NaN NaN \n", "1 NaN NaN \n", - "2 NaN NaN \n", + "2 {'main_thread': {'thread_pool_name': 'session-... 2540000 \n", "3 {'main_thread': {'thread_pool_name': 'session-... 2540000 \n", - "4 NaN NaN \n", + "4 {'main_thread': {'thread_pool_name': 'session-... 2540000 \n", ".. ... ... \n", - "986 NaN NaN \n", - "987 {'main_thread': {'thread_pool_name': 'session-... 20000 \n", - "988 NaN NaN \n", - "989 NaN NaN \n", - "990 NaN NaN \n", + "384 {'main_thread': {'thread_pool_name': 'session-... 2560000 \n", + "385 {'main_thread': {'thread_pool_name': 'session-... 2560000 \n", + "386 {'main_thread': {'thread_pool_name': 'session-... 20000 \n", + "387 NaN NaN \n", + "388 NaN NaN \n", "\n", " args_parameter_size args_activation_size args_node_index \\\n", "0 NaN NaN NaN \n", "1 NaN NaN NaN \n", - "2 NaN NaN NaN \n", - "3 508 200000 11 \n", - "4 NaN NaN NaN \n", + "2 508 200000 11 \n", + "3 4 2540000 2 \n", + "4 0 2540000 3 \n", ".. ... ... ... \n", - "986 NaN NaN NaN \n", - "987 0 2560000 8 \n", - "988 NaN NaN NaN \n", - "989 NaN NaN NaN \n", - "990 NaN NaN NaN \n", - "\n", - " args_provider event_name iteration it==0 \n", - "0 NaN model_loading_array -1 1 \n", - "1 NaN session_initialization -1 1 \n", - "2 NaN fence_before -1 1 \n", - "3 CPUExecutionProvider kernel_time -1 1 \n", - "4 NaN fence_after -1 1 \n", - ".. ... ... ... ... \n", - "986 NaN fence_before 41 0 \n", - "987 CPUExecutionProvider kernel_time 41 0 \n", - "988 NaN fence_after 41 0 \n", - "989 NaN SequentialExecutor::Execute 42 0 \n", - "990 NaN model_run 42 0 \n", - "\n", - "[991 rows x 18 columns]" + "384 4 2560000 6 \n", + "385 0 2560000 7 \n", + "386 0 2560000 8 \n", + "387 NaN NaN NaN \n", + "388 NaN NaN NaN \n", + "\n", + " args_provider args_op_name op_name \\\n", + "0 NaN NaN NaN \n", + "1 NaN NaN NaN \n", + "2 CPUExecutionProvider Gemm Ma_MatMul/MatMulAddFusion \n", + "3 CPUExecutionProvider Mul Mu_Mul \n", + "4 CPUExecutionProvider Sigmoid Si_Sigmoid \n", + ".. ... ... ... \n", + "384 CPUExecutionProvider Mul Mu_Mul1 \n", + "385 CPUExecutionProvider Sigmoid Si_Sigmoid1 \n", + "386 CPUExecutionProvider MatMul Ma_MatMul2 \n", + "387 NaN NaN NaN \n", + "388 NaN NaN NaN \n", + "\n", + " event_name iteration it==0 \n", + "0 model_loading_array -1 1 \n", + "1 session_initialization -1 1 \n", + "2 kernel_time -1 1 \n", + "3 kernel_time -1 1 \n", + "4 kernel_time -1 1 \n", + ".. ... ... ... \n", + "384 kernel_time 41 0 \n", + "385 kernel_time 41 0 \n", + "386 kernel_time 41 0 \n", + "387 SequentialExecutor::Execute 42 0 \n", + "388 model_run 42 0 \n", + "\n", + "[389 rows x 18 columns]" ] }, - "execution_count": 74, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1251,7 +1245,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 27, "id": "19bb5d0f", "metadata": {}, "outputs": [ @@ -1261,7 +1255,7 @@ "{'CPUExecutionProvider', nan}" ] }, - "execution_count": 75, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1272,7 +1266,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 28, "id": "e42d5644", "metadata": {}, "outputs": [ @@ -1308,54 +1302,56 @@ " \n", " \n", " \n", - " Sigmoid\n", - " Si_Sigmoid1\n", - " 5304\n", + " Mul\n", + " Mu_Mul1\n", + " 6486\n", " \n", " \n", - " Si_Sigmoid\n", - " 5461\n", + " Sigmoid\n", + " Si_Sigmoid1\n", + " 7064\n", " \n", " \n", - " Mul\n", + " Mul\n", " Mu_Mul\n", - " 8087\n", + " 7401\n", " \n", " \n", - " Mu_Mul1\n", - " 9945\n", + " Sigmoid\n", + " Si_Sigmoid\n", + " 7594\n", " \n", " \n", " MatMul\n", " Ma_MatMul2\n", - " 9952\n", + " 8032\n", " \n", " \n", " Gemm\n", - " Ma_MatMul/MatMulAddFusion/\n", - " 16856\n", + " Ma_MatMul/MatMulAddFusion\n", + " 28069\n", " \n", " \n", - " Ma_MatMul1/MatMulAddFusion/\n", - " 103444\n", + " Ma_MatMul1/MatMulAddFusion\n", + " 55140\n", " \n", " \n", "\n", "" ], "text/plain": [ - " dur\n", - "args_op_name name \n", - "Sigmoid Si_Sigmoid1 5304\n", - " Si_Sigmoid 5461\n", - "Mul Mu_Mul 8087\n", - " Mu_Mul1 9945\n", - "MatMul Ma_MatMul2 9952\n", - "Gemm Ma_MatMul/MatMulAddFusion/ 16856\n", - " Ma_MatMul1/MatMulAddFusion/ 103444" + " dur\n", + "args_op_name name \n", + "Mul Mu_Mul1 6486\n", + "Sigmoid Si_Sigmoid1 7064\n", + "Mul Mu_Mul 7401\n", + "Sigmoid Si_Sigmoid 7594\n", + "MatMul Ma_MatMul2 8032\n", + "Gemm Ma_MatMul/MatMulAddFusion 28069\n", + " Ma_MatMul1/MatMulAddFusion 55140" ] }, - "execution_count": 76, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1374,7 +1370,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 29, "id": "34b33616", "metadata": {}, "outputs": [ @@ -1410,21 +1406,23 @@ " \n", " \n", " \n", - " Sigmoid\n", - " Si_Sigmoid1\n", + " Mul\n", + " Mu_Mul1\n", " 43\n", " \n", " \n", - " Si_Sigmoid\n", + " Sigmoid\n", + " Si_Sigmoid1\n", " 43\n", " \n", " \n", - " Mul\n", + " Mul\n", " Mu_Mul\n", " 43\n", " \n", " \n", - " Mu_Mul1\n", + " Sigmoid\n", + " Si_Sigmoid\n", " 43\n", " \n", " \n", @@ -1434,11 +1432,11 @@ " \n", " \n", " Gemm\n", - " Ma_MatMul/MatMulAddFusion/\n", + " Ma_MatMul/MatMulAddFusion\n", " 43\n", " \n", " \n", - " Ma_MatMul1/MatMulAddFusion/\n", + " Ma_MatMul1/MatMulAddFusion\n", " 43\n", " \n", " \n", @@ -1446,18 +1444,18 @@ "" ], "text/plain": [ - " dur\n", - "args_op_name name \n", - "Sigmoid Si_Sigmoid1 43\n", - " Si_Sigmoid 43\n", - "Mul Mu_Mul 43\n", - " Mu_Mul1 43\n", - "MatMul Ma_MatMul2 43\n", - "Gemm Ma_MatMul/MatMulAddFusion/ 43\n", - " Ma_MatMul1/MatMulAddFusion/ 43" + " dur\n", + "args_op_name name \n", + "Mul Mu_Mul1 43\n", + "Sigmoid Si_Sigmoid1 43\n", + "Mul Mu_Mul 43\n", + "Sigmoid Si_Sigmoid 43\n", + "MatMul Ma_MatMul2 43\n", + "Gemm Ma_MatMul/MatMulAddFusion 43\n", + " Ma_MatMul1/MatMulAddFusion 43" ] }, - "execution_count": 77, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1475,13 +1473,13 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 30, "id": "f34b2908", "metadata": {}, "outputs": [ { "data": { - "image/png": "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8Ntvv+HAgQNo164dOnbsiC+++ALNmjVTxe5gzJgx6N69e5Xra2lpwcrKSu6tJgDw/vvvY8iQIRg2bBg6dOiAjIyMCp/KVxWGhoYVnsgDpVeEMzMz0bZtW4waNQqhoaGwsbER1Vm+fDl+//132NnZwcvLS247+vr6sLS0rLAfPz8/fPLJJ/joo4/Qrl07PH78GKNHj66w/s6dO9G3b98KjxOgnGM5btw4uLq6wsfHB9bW1jJXkYHSWzysrKxkFrcuo62tjY0bN+LixYto1aoVlixZUukT4NavXw9DQ0O88cYbMtveeOMN6Ovr48cff0TTpk2xbds27NixA61bt8Y333yDhQsXiup37NgR3333HSIjI9G6dWscOHCgWj9sLSws8OOPP2LPnj3w9PTExo0bERERId2uqamJjIwMjB49Gi4uLhg6dCj69OmDuXPnym1v0KBBiIyMxLJly+Dh4YFvv/0WMTEx1fo7UtHJ/KZNmzBu3Lgqt0NEqsV8z3zPfF9xvu/WrRvzPfM9ERG95gTJi4taqJndu3djxowZSExMfCVufalMt27d0KNHD9EJENVcq1atEB4ejqFDh6o6FKpDZ8+eRc+ePfHgwQPROjl79+7FtGnTcO7cuUp/4L0oJyen9El0UzZDQ9egNkJ+JaQu7qfqEOg1xXxPL/O65fuyvJSdnf1ar9WmzHzPXE9ERMqgzN9MVc33Vf9lqyL9+vXD5cuXcfv27Vf68e7Z2dm4evUqdu/erepQ6pWnT5/i7bfflrtYNNVvRUVFWLVqlcwC17m5uYiJianWwB0RqR7zPVWG+f71xXxPRET0Csy8I8UZGRlVuG3v3r3w9fWtw2iI1BuvxpfizDuiVw/zff3EmXfKx1xPRETKwJl3pFSVPdWscePGdRcIERER1RrmeyIiIqL6jYN39ZiTk5OqQyAiIqJaxnxPREREVL9x8I6IqJzEuX68PYmIiKgeY64nIqJXzav9ODciIiIiIiIiIqJ6jIN3REREREREREREaoqDd0RERERERERERGqKg3dERERERERERERqioN3REREREREREREaoqDd0RERERERERERGqKg3dERERERERERERqSuHBux9++AFdunRBo0aNkJaWBgBYuXIldu7cqbTgiIiISHWY64mIiIiIVE+hwbs1a9Zg6tSp6Nu3L7KyslBcXAwAMDMzw8qV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duyYvP3226LRaGTr1q1KjTtnf/MdrkSYWVcOHjwoHh4esmTJEqmpqZGPPvpIvL295cMPP1Rq8vLyxM/PT/7xj3/IkSNH5Ic//KEYjUa5cuWKUjNlyhRJSEiQ4uJi2bt3r4waNUrS09OV7Y2NjRIcHCzTpk2TyspKKSgoEG9vb3nnnXeUmn379omHh4f87ne/k2PHjklubq54enpKRUVF34TRA5mZmTJ06FDZvHmz1NXVybp16yQwMFBefPFFpYa53bjjXFlZmZSVlQkAefPNN6WsrExOnTolIq6VUXd6Icdyp2unu7LHOUk9Y485HfVcTk6O7N69W+rq6uTIkSOSk5MjKpVKtm3bJiLMvK/0dC7eH3DxjogGvLfeekvCw8NFq9XKvffeKwcOHHB2Sw4DoMuv/Px8pebKlSvy7LPPir+/v3h7e8uPf/xjOXv2rNV+Tp48KVOnThW9Xi+BgYGycOFCuX79ulXNp59+KnfffbdotVoZOXKk1e/o4K7Zf3PCwMy6tmnTJomLixOdTifR0dHy7rvvWm23WCzy6quvSnBwsOh0Opk8ebJUV1db1Vy8eFHS09PFx8dHDAaDPPHEE2I2m61qDh8+LBMmTBCdTidDhw6VvLy8Tr2sWbNGvvvd74pWq5XY2FgpLCy0/wHbQXNzs8yfP1/Cw8PFy8tLRo4cKS+//LK0trYqNcztxrnS1bUsMzNTRFwro+70Qo7nTtdOd2SPc5J6xl5zOuqZJ598UoYPHy5arVaGDBkikydPVhbuRJh5X7FlLu7uVCIiffc6PyIiIiIiIiIiIuoufuYdERERERERERGRi+LiHRERERERERERkYvi4h0REREREREREZGL4uIdERERERERERGRi+LiHRERERERERERkYvi4h0REREREREREZGL4uIdERERERERERGRi+LiHRERERERERERkYvi4h0REREREREREZGL4uIdERERERERERGRi+LiHRERERERERERkYvi4h0REREREREREZGL+n85DIH9eprQ/QAAAABJRU5ErkJggg==", + "image/png": "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fHs4EdU+A6d2KHryD4pz0lU2I04ZSgpzUZSRBpN35qs6lNdOSX4OjNsNgE4j5T5kgV4NzPVERPS6UfnMOlKckVHFt7ns27cPfn5+dRgN0auDV9uJ6FVxe/U7FW6zfjcCenYt6zAaehFn1qkv5noiIuVrZKSJhT2sYN2oCQTt1+MJ3NWdWZeXl4fU1NRXf2YdKa6yp4o1bty47gIhIiKiWtFozGcVbtM0qnh9WCIiIiJly8gvQU5BMRrkZUPLwASoYI3Y+qSgoKBK9SQSCZ49e4ZHjx5BQ0MDOjo1u02Yg3WvsObNm6s6BCIiIqpF2ua2qg6BiIiICABQUCzBunOZ+K8PYKyXDaD+D9bp5OtXq76BgQGaNm1a42cycLCOiF5biQv8easRERFRPcZcT0SkfMXFxXj+/Lmqw1A7mpqa0NLSqvCp9NXBwToiIiIiIiIiIqoSTU1NaGpqqjqMeq1m8/KIiIiIiIiIiIhIaThYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCa0VB0AEZGqtJx/ABq6BqoOg+iVkLKsr6pDICKqNuZ6IiKqCVWdA3NmHRERERERERERkZrgYB0REREREREREZGa4GAdERERERERERGRmuBgHRERERERERERkZrgYB0REREREREREZGaUPvBuvT0dFhbWyMlJUXVoZAa6datG6ZOnarqMGpFbGwszMzMatxOXFwcBEFAZmZmrfdVFbXRV1JSEpo0aYLc3FyltktEdY/5nuRhvn855nsiIqL6R+0H6xYvXowBAwbA3t5eVL5jxw706NED5ubm0NfXh4uLC0JCQvDXX3+pJlAlSElJgSAI0NTUxL1790Tb0tLSoKWlBUEQlPZDJiIiAoIgoFevXjLbPvnkEwiCgG7dulWrTUEQsGvX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8PHxgZWVlcxVYqD0lg1LS0uZxajLaGtrY/Pmzbhy5QpatWqF5cuXV/qEto0bN8LQ0BBvvPGGzLY33ngD+vr6+P7779G0aVPs2LEDu3btQuvWrfHVV19hyZIlovodO3bEN998g8jISLRu3RoHDx6s1g/ZBg0a4Pvvv8fevXvh6emJzZs3IyIiQrpdU1MT6enpGDVqFFq0aIEhQ4agd+/eWLBggdz2Bg4ciMjISKxcuRIeHh74+uuvERMTU62/I0DpEyN79uypsr/XRFRzzPfM98z3G2FgYCB3G/N9KeZ7IiJ6nQiSFxelUDN79uzBzJkzkZiY+ErcylKZrl27onv37qITHqq5Vq1aYe7cuaIFmen18OzZMzg7O2PTpk0yi1dXJjs7u/RJcVO3QkNX/o8jIhJLWda3VttnvqeXqe/5viw3ZWVlcb21FyiS75nriYhIGZR5DlydXF/xpUk10bdvX1y7dg337t17pR/BnpWVhRs3bmDPnj2qDqVeefbsGd5++225iztT/Xf79m3MmTOnWgN1RKSemO+pMsz3rzfmeyIiet2o/cw6UpyRkVGF2/bt2wc/P786jIZIffBqO1H11fbMOlIc8339wJl1ysVcT0REysCZdaR0lT11rHHjxnUXCBEREdUa5nsiIiKi+oWDdfVY8+bNVR0CERER1TLmeyIiIqL6hYN1RPTaSlzgz1uNiIiI6jHmeiIiehW92o9bIyIiIiIiIiIiqkc4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmOFhHRERERERERESkJjhYR0REREREREREpCYUHqz77rvv4OvrC1tbW6SmpgIA1qxZg59//llpwREREZHqMNcTEREREdU9hQbr1q1bh2nTpqFPnz7IzMxEcXExAMDMzAxr1qxRZnxERESkAsz1RERERESqodBg3eeff45vvvkGH374ITQ1NaXlPj4+uHjxotKCIyIiItVgriciIiIiUg2FButu3boFLy8vmXJdXV3k5ubWOCgiIiJSLeZ6IiIiIiLVUGiwzsHBAQkJCTLl+/fvh5ubW01jIiIiIhVjriciIiIiUg0tRT40bdo0/O9//0NBQQEkEgnOnDmDzZs3Y+nSpfj222+VHSMRERHVMeZ6IiIiIiLVUGiwbuzYsdDX18fcuXORl5eHESNGwNbWFpGRkRg2bJiyYyQiIqI6xlxPRERERKQagkQikdSkgby8PDx9+hTW1tbKiomIqFZlZ2fD1NQUWVlZMDExUXU4RGqPuZ6o9jE3KRePJxERqZvq5CaFZtaVZ2BgAAMDg5o2Q0RERGqKuZ6IiIiIqO4oNFiXnp6OefPm4fDhw3j48CFKSkpE2588eaKU4IiIiEg1mOuJiIiIiFRDocG6kSNH4vr16wgNDYWNjQ0EQVB2XERERKRCzPVERERERKqh0GDdsWPHcPz4cbRu3VrZ8RAREZEaYK4nIiIiIlINDUU+5Orqivz8fGXHQkRERGqCuZ6IiIiISDUUGqxbu3YtPvzwQxw5cgTp6enIzs4WvYiIiOjVxlxPRERERKQaCt0Ga2ZmhuzsbPTo0UNULpFIIAgCiouLlRIcEVFtajn/ADR06/8TLlOW9VV1CPQKYq4novrgdcn1RERUO1T1W0qhwbrAwEBoa2tj06ZNXHSaiIioHmKuJyIiIiJSDYUG6xITE/HXX3/BxcVF2fEQERGRGmCuJyIiIiJSDYXWrPPx8cGdO3eUHQsRERGpCeZ6IiIiIiLVUGhm3eTJkzFlyhTMnDkTnp6e0NbWFm1v1aqVUoIjIiIi1WCuJyIiIiJSDYUG64YOHQoACAkJkZYJgsBFp4mIiOoJ5noiIiIiItVQ6DbYW7duybxu3rwp/S/Ri9LT02FtbY2UlBRVh1JjsbGxMDMzU3UY9VJcXBwEQUBmZmaVPzN79mxMnjy59oIiek0x11N1MddTVTDXExERvZxCg3XNmjWr9EX0osWLF2PAgAGwt7cHAKSkpEAQBGhqauLevXuiumlpadDS0oIgCNU64R89ejQGDhwoUy4IAgRBwKlTp0TlhYWFsLCwgCAIiIuLq+YeVc/o0aMhCAImTpwos+1///sfBEHA6NGjldafsvc5IiICbdq0kSm3t7eHIAjYsmWLzDYPDw8IgoDY2NhqRv+vuLg4DBgwAI0aNYKhoSHatGmDH374QVRnxowZ2LBhAwcPiJSMuZ6qi7meuV4RzPVERESyFBqsK5OUlIT9+/dj9+7dohdReXl5eYiKikJoaKjMtsaNG2Pjxo2isg0bNqBx48ZKjcHOzg4xMTGisp07d8LIyEip/bwshi1btiA/P19aVlBQgE2bNqFp06a10l9d7LO8fk6dOoX79+/D0NCwRm2fOHECrVq1wo4dO3DhwgWMGTMGo0aNwq+//iqtY2lpCX9/f6xbt65GfRGRfMz1VBXM9f/GwFxfPcz1REREshQarLt58yZat26Nli1bom/fvhg4cCAGDhyIQYMGYdCgQcqOkV5xe/fuha6uLjp27CizLTg4WObkLyYmBsHBwaKy4uJihIaGwsHBAfr6+nBxcUFkZKR0e0REBDZs2ICff/5ZeqW5/NXk4OBgmZPn6OhomX7k3ZqRkJBQ7Sv/8rRt2xZ2dnb46aefpGU//fQTmjZtCi8vL1Hd/fv3o0uXLjAzM4OFhQX69euHGzduVKu/qu4zAMyaNQstWrSAgYEBHB0d8dFHH+H58+cASm8FWrBgAf7++2/psS1/BT0wMBBHjhwRPTUyOjoagYGB0NL6d1nMshkWCQkJ0rLMzMxKr/zPmTMHixYtQufOneHk5IQpU6agV69eomMIAAEBAXKv+BOR4pjrqTqY60vVJNcPGTKk2v0x1xMREdVPCg3WTZkyBQ4ODnj48CEMDAxw6dIlHD16FD4+PrV+iwG9eo4dOwZvb2+52/r374+MjAwcP34cAHD8+HFkZGQgICBAVK+kpARNmjTBtm3bkJSUhHnz5mHOnDnYunUrgNLbI4YMGYJevXohLS0NaWlp6Ny5s/Tz3t7esLe3x44dOwAAt2/fxtGjRzFy5Mja2OUKhYSEiH6wREdHY8yYMTL1cnNzMW3aNJw7dw6HDh2ChoYGBg0ahJKSkir3VZ19NjY2RmxsLJKSkhAZGYlvvvkGn376KYDSReanT58ODw8P6bEtW3geAGxsbODv748NGzYAKJ1d8eOPP4oWpVemrKwsNGjQQFTWvn173L17t8IfWYWFhcjOzha9iKhyzPVUHcz1/6pJrgfAXA/meiIiIoUG606ePImFCxfC0tISGhoa0NDQQJcuXbB06VKEhYUpO0Z6xaWmpsLW1lbuNm1tbQQFBSE6OhpA6QltUFAQtLW1ZeotWLAAPj4+cHBwQGBgIMaMGSM9gTcyMoK+vj50dXXRsGFDNGzYEDo6OqI2QkJCpP3ExsaiT58+sLKyUvbuViooKAjHjx9HamoqUlNTER8fj6CgIJl6b7/9NgYPHozmzZujTZs2iI6OxsWLF5GUlFSt/qq6z3PnzkXnzp1hb2+PgIAAzJgxQ3ps9fX1YWRkBC0tLemx1dfXl+knNjYWEokE27dvh5OTk9x1b2pq69atOHv2rMyPnrL/v1JTU+V+bunSpTA1NZW+7OzslB4bUX3DXE/VwVz/L0Vz/ZdffgkAuHLlSrX6Y64vxVxPRET1iUKDdcXFxTA2NgZQuobEP//8A6B0Merk5GTlRUf1Qn5+PvT09CrcHhISgm3btuH+/fvYtm1bhVdpv/zyS3h7e8PKygpGRkZYv349bt++XeU4goKCcPLkSdy8eROxsbG1djW4MlZWVujbty9iY2MRExODvn37wtLSUqbetWvXMHz4cDg6OsLExES6WHd19heo+j7/+OOP8PX1RcOGDWFkZIS5c+dWq6++ffvi6dOnOHr0KKKjo2vl2B4+fBhjxozBN998Aw8PD9G2sh8UeXl5cj8bHh6OrKws6av8bTxEJB9zPVUHc/2/FM31np6eAIC7d+9Wqz/m+lLM9UREVJ8oNFjXsmVL/P333wCADh06YMWKFYiPj8fChQvh6Oio1ADp1WdpaYmMjIwKt3t6esLV1RXDhw+Hm5sbWrZsKVNny5YtmDFjBkJDQ3Hw4EEkJCRgzJgxePbsWZXjKFv7LTQ0FAUFBejdu7dMnbJbUCQSibSsbD0XZSm7Mr1hw4YKT3QDAgLw5MkTfPPNNzh9+jROnz4NANXaX6Bq+3zy5EkEBgaiT58++PXXX/HXX3/hww8/rFZfWlpaGDlyJObPn4/Tp08jMDBQpk5Nju2RI0cQEBCATz/9FKNGjZLZ/uTJEwCocPaErq4uTExMRC8iqhxzPVUHc72YIrn+0KFDAJjrmeuJiIgUHKybO3eudD2NhQsX4tatW/Dz88PevXvx2WefKTVAevV5eXm99PbNkJAQxMXFVXhCGx8fj86dO2PSpEnw8vJC8+bNZR64oKOjg+Li4ir1M2rUKGhqaspsLzsBTEtLk5aVXyRZGXr16oVnz57h+fPn8Pf3l9menp6O5ORkzJ07F2+88Qbc3Nwq/QH0Mi/b5xMnTqBZs2b48MMP4ePjA2dnZ5lbTKp6bI8cOYIBAwbA3NxcZruixzYuLg59+/bF8uXLMX78eLl1EhMToa2tLXMVnogUx1xP1cFcL6ZIri//wIvqYq4nIiKqX7ReXkVW+ZOO5s2b48qVK3jy5AnMzc0hCILSgqP6wd/fH+Hh4cjIyJB7YgcA48aNw7vvvgszMzO5252dnbFx40YcOHAADg4O+O6773D27Fk4ODhI69jb2+PAgQNITk6GhYUFTE1NZdbD6dWrFx49elTh1dbmzZvDzs4OERERWLx4Ma5evYpVq1YptuMV0NTUxOXLl6V/fpG5uTksLCywfv16NGrUCLdv38bs2bMV7u9l++zs7Izbt29jy5YtaNeuHfbs2YOdO3eK6tjb2+PWrVtISEhAkyZNYGxsDF1dXVEdNzc3PH78GAYGBnL70dfXR8eOHbFs2TLpovVz586tNPbDhw+jX79+mDJlCt5++23cv38fQOkPivILTx87dgx+fn4y6+sQkeKY66k6mOvFFMn1c+bMUbg/5noiIqL6RaGZdfI0aNCAJ+8kl6enJ9q2bStdxFgeLS0tWFpaQktL/vjxhAkTMHjwYAwdOhQdOnRAeno6Jk2aJKozbtw4uLi4wMfHB1ZWVoiPj5dpRxAEWFpayixIXUZbWxubN2/GlStX0KpVKyxfvhwff/xxpfuXkpICQRCq9XTEym7P0NDQwJYtW/Dnn3+iZcuWeP/99/HJJ59Uue0XvWyf+/fvj/fffx/vvfce2rRpgxMnTuCjjz4S1Xn77bfRq1cvdO/eHVZWVti8ebPctiwsLCo9iY6OjkZRURG8vb0xderUlx7bDRs2IC8vD0uXLkWjRo2kr8GDB4vqbdmyBePGjau0LSKqOeZ6qghzvazq5vpFixZVue0XMdcTERHVL4Kk/KISVZSbm4tly5bh0KFDePjwocwj5m/evKm0AKl+2LNnD2bOnInExETpeib1xeHDhzF48GDcvHmzwtkEVHv27duH6dOn48KFCxX+AHxRdnZ26ZPipm6Fhq782QH1ScqyvqoOgV5BzPVUXcz1NVOWm7Kysrje2guY64mISFWU+VuqOrleodtgx44diyNHjmDkyJFo1KgRr7LTS/Xt2xfXrl3DvXv3YGdnp+pwlGrv3r2YM2cOB+pUJDc3FzExMVU+eSeiqmGup+pirqfawlxPRESvG4Vm1pmZmWHPnj3w9fWtjZiIqBJLlizBkiVL5G7z8/PDvn376jiiV8/rdrWdM+tIEcz1RHWr/NX2L774grm+hl63XE9ERLXjlZpZZ25uLlrwlYjqzsSJEzFkyBC527joMhEpC3M9keow1xMREb3eFBqsW7RoEebNm4cNGzZU+DQoIqodDRo04A9oIqp1zPVEqsNcT0RE9HpT6DZYLy8v3LhxAxKJBPb29tDW1hZtP3/+vNICJCJSNi7iTfRyzPVEdYu5Sbl4PImISN3U+m2wAwcOVORjRERE9IpgriciIiIiUg2FZtYREb3KeLWdiIjUDXOTcvF4EhGRuqlObtKoo5iIiIiIiIiIiIjoJZQ+WOfg4IDQ0FD8888/ym6aiIiI1ABzPRERERFR7VH6YF1wcDCKi4vh6+ur7KaJiIhIDTDXExERERHVHq5ZR0SvHa5jQ0RE6oa5Sbl4PImISN3U2Zp1z549Q3JyMoqKimrSDBEREakp5noiIiIiorql0GBdXl4eQkNDYWBgAA8PD9y+fRsAMHnyZCxbtkypARIREVHdY64nIiIiIlINhQbrwsPD8ffffyMuLg56enrS8jfffBM//vij0oIjIiIi1WCuJyIiIiJSDS1FPrRr1y78+OOP6NixIwRBkJZ7eHjgxo0bSguOiIiIVIO5noiIiIhINRSaWffo0SNYW1vLlOfm5opO6ImIiOjVxFxPRERERKQaCg3W+fj4YM+ePdL3ZSft3377LTp16qScyIiIiEhlmOuJiIiIiFRDodtglyxZgt69eyMpKQlFRUWIjIxEUlISTpw4gSNHjig7RiIiIqpjzPVERERERKqh0My6Ll26ICEhAUVFRfD09MTBgwdhbW2NkydPwtvbW9kxEhERUR1jriciIiIiUg1BIpFIVB0EEVFdys7OhqmpKbKysmBiYqLqcIiIiJiblIzHk4iI1E11cpNCt8GWefjwIR4+fIiSkhJReatWrWrSLBEREakJ5noiIiIiorql0GDdn3/+ieDgYFy+fBkvTswTBAHFxcVKCY6IiIhUg7meiIiIiEg1FBqsCwkJQYsWLRAVFQUbGxvpE+KIiIiofmCuJyIiIiJSDYUG627evIkdO3agefPmyo6HiIiI1ABzPRERERGRaij0NNg33ngDf//9t7JjISIiIjXBXE9EREREpBoKzaz79ttvERwcjMTERLRs2RLa2tqi7f3791dKcERERKQazPVERERERKqh0GDdyZMnER8fj3379sls46LTRPSqaDn/ADR0DVQdhtKlLOur6hCoHmCuJ6L6oL7meiIiqhuq+m2l0G2wkydPRlBQENLS0lBSUiJ68eSdiIjo1cdcT0RERESkGgoN1qWnp+P999+HjY2NsuMhIiIiNcBcT0RERESkGgoN1g0ePBiHDx9WdixERESkJpjriYiIiIhUQ6E161q0aIHw8HAcP34cnp6eMotOh4WFKSU4IiIiUg3meiIiIiIi1RAkEomkuh9ycHCouEFBwM2bN2sUFBFRbcrOzoapqSnspm6tl4tO8wETpAzM9UR1qyw3ZWVlwcTERNXhvPLqe64nIqK6oczfVtXJ9QrdBnvr1q0KXzx5p+pIT0+HtbU1UlJSqvyZiIgItGnTptZiqo5u3bph6tSpldaxt7fHmjVrlNqvso9BbcSoiJSUFAiCgISEhArrxMXFQRAEZGZmAgD279+PNm3aoKSkpG6CJHpNMNeTsjDXK4a5nrmeiIheXwoN1hEpy+LFizFgwADY29tLy3bu3ImOHTvC1NQUxsbG8PDwEJ0kz5gxA4cOHar7YOX46aefsGjRIqW3q8xjkJeXh/DwcDg5OUFPTw9WVlbo2rUrfv75Z2mds2fPYvz48crejWqzs7NDWloaWrZsWeXP9OrVC9ra2vjhhx9qMTIiIlIUc718Lx6DDh06iLYz1/+LuZ6IiF43Cq1ZBwB3797F7t27cfv2bTx79ky0bfXq1TUOjOq/vLw8REVF4cCBA9KyQ4cOYejQoVi8eDH69+8PQRCQlJSE3377TVrHyMgIRkZGqghZRoMGDZTeprKPwcSJE3H69Gl8/vnncHd3R3p6Ok6cOIH09HRpHSsrK6XvhyI0NTXRsGHDan9u9OjR+OyzzzBy5MhaiIro9cVcTzXFXC+fvGNw7tw5BAYGSusw14sx1xMR0etEoZl1hw4dgouLC9atW4dVq1bh8OHDiImJQXR0dKVT2onK27t3L3R1ddGxY0dp2S+//AJfX1/MnDkTLi4uaNGiBQYOHIgvv/xSWufF20KKiooQFhYGMzMzWFhYYNasWQgODsbAgQOldbp164bJkydj6tSpMDc3h42NDb755hvk5uZizJgxMDY2RvPmzbFv3z5RjEeOHEH79u2hq6uLRo0aYfbs2SgqKhK1W34mwMOHDxEQEAB9fX04ODgodAVYkWNQmd27d2POnDno06cP7O3t4e3tjcmTJyMkJERa58VbY65cuYIuXbpAT08P7u7u+P333yEIAnbt2gXg31tYtm7dCj8/P+jr66Ndu3a4evUqzp49Cx8fHxgZGaF379549OiRtN2SkhIsXLgQTZo0ga6uLtq0aYP9+/dLt8u7NWbv3r1o0aIF9PX10b17d7m3UQUEBODcuXO4ceNGlY4JEb0ccz0pA3O9fPKOQb9+/UR1mOvFmOuJiOh1otBgXXh4OGbMmIGLFy9CT08PO3bswJ07d9C1a1e8++67yo6R6qljx47B29tbVNawYUNcunQJiYmJVW5n+fLl+OGHHxATE4P4+HhkZ2dLTzTL27BhAywtLXHmzBlMnjwZ//3vf/Huu++ic+fOOH/+PHr27ImRI0ciLy8PAHDv3j306dMH7dq1w99//41169YhKioKH3/8cYWxjB49Gnfu3MHhw4exfft2rF27Fg8fPqzyvih6DF7W3t69e5GTk1Ol+sXFxRg4cCAMDAxw+vRprF+/Hh9++KHcuvPnz8fcuXNx/vx5aGlpYcSIEfjggw8QGRmJY8eO4fr165g3b560fmRkJFatWoWVK1fiwoUL8Pf3R//+/XHt2jW57d+5cweDBw9GQEAAEhISMHbsWMyePVumXtOmTWFjY4Njx47JbaewsBDZ2dmiFxFVjrmelIG5Xj7m+n8x1xMREclSaLDu8uXLGDVqFABAS0sL+fn5MDIywsKFC7F8+XKlBkj1V2pqKmxtbUVlkydPRrt27eDp6Ql7e3sMGzYM0dHRKCwsrLCdzz//HOHh4Rg0aBBcXV3xxRdfwMzMTKZe69atMXfuXDg7OyM8PBx6enqwtLTEuHHj4OzsjHnz5iE9PR0XLlwAAKxduxZ2dnb44osv4OrqioEDB2LBggVYtWqV3AWOr169in379uGbb75Bx44d4e3tjaioKOTn51fruChyDCqzfv16nDhxAhYWFmjXrh3ef/99xMfHV1j/t99+w40bN7Bx40a0bt0aXbp0weLFi+XWnTFjBvz9/eHm5oYpU6bgzz//xEcffQRfX194eXkhNDQUhw8fltZfuXIlZs2ahWHDhsHFxQXLly9HmzZtKlzwet26dXBycsKqVavg4uKCwMBAjB49Wm5dW1tbpKamyt22dOlSmJqaSl92dnYV7j8RlWKuJ2VgrpdP3jH47rvvqtVGecz1zPVERFS/KDRYZ2hoKF27plGjRqLp6I8fP1ZOZFTv5efnQ09PT1RmaGiIPXv24Pr165g7dy6MjIwwffp0tG/fXnoVvLysrCw8ePAA7du3l5ZpamrKXMUHgFatWonqWFhYwNPTU1pmY2MDANKr45cvX0anTp0gCIK0jq+vL54+fYq7d+/KtH/58mVoaWmJ+nZ1dZX7Y6Iy1T0GL/Of//wHN2/exKFDh/DOO+/g0qVL8PPzq3Cx7OTkZNjZ2YnWkyl/fMsrf0zLjt+Lx7TseGZnZ+Off/6Br6+vqA1fX19cvnxZbvuXL1+WWXC7U6dOcuvq6+tXeHzCw8ORlZUlfd25c0duPSL6F3M9KQNzvXzyjkHZzDbmeuZ6IiIihQbrOnbsiOPHjwMA+vTpg+nTp2Px4sUICQkRrUlCVBlLS0tkZGTI3ebk5ISxY8fi22+/xfnz55GUlIQff/yxRv1pa2uL3guCICorO1GXdyVdFZR5DLS1teHn54dZs2bh4MGDWLhwIRYtWiSzYLwi7ZYpO34vltXV8Xzy5EmFi2fr6urCxMRE9CKiyjHXkzIw11eu/DE4evQogNKnzyqCuZ65noiI6g+FButWr14tvQK2YMECvPHGG/jxxx9hb2+PqKgopQZI9ZeXlxeSkpJeWs/e3h4GBgbIzc2V2WZqagobGxucPXtWWlZcXIzz58/XOD43NzecPHkSEolEWhYfHw9jY2M0adJEpr6rqyuKiorw559/SsuSk5ORmZlZ41gqOwaKcHd3R1FREQoKCmS2ubi44M6dO3jw4IG0rPzxVZSJiQlsbW1lbsuJj4+Hu7u73M+4ubnhzJkzorJTp07J1CsoKMCNGzfg5eVV4ziJqBRzPSkDc33VNWvWDIBiM+vkYa4nIiJ6dWkp8iFHR0fpnw0NDfHVV18pLSB6ffj7+yM8PBwZGRkwNzcHUPrks7y8PPTp0wfNmjVDZmYmPvvsMzx//hxvvfWW3HYmT56MpUuXonnz5nB1dcXnn3+OjIwM0S0tipg0aRLWrFmDyZMn47333kNycjLmz5+PadOmQUNDdpzbxcUFvXr1woQJE7Bu3TpoaWlh6tSp0NfXr1a/ihyDynTr1g3Dhw+Hj48PLCwskJSUhDlz5qB79+5yrzq/9dZbcHJyQnBwMFasWIGcnBzMnTsXAGp8TGfOnIn58+fDyckJbdq0QUxMDBISEip8kt7EiROxatUqzJw5E2PHjsWff/6J2NhYmXqnTp2Crq5uhbfNEFH1MdeTMjDXyyfvGKxatQoA0L1792rvB3M9ERFR/aLQzLoyz549w927d3H79m3Ri6gqPD090bZtW2zdulVa1rVrV9y8eROjRo2Cq6srevfujfv37+PgwYNwcXGR286sWbMwfPhwjBo1Cp06dYKRkRH8/f1l1siprsaNG2Pv3r04c+YMWrdujYkTJyI0NFR6MitPTEwMbG1t0bVrVwwePBjjx4+HtbW1qM7o0aPRrVu3CttQ5BhUxt/fHxs2bEDPnj3h5uaGyZMnw9/fX3Tcy9PU1MSuXbvw9OlTtGvXDmPHjpWuo1PTYxoWFoZp06Zh+vTp8PT0xP79+7F79244OzvLrd+0aVPs2LEDu3btQuvWrfHVV19hyZIlMvU2b96MwMBAGBgY1Cg+IpLFXE81wVwvn7xjUDbLraKcWBnmeiIiovpFkJSf919FV69eRWhoKE6cOCEql0gkEAQBxcXFSguQ6rc9e/Zg5syZSExMlHsFWxElJSVwc3PDkCFDKlxYWZW6du2K7t27IyIiQtWhVFl8fDy6dOmC69evw8nJSdXhiDx+/BguLi44d+4cHBwcqvSZ7Ozs0ifFTd0KDd36d9KfsqyvqkOgeoC5npSFub5qynJTVlaWStZbY64nIiKSpczfVtXJ9QrdBjtmzBhoaWnh119/RaNGjWo8XZ5eX3379sW1a9dw79492NnZKdRGamoqDh48iK5du6KwsBBffPEFbt26hREjRig52prLysrCjRs3sGfPHlWHUqmdO3fCyMgIzs7OuH79OqZMmQJfX1+1O3kHgJSUFKxdu7bKJ+9EVDXM9aQszPXqibmeiIhIfSk0WJeQkIA///wTrq6uyo6HXkNTp06t0ec1NDQQGxuLGTNmQCKRoGXLlvj999/h5uamnACVyNTUFHfv3lVqm0ZGRhVu27dvH/z8/KrdZk5ODmbNmoXbt2/D0tISb775pnQtHXXj4+MDHx8fVYdBVO8w15MyMdfXDHM9cz0REb1eFBqsc3d3x+PHj5UdC5FC7OzsZJ469jpJSEiocFvjxo0VanPUqFEYNWqUghERUX3AXE/qhLk+ocJtzPVERET1j0KDdcuXL8cHH3yAJUuWwNPTE9ra2qLtqlhng+h11bx5c1WHQET1EHM9kfpgriciInq9KPSAibLFgV9cv4aLThPRq0DVi3gTvQqY64nqFnOTcvF4EhGRuqn1B0wcPnxYocCIiIjo1cBcT0RERESkGgoN1nXt2rVK9SZNmoSFCxfC0tJSkW6IiIhIRZjriYiIiIhUQ6M2G//++++RnZ1dm10QERGRCjHXExEREREpV60O1imwHB4RERG9QpjriYiIiIiUq1YH64iIiIiIiIiIiKjqOFhHRERERERERESkJjhYR0REREREREREpCY4WEdERERERERERKQmanWwLigoCCYmJrXZBREREakQcz0RERERkXJpKfrBjIwMREVF4fLlywAANzc3hISEoEGDBtI669atq3mEREREpBLM9UREREREdU+hmXVHjx6Fg4MDPvvsM2RkZCAjIwOff/45HBwccPToUWXHSERERHWMuZ6IiIiISDUEiUQiqe6HPD090alTJ6xbtw6ampoAgOLiYkyaNAknTpzAxYsXlR4oEZGyZGdnw9TUFFlZWbx9j6gCzPVEdYu5Sbl4PImISN1UJzcpNLPu+vXrmD59uvTkHQA0NTUxbdo0XL9+XZEmiYiISI0w1xMRERERqYZCg3Vt27aVrl9T3uXLl9G6desaB0VERESqxVxPRERERKQaCj1gIiwsDFOmTMH169fRsWNHAMCpU6fw5ZdfYtmyZbhw4YK0bqtWrZQTKREREdUZ5noiIiIiItVQaM06DY3KJ+QJggCJRAJBEFBcXKxwcEREtYHr2BC9HHM9Ud1iblIuHk8iIlI31clNCs2su3XrlkKBERER0auBuZ6IiIiISDUUGqxr1qyZsuMgIiIiNcJcT0RERESkGgoN1gHAjRs3sGbNGuni0+7u7pgyZQqcnJyUFhwRERGpDnM9EREREVHdU+hpsAcOHIC7uzvOnDmDVq1aoVWrVjh9+jQ8PDzw22+/KTtGIiIiqmPM9UREREREqqHQAya8vLzg7++PZcuWicpnz56NgwcP4vz580oLkIhI2bjoNNHLMdcT1S3mJuXi8SQiInVTndyk0GCdnp4eLl68CGdnZ1H51atX0apVKxQUFFS3SSKiOlP2j6Td1K3Q0DVQdThKlbKsr6pDoHqCuZ6obnFwSbnqc64nIqK6o8zfV9XJ9QrdBmtlZYWEhASZ8oSEBFhbWyvSJBEREakR5noiIiIiItVQ6AET48aNw/jx43Hz5k107twZABAfH4/ly5dj2rRpSg2QiIiI6h5zPRERERGRaig0WPfRRx/B2NgYq1atQnh4OADA1tYWERERCAsLU2qAREREVPeY64mIiIiIVEOhwTpBEPD+++/j/fffR05ODgDA2NhYpl58fDx8fHygq6tbsyiJiIioTjHXExERERGphkJr1pVnbGws9+QdAHr37o179+7VtAsiIiJSIeZ6IiIiIqK6U+PBusoo8KBZonojPT0d1tbWSElJqbU+IiIi0KZNm1prXx3FxsbCzMxM+v6rr75CQECA6gIies0x19PrjLm+djDXExHR665WB+uIXmeLFy/GgAEDYG9vDwBISUmBIAjQ1NSUmYWSlpYGLS0tCIJQqyf8ANCtWzcIgoBly5bJbOvbty8EQUBERITS+hMEAYIg4NSpU6LywsJCWFhYQBAExMXFKdx+SEgIzp8/j2PHjtUwUiIiouphri/FXE9ERKRcHKwjqgV5eXmIiopCaGiozLbGjRtj48aNorINGzagcePGdRUe7OzsEBsbKyq7d+8eDh06hEaNGtVKfzExMaKynTt3wsjIqMZt6+joYMSIEfjss89q3BYREVFVMdfL9sdcT0REpBwcrCOqBXv37oWuri46duwosy04OFjmZDYmJgbBwcGishdvAQGAXbt2QRCEGsfXr18/PH78GPHx8dKyDRs2oGfPnrC2thbVFQQBu3btEpWZmZnJ/ACoTHBwMLZs2YL8/HxpWXR0tMw+x8XFQRAEZGZmSssSEhJeOgshICAAu3fvFrVPRERUm2or1//666/M9XIw1xMR0eukVgfrlHGiQfQqOnbsGLy9veVu69+/PzIyMnD8+HEAwPHjx5GRkVGna7Ho6OggMDBQ9EMiNjYWISEhtdKft7c37O3tsWPHDgDA7du3cfToUYwcOVIp7fv4+KCoqAinT5+Wu72wsBDZ2dmiFxEpB3M9va6Y68WY64mIiJSHD5ggqgWpqamwtbWVu01bWxtBQUGIjo4GUHrVOSgoCNra2nUZIkJCQrB161bk5ubi6NGjyMrKQr9+/Wq1v7J9jo2NRZ8+fWBlZaWUtg0MDGBqaorU1FS525cuXQpTU1Ppy87OTin9EhFzPb2+mOvl98dcT0REVHMKDdbl5+cjLy9P+j41NRVr1qzBwYMHRfVycnLg6OhYswiJXkH5+fnQ09OrcHtISAi2bduG+/fvY9u2bbV2lbsyrVu3hrOzM7Zv347o6GiMHDkSWlpatdZfUFAQTp48iZs3b9bKlX19fX3Rv0vlhYeHIysrS/q6c+eOUvsmqo+Y64kqx1wvi7meiIhIORTK1gMGDMDgwYMxceJEZGZmokOHDtDW1sbjx4+xevVq/Pe//1V2nESvFEtLS2RkZFS43dPTE66urhg+fDjc3NzQsmVLJCQkiOpoaGjIzFh5/vy5UuMMCQnBl19+iaSkJJw5c0ZuHUEQlBKHhYUF+vXrh9DQUBQUFKB3797IyckR1dHQKL1+UL6/qvb15MmTCq/e6+rqQldXt9oxE73OmOuJKsdcL4u5noiISDkUmll3/vx5+Pn5AQC2b98OGxsbpKamYuPGjXxKExEALy8vJCUlVVonJCQEcXFxFV51trKyQk5ODnJzc6VlL57k19SIESNw8eJFtGzZEu7u7hXGkZaWJn1/7dq1Cq9qv0zZPo8aNQqamppy+wIg6q8q+3zjxg0UFBTAy8tLobiISBZzPVHlaivXX7x4UalxMtcTERG9ehSaWZeXlwdjY2MAwMGDBzF48GBoaGigY8eOFa4jQfQ68ff3R3h4ODIyMmBubi63zrhx4/Duu+/KPAWuTIcOHWBgYIA5c+YgLCwMp0+frtZT2arC3NwcaWlpla6h06NHD3zxxRfo1KkTiouLMWvWLIXX3OnVqxcePXoEExMTudubN28OOzs7REREYPHixbh69SpWrVr10naPHTsGR0dHODk5KRQXEclirieqnLJz/ZgxYwAAmzZtUmqczPVERESvHoVm1jVv3hy7du3CnTt3cODAAfTs2RMA8PDhwwoTM9HrxNPTE23btsXWrVsrrKOlpQVLS8sK145p0KABvv/+e+zduxeenp7YvHkzIiIiKu03Li4OgiAgJSWlyrGamZnB0NCwwu2rVq2CnZ0d/Pz8MGLECMyYMQMGBgZVbr88QRBgaWkJHR0dudu1tbWxefNmXLlyBa1atcLy5cvx8ccfv7TdzZs3Y9y4cQrFRETyMdcTVU7Zub5z584AgNmzZ1faL3M9ERFR/SdIFHiM2/bt2zFixAgUFxfjjTfekC42vXTpUhw9ehT79u1TeqBEr5o9e/Zg5syZSExMlK7PUttiYmKwZMkSJCUl1fkT51Tl0qVL6NGjB65evQpTU9MqfSY7O7v0SXFTt0JDV7EfI+oqZVlfVYdA9QRzPdHLKTPXl+WmrKysSgfEmeuZ64mIqO4o8/dVVXM9oOBtsO+88w66dOmCtLQ0tG7dWlr+xhtvYNCgQYo0SVTv9O3bF9euXcO9e/dgZ2dXJ33u3bsXS5YseW1O3oHSNW82btxY5ZN3Iqoa5nqil2OurxvM9URE9LpRaGYdEREALFmyBEuWLJG7zc/PT21n3tTnq+2cWUdE9GqqztX2usRcT0REr7NXambdoEGDIAiCTLkgCNDT00Pz5s0xYsQIuLi4KNI8Eb0iJk6ciCFDhsjdpq+vX8fREJEyMdcTEcBcT0REpAoKDdaZmppi165dMDMzg7e3NwDg/PnzyMzMRM+ePfHjjz9i+fLlOHToEHx9fZUaMBGpjwYNGqBBgwaqDoOIagFzPREBzPVERESqoNBgXcOGDTFixAh88cUX0sV0S0pKMGXKFBgbG2PLli2YOHEiZs2ahePHjys1YCIiZUlc4K9WtxoRqRPmeiKqD5jriYjoVaTQmnVWVlaIj49HixYtROVXr15F586d8fjxY1y8eBF+fn7IzMxUVqxEREqhrusCEakT5nqiusXcpFw8nkREpG6qk5sUesZ8UVERrly5IlN+5coVFBcXAwD09PTkrnVDRERE6o+5noiIiIhINRS6DXbkyJEIDQ3FnDlz0K5dOwDA2bNnsWTJEowaNQoAcOTIEXh4eCgvUiIiIqozzPVERERERKqh0GDdp59+ChsbG6xYsQIPHjwAANjY2OD999/HrFmzAAA9e/ZEr169lBcpERER1RnmeiIiIiIi1aj2mnVFRUXYtGkT/P39YWNjg+zsbADgWhBE9MrgOjZElWOuJ6p7zE3KxeNJRETqplbXrNPS0sLEiRNRUFAAoPTEnQmQiIio/mCuJyIiIiJSHYUeMNG+fXv89ddfyo6FiIiI1ARzPRERERGRaii0Zt2kSZMwffp03L17F97e3jA0NBRtb9WqlVKCIyIiItVgriciIiIiUo1qr1kHABoaFU/IEwQBxcXFNQqKiKg2cR0bopdjrieqW8xNysXjSURE6qY6uUmhmXW3bt1SKDAiIiJ6NTDXExERERGphkKDdc2aNQMAJCUl4fbt23j27Jl0myAI0u1ERET0amKuJyIiIiJSDYUG627evIlBgwbh4sWLEAQBZXfSCoIAALw1hoiI6BXHXE9EREREpBoKPQ12ypQpcHBwwMOHD2FgYIDExEQcPXoUPj4+iIuLU3KIREREVNeY64mIiIiIVEOhmXUnT57EH3/8AUtLS2hoaEBTUxNdunTB0qVLERYWhr/++kvZcRIREVEdYq4nIiIiIlINhWbWFRcXw9jYGABgaWmJf/75B0Dp+jbJycnKi46IiIhUgrmeiIiIiEg1FJpZ17JlS/z9999wcHBAhw4dsGLFCujo6GD9+vVwdHRUdoxERERUx5jriYiIiIhUQ6HBurlz5yI3NxcAsHDhQvTr1w9+fn6wsLDAjz/+qNQAiYiIqO4x1xMRERERqYYgKXu8Ww09efIE5ubm0qfEERGpq+zsbJiamiIrKwsmJiaqDofolcFcT1R7mJuUi8eTiIjUTXVyk0Iz6+Rp0KCBspoiIiIiNcRcT0RERERU+xR6wAQREREREREREREpHwfriIiIiIiIiIiI1ITSboMlInrVtJx/ABq6BqoOQylSlvVVdQhERERqpz7leiIiqnuq+p3FmXVERERERERERERqgoN1REREREREREREaoKDdURERERERERERGqCg3VERERERERERERqgoN1REREREREREREaoKDdVRr0tPTYW1tjZSUlCp/JiIiAm3atKm1mKqjW7dumDp1aqV17O3tsWbNGqX2q+xjUBsxKiIlJQWCICAhIaHCOnFxcRAEAZmZmVVu96uvvkJAQEDNAyQiompjrlcMcz1zPRERUWU4WEe1ZvHixRgwYADs7e2lZTt37kTHjh1hamoKY2NjeHh4iE6SZ8yYgUOHDtV9sHL89NNPWLRokdLbVeYxyMvLQ3h4OJycnKCnpwcrKyt07doVP//8s7TO2bNnMX78eGXvRrXZ2dkhLS0NLVu2rPJnCgoKMHr0aHh6ekJLSwsDBw6UqRMSEoLz58/j2LFjSoyWiIiqgrlePuZ65noiIqKa0FJ1AFQ/5eXlISoqCgcOHJCWHTp0CEOHDsXixYvRv39/CIKApKQk/Pbbb9I6RkZGMDIyUkXIMho0aKD0NpV9DCZOnIjTp0/j888/h7u7O9LT03HixAmkp6dL61hZWSl9PxShqamJhg0bVuszxcXF0NfXR1hYGHbs2CG3jo6ODkaMGIHPPvsMfn5+ygiViIiqgLlePuZ65noiIqKa4sw6qhV79+6Frq4uOnbsKC375Zdf4Ovri5kzZ8LFxQUtWrTAwIED8eWXX0rrvHhbSFFREcLCwmBmZgYLCwvMmjULwcHBoquu3bp1w+TJkzF16lSYm5vDxsYG33zzDXJzczFmzBgYGxujefPm2LdvnyjGI0eOoH379tDV1UWjRo0we/ZsFBUVidotfxX84cOHCAgIgL6+PhwcHPDDDz9U+7gocgwqs3v3bsyZMwd9+vSBvb09vL29MXnyZISEhEjrvHhrzJUrV9ClSxfo6enB3d0dv//+OwRBwK5duwD8ewvL1q1b4efnB319fbRr1w5Xr17F2bNn4ePjAyMjI/Tu3RuPHj2StltSUoKFCxeiSZMm0NXVRZs2bbB//37pdnm3xuzduxctWrSAvr4+unfvLnMblaGhIdatW4dx48ZVevIfEBCA3bt3Iz8/v0rHjYiIao65Xj7meuZ6IiKimuJgHdWKY8eOwdvbW1TWsGFDXLp0CYmJiVVuZ/ny5fjhhx8QExOD+Ph4ZGdnS080y9uwYQMsLS1x5swZTJ48Gf/973/x7rvvonPnzjh//jx69uyJkSNHIi8vDwBw79499OnTB+3atcPff/+NdevWISoqCh9//HGFsYwePRp37tzB4cOHsX37dqxduxYPHz6s8r4oegxe1t7evXuRk5NTpfrFxcUYOHAgDAwMcPr0aaxfvx4ffvih3Lrz58/H3Llzcf78eWhpaWHEiBH44IMPEBkZiWPHjuH69euYN2+etH5kZCRWrVqFlStX4sKFC/D390f//v1x7do1ue3fuXMHgwcPRkBAABISEjB27FjMnj27+gcBgI+PD4qKinD69Gm52wsLC5GdnS16ERFRzTDXy8dc/y/meiIiIsVwsI5qRWpqKmxtbUVlkydPRrt27eDp6Ql7e3sMGzYM0dHRKCwsrLCdzz//HOHh4Rg0aBBcXV3xxRdfwMzMTKZe69atMXfuXDg7OyM8PBx6enqwtLTEuHHj4OzsjHnz5iE9PR0XLlwAAKxduxZ2dnb44osv4OrqioEDB2LBggVYtWoVSkpKZNq/evUq9u3bh2+++QYdO3aEt7c3oqKiqn11V5FjUJn169fjxIkTsLCwQLt27fD+++8jPj6+wvq//fYbbty4gY0bN6J169bo0qULFi9eLLfujBkz4O/vDzc3N0yZMgV//vknPvroI/j6+sLLywuhoaE4fPiwtP7KlSsxa9YsDBs2DC4uLli+fDnatGlT4YLX69atg5OTE1atWgUXFxcEBgZi9OjRCh0HAwMDmJqaIjU1Ve72pUuXwtTUVPqys7NTqB8iIvoXc718zPX/Yq4nIiJSDAfrqFbk5+dDT09PVGZoaIg9e/bg+vXrmDt3LoyMjDB9+nS0b99eehW8vKysLDx48ADt27eXlmlqaspcxQeAVq1aiepYWFjA09NTWmZjYwMA0qvjly9fRqdOnSAIgrSOr68vnj59irt378q0f/nyZWhpaYn6dnV1lftjojLVPQYv85///Ac3b97EoUOH8M477+DSpUvw8/OrcLHs5ORk2NnZiW4zKX98yyt/TMuO34vHtOx4Zmdn459//oGvr6+oDV9fX1y+fFlu+5cvX0aHDh1EZZ06dapoV19KX1+/wmMYHh6OrKws6evOnTsK90NERKWY6+Vjrv8Xcz0REZFiOFhHtcLS0hIZGRlytzk5OWHs2LH49ttvcf78eSQlJeHHH3+sUX/a2tqi94IgiMrKTtTlXUlXBWUeA21tbfj5+WHWrFk4ePAgFi5ciEWLFuHZs2c1ilHe8XuxTF2OJwA8efKkwgW2dXV1YWJiInoREVHNMNdXjrle+ZjriYjodcHBOqoVXl5eSEpKemk9e3t7GBgYIDc3V2abqakpbGxscPbsWWlZcXExzp8/X+P43NzccPLkSUgkEmlZfHw8jI2N0aRJE5n6rq6uKCoqwp9//iktS05ORmZmZo1jqewYKMLd3R1FRUUoKCiQ2ebi4oI7d+7gwYMH0rLyx1dRJiYmsLW1lbktJz4+Hu7u7nI/4+bmhjNnzojKTp06pVD/N27cQEFBAby8vBT6PBERVR9zfdUx1/+LuZ6IiOjltFQdANVP/v7+CA8PR0ZGBszNzQGUPvksLy8Pffr0QbNmzZCZmYnPPvsMz58/x1tvvSW3ncmTJ2Pp0qVo3rw5XF1d8fnnnyMjI0N0S4siJk2ahDVr1mDy5Ml47733kJycjPnz52PatGnQ0JAdw3ZxcUGvXr0wYcIErFu3DlpaWpg6dSr09fWr1a8ix6Ay3bp1w/Dhw+Hj4wMLCwskJSVhzpw56N69u9wrym+99RacnJwQHByMFStWICcnB3PnzgWAGh/TmTNnYv78+XByckKbNm0QExODhISECp+kN3HiRKxatQozZ87E2LFj8eeffyI2NlamXlJSEp49e4YnT54gJydH+oS58k/RO3bsGBwdHeHk5FSjfSAioqpjrpePuf5fzPVERESK4cw6qhWenp5o27Yttm7dKi3r2rUrbt68iVGjRsHV1RW9e/fG/fv3cfDgQbi4uMhtZ9asWRg+fDhGjRqFTp06wcjICP7+/jJr5FRX48aNsXfvXpw5cwatW7fGxIkTERoaKj2ZlScmJga2trbo2rUrBg8ejPHjx8Pa2lpUZ/To0ejWrVuFbShyDCrj7++PDRs2oGfPnnBzc8PkyZPh7+8vOu7laWpqYteuXXj69CnatWuHsWPHSp8QV9NjGhYWhmnTpmH69Onw9PTE/v37sXv3bjg7O8ut37RpU+zYsQO7du1C69at8dVXX2HJkiUy9fr06QMvLy/88ssviIuLg5eXl8xV9c2bN2PcuHE1ip+IiKqHuV4+5vp/MdcTEREpRpCUvzeASIn27NmDmTNnIjExUe4VbEWUlJTAzc0NQ4YMqXBhZVXq2rUrunfvjoiICFWHUmXx8fHo0qULrl+//kperb506RJ69OiBq1evwtTUtEqfyc7OLn1S3NSt0NA1qOUI60bKsr6qDoGIXkPM9cpTlpuysrKUvt4ac339yPVERFT3lPk7qzq5nrfBUq3p27cvrl27hnv37sHOzk6hNlJTU3Hw4EF07doVhYWF+OKLL3Dr1i2MGDFCydHWXFZWFm7cuIE9e/aoOpRK7dy5E0ZGRnB2dsb169cxZcoU+Pr6vpIn7wCQlpaGjRs3VvnknYiIlIe5Xj0x1xMREb3aOFhHtWrq1Kk1+ryGhgZiY2MxY8YMSCQStGzZEr///jvc3NyUE6ASmZqa4u7du0pt08jIqMJt+/btg5+fX7XbzMnJwaxZs3D79m1YWlrizTffxKpVq2oSpkq9+eabqg6BiOi1xlxfMy/meltbW+mfmetLMdcTEdHrhrfBEqmx69evV7itcePG1V70mkrVx1tjeBssEdGrqSzX5+TkoG3btjh//jyMjY0BMNfXRH3M9UREVPd4GywRyWjevLmqQyAiIqJaVJbrs7OzAQBOTk5KX7OOiIiIXi0crCOi11biAn/+ICIiIqrHmOuJiOhVpJzHdhEREREREREREVGNcbCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1wsI6IiIiIiIiIiEhNcLCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1wsI6IiIiIiIiIiEhNcLCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1wsI6IiIiIiIiIiEhNcLCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1wsI6IiIiIiIiIiEhNcLCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1wsI6IiIiIiIiIiEhNcLCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1wsI6IiIiIiIiIiEhNcLCOiIiIiIiIiIhITXCwjoiIiIiIiIiISE1oqToAIiJVaTn/ADR0DVQdRrWlLOur6hCIiCpUXFyM58+fqzoMtaOtrQ1NTU1Vh/HaeVVzPRERqQdV/fbiYB0RERER1ZhEIsH9+/eRmZmp6lDUlpmZGRo2bAhBEFQdChEREakxDtYRERERUY2VDdRZW1vDwMCAA1LlSCQS5OXl4eHDhwCARo0aqTgiIiIiUmccrCMiIiKiGikuLpYO1FlYWKg6HLWkr68PAHj48CGsra15SywRERFViA+YICIiIqIaKVujzsCAa4NVpuz4cE0/IiIiqgwH64iIiIhIKXjra+V4fIiIiKgqOFhHpID09HRYW1sjJSWl1vqIiIhAmzZtaq19dRQbGwszM7NqfWb27NmYPHly7QRERESvLeb62sFcT0RE9HIcrCNSwOLFizFgwADY29sDAFJSUiAIAjQ1NXHv3j1R3bS0NGhpaUEQhFo94QeAbt26QRAELFu2TGZb3759IQgCIiIilNafIAgQBAGnTp0SlRcWFsLCwgKCICAuLk7h9tPS0jBixAi0aNECGhoamDp1qkydGTNmYMOGDbh586bC/RAREb2odevWsLa2Zq5nriciIqpzfMAEUTXl5eUhKioKBw4ckNnWuHFjbNy4EeHh4dKyDRs2oHHjxrh9+3adxGdnZ4fY2FjMnj1bWnbv3j0cOnSoVp4+Z2dnh5iYGHTs2FFatnPnThgZGeHJkyc1aruwsBBWVlaYO3cuPv30U7l1LC0t4e/vj3Xr1uGTTz6pUX9ERKR89rP31Gl/Kcv61riNvLw83L9/H76+vjLbmOtLMdcTERHVHs6sI6qmvXv3QldXV3TCWiY4OBgxMTGispiYGAQHB4vK5N0CsmvXLqWsZdOvXz88fvwY8fHx0rINGzagZ8+esLa2FtUVBAG7du0SlZmZmSE2NrbK/QUHB2PLli3Iz8+XlkVHR8vsc1xcHARBQGZmprQsISGh0lkI9vb2iIyMxKhRo2BqalphDAEBAdiyZUuVYyYiIqrM3r17oaGhIXfgq6q5PioqSibX7969G+7u7jWOj7meiIiofuNgHVE1HTt2DN7e3nK39e/fHxkZGTh+/DgA4Pjx48jIyEBAQECdxaejo4PAwEDRD4nY2FiEhITUSn/e3t6wt7fHjh07AAC3b9/G0aNHMXLkyFrpT5727dvj7t27Ff4QKCwsRHZ2tuhFRERUJjc3F6NGjYKRkREaNWqEyMhIGBkZSbcLgoCDBw8C+DfXGxkZITY2FsePH0d6ejoWLVoEABg6dCj09PRw8uTJWouXuV4Wcz0REdUnHKwjqqbU1FTY2trK3aatrY2goCBER0cDKL3qHBQUBG1t7boMESEhIdi6dStyc3Nx9OhRZGVloV+/frXaX9k+x8bGok+fPrCysqq1/l5U9n2kpqbK3b506VKYmppKX3Z2dnUWGxERqb+ZM2fiyJEj+Pnnn3Hw4EFcu3YNT58+lVu3LNc/e/YMQGmuHzhwoHT7mDFjcPnyZbRs2bJWY2auF2OuJyKi+oSDdUTVlJ+fDz09vQq3h4SEYNu2bbh//z62bdtWa1e5K9O6dWs4Oztj+/btiI6OxsiRI6GlVXtLVAYFBeHkyZO4efNmrV7Zr4i+vj6A0jWG5AkPD0dWVpb0defOnboMj4iI1NjTp08RFRWFlStX4o033oCnpyfc3d1RUlJS4WdCQkLw/PlzZGVlYdu2bXj33Xel23r16gUHB4dqP/G0upjrxZjriYioPuEDJoiqydLSEhkZGRVu9/T0hKurK4YPHw43Nze0bNkSCQkJojoaGhqQSCSisufPnys1zpCQEHz55ZdISkrCmTNn5NYRBEEpcVhYWKBfv34IDQ1FQUEBevfujZycHFEdDY3SawPl+1PWPpctbl3RFX5dXV3o6uoqpS8iIqpfbty4gWfPnqFDhw7SskaNGsHY2LjCz3h6ekJTUxNfffUV3Nzc4OLiIlOHuV7xvuRhriciotcJZ9YRVZOXlxeSkpIqrRMSEoK4uLgKrzpbWVkhJycHubm50rIXB/RqasSIEbh48SJatmxZ4WLWVlZWSEtLk76/du1ahVesX6Zsn0eNGgVNTU25fQEQ9aesfU5MTIS2tjY8PDyU0h4REb3evLy8UFBQIH0vb8BLQ0MDV65cqVauv3DhglLjZK4nIiKqnzizjqia/P39ER4ejoyMDJibm8utM27cOLz77rsV3gLToUMHGBgYYM6cOQgLC8Pp06er9VS2qjA3N0daWlql6+X16NEDX3zxBTp16oTi4mL8X3v3HhRV+QZw/NmFXYRwuYSCGCRm6eQVtYiKfn/IhMV0cWpyiGnK7ELhTE5GapnaTCnZZbxMOc40Ydkko41ak2gxolaMohIkK0pUmpUglCJgmiLP7w/jjCsgt2X34H4/MzsD+z6e85xnj77Pvu6eM3v27G5fX2/y5MlSW1srDoejzfFhw4ZJTEyMLFy4UN5880356aef5N133+1wuy1NfmNjo9TW1kppaanY7XaXNyXfffedJCUlGV+RAQCgs2644Qax2WxSVFQksbGxIiKSmJgoZ8+eNRbsBgwYIDU1NcafqayslPPnz8vy5cvlqaeekj/++KPVdtua69esWePW3JnrAQC4OvHJOqCLRo8eLePHj5d169a1G+Pv7y8RERHtXjsmPDxcPv30U8nLy5PRo0fL2rVrZeHChVfc744dO8RisbR7F7S2hIaGyjXXXNPu+LvvvisxMTGSlJQkjz76qLz00ksSFBTU6e1fymKxSEREhNjt9jbHbTabrF27Vg4dOiRjxoyRt956S954440OtxsfHy/x8fFSXFwsn332mcTHx8u9997rEpObmytPP/10t/IGAPi24OBgmT59umRlZUlBQYE4nU5ZsmSJWK1WqaysFJGLC14ff/yxiIgcOHBAMjIyxGazSf/+/bs018+bN6/DfEJCQpjrmesBAD7Oopd/ph9AhzZv3ixZWVnidDqN67P0tpycHFm0aJGUl5d7/O6yZrZlyxaZNWuW7N+/v9MX1q6vr794p7iZ68Qa0L03LN50JDvV2ykAgIuzZ8/K4cOHJS4urtVNmIbM2ezRXLrzb2RjY6M899xzsmHDBunfv7/MmjVLPvnkEzl27JjU1tZKdXW1TJs2TQoLCyU6OlqWLVsmaWlpsnTpUnniiSfkyJEjEhcXJyUlJTJu3Lh293OlOrXMTUOHDpVDhw4x11/CF+d6AIA5uPO9V8vcdOrUqXY/pd6Cr8EC3ZCamiqVlZXy559/SkxMjEf2mZeXJ4sWLaJ5v8zp06clJyenV++ABwDovr7wHwzBwcGyZs0al6+pZmVlydKlS425/uuvv3b5M3V1dcbPQ4YMaXVNu+6aP38+c/1lmOsBAL6GGQ/oppkzZ3p0f+vXr/fo/hYtWiSLFi1qcywpKUm2bNni0Xza8/DDD3s7BQDAVcrTc72IyJQpUzy2L+Z6AADMicU6AG3KyMiQRx55pM0xLu4MAEDfx1wPAIA5sVgHoE3h4eESHh7u7TQAAEAvYa4HAMCcWKwD4LOcr6d0eGFPAADQdzHXAwD6Is/cxhIAAAAAAABAh1isAwAAgFs0Nzd7OwVToz4AAKAz+BosAAAAesRut4vVapVjx47JgAEDxG63i8Vi8XZapqGqcu7cOamtrRWr1Sp2u93bKQEAABNjsQ4AAAA9YrVaJS4uTqqqquTYsWPeTse0goKCJDY2VqxWvtwCAADax2IdAAAAesxut0tsbKw0NTXJhQsXvJ2O6fj5+Ym/vz+fOAQAAB1isQ4AAABuYbFYxGazic1m83YqAAAAfRafwQcAAAAAAABMgsU6AAAAAAAAwCRYrAMAAAAAAABMgmvWAfA5qioiIvX19V7OBACAi1rmpJY5Cj3DXA8AMJuuzPUs1gHwOX///beIiMTExHg5EwAAXDU0NEhISIi30+jzmOsBAGbVmbmexToAPic8PFxERI4ePcobonbU19dLTEyM/P777+JwOLydjilRo45Ro45Ro475So1UVRoaGiQ6OtrbqVwVmOu9w1f+vpoNdfc8au4dfb3uXZnrWawD4HOs1ouX6wwJCemT/8h7ksPhoEYdoEYdo0Ydo0Yd84UasajkPsz13uULf1/NiLp7HjX3jr5c987O9dxgAgAAAAAAADAJFusAAAAAAAAAk2CxDoDPCQgIkAULFkhAQIC3UzEtatQxatQxatQxatQxaoTu4LzxDuruHdTd86i5d/hS3S3K/eEBAAAAAAAAU+CTdQAAAAAAAIBJsFgHAAAAAAAAmASLdQAAAAAAAIBJsFgHAAAAAAAAmASLdQB8zvvvvy9DhgyRfv36SUJCguzZs8fbKbnFt99+K/fdd59ER0eLxWKRTZs2uYyrqsyfP18GDRokgYGBkpycLJWVlS4xJ06ckPT0dHE4HBIaGirTp0+XxsZGl5j9+/dLUlKS9OvXT2JiYmTJkiWtclm/fr2MGDFC+vXrJ6NHj5a8vDy3H29XLV68WG655Rbp37+/DBw4UB588EGpqKhwiTl79qxkZmbKtddeK8HBwfLQQw/J8ePHXWKOHj0qqampEhQUJAMHDpSsrCxpampyidmxY4eMHz9eAgICZNiwYbJ69epW+ZjxPFy5cqWMGTNGHA6HOBwOSUxMlC1bthjjvl6ftmRnZ4vFYpGZM2caz/l6nRYuXCgWi8XlMWLECGPc1+sDz+C1713u6DnQNe7qY9B57uiL0HPd7bX6PAUAH5Kbm6t2u10/+ugjPXDggD799NMaGhqqx48f93ZqPZaXl6evvvqqbtiwQUVEN27c6DKenZ2tISEhumnTJv3xxx/1/vvv17i4OD1z5owRM3nyZB07dqzu3r1bv/vuOx02bJimpaUZ46dOndLIyEhNT09Xp9Opa9eu1cDAQF21apURU1hYqH5+frpkyRItLy/XefPmqc1m07Kysl6vwZWkpKRoTk6OOp1OLS0t1XvvvVdjY2O1sbHRiMnIyNCYmBjdtm2b7tu3T2+77Ta9/fbbjfGmpiYdNWqUJicna0lJiebl5WlERITOnTvXiPn11181KChIX3zxRS0vL9cVK1aon5+fbt261Ygx63n45Zdf6ubNm/Wnn37SiooKfeWVV9Rms6nT6VRV6nO5PXv26JAhQ3TMmDH6wgsvGM/7ep0WLFigI0eO1KqqKuNRW1trjPt6fdD7eO17nzt6DnSNO/oYdE1P+yL0XHd7rasBi3UAfMqtt96qmZmZxu8XLlzQ6OhoXbx4sRezcr/LG+fm5maNiorSt99+23iurq5OAwICdO3ataqqWl5eriKie/fuNWK2bNmiFotF//zzT1VV/eCDDzQsLEz//fdfI2b27Nk6fPhw4/dHHnlEU1NTXfJJSEjQZ5991q3H2FM1NTUqIrpz505VvVgPm82m69evN2IOHjyoIqK7du1S1YtvTqxWq1ZXVxsxK1euVIfDYdTk5Zdf1pEjR7rsa+rUqZqSkmL83pfOw7CwMP3www+pz2UaGhr0xhtv1Pz8fP3f//5nNJDU6eJi3dixY9scoz7wBF57z+pOz4Ge604fg57rSl+EnulJr3U14GuwAHzGuXPnpLi4WJKTk43nrFarJCcny65du7yYWe87fPiwVFdXuxx7SEiIJCQkGMe+a9cuCQ0NlYkTJxoxycnJYrVapaioyIi56667xG63GzEpKSlSUVEhJ0+eNGIu3U9LjNlqfOrUKRERCQ8PFxGR4uJiOX/+vEvuI0aMkNjYWJcajR49WiIjI42YlJQUqa+vlwMHDhgxVzr+vnIeXrhwQXJzc+X06dOSmJhIfS6TmZkpqamprY6FOl1UWVkp0dHRMnToUElPT5ejR4+KCPVB7+O1977O9Bzoue70Mei+7vRF6Jme9FpXA39vJwAAnvLXX3/JhQsXXN4AiohERkbKoUOHvJSVZ1RXV4uItHnsLWPV1dUycOBAl3F/f38JDw93iYmLi2u1jZaxsLAwqa6uvuJ+zKC5uVlmzpwpd9xxh4waNUpELuZvt9slNDTUJfbyGrV1bC1jV4qpr6+XM2fOyMmTJ019HpaVlUliYqKcPXtWgoODZePGjXLzzTdLaWkp9flPbm6u/PDDD7J3795WY5xHIgkJCbJ69WoZPny4VFVVyeuvvy5JSUnidDqpD3qdL8/1ZtGZngM9090+Bl3Xk74I3dfTXutqwGIdAMDnZGZmitPplO+//97bqZjO8OHDpbS0VE6dOiWff/65PP7447Jz505vp2Uav//+u7zwwguSn58v/fr183Y6pnTPPfcYP48ZM0YSEhLk+uuvl3Xr1klgYKAXMwOAqwN9jOfQF3kevdZFfA0WgM+IiIgQPz+/VncKOn78uERFRXkpK89oOb4rHXtUVJTU1NS4jDc1NcmJEydcYtraxqX7aC/GLDWeMWOGfPXVV7J9+3a57rrrjOejoqLk3LlzUldX5xJ/eY26e/wOh0MCAwNNfx7a7XYZNmyYTJgwQRYvXixjx46VZcuWUZ//FBcXS01NjYwfP178/f3F399fdu7cKcuXLxd/f3+JjIykTpcJDQ2Vm266SX7++WfOI/Q6Xnvv60zPge7rSR+DrutJX4TucUevdTVgsQ6Az7Db7TJhwgTZtm2b8Vxzc7Ns27ZNEhMTvZhZ74uLi5OoqCiXY6+vr5eioiLj2BMTE6Wurk6Ki4uNmIKCAmlubpaEhAQj5ttvv5Xz588bMfn5+TJ8+HAJCwszYi7dT0uMt2usqjJjxgzZuHGjFBQUtPo674QJE8Rms7nkXlFRIUePHnWpUVlZmcuiZn5+vjgcDrn55puNmCsdf187D5ubm+Xff/+lPv+ZNGmSlJWVSWlpqfGYOHGipKenGz9TJ1eNjY3yyy+/yKBBgziP0Ot47b2vMz0Hus4dfQx6rit9EbrHHb3WVcHbd7gAAE/Kzc3VgIAAXb16tZaXl+szzzyjoaGhLncd7KsaGhq0pKRES0pKVET0vffe05KSEv3tt99UVTU7O1tDQ0P1iy++0P379+sDDzygcXFxeubMGWMbkydP1vj4eC0qKtLvv/9eb7zxRk1LSzPG6+rqNDIyUh977DF1Op2am5urQUFBumrVKiOmsLBQ/f399Z133tGDBw/qggUL1GazaVlZmeeK0YbnnntOQ0JCdMeOHVpVVWU8/vnnHyMmIyNDY2NjtaCgQPft26eJiYmamJhojDc1NemoUaP07rvv1tLSUt26dasOGDBA586da8T8+uuvGhQUpFlZWXrw4EF9//331c/PT7du3WrEmPU8nDNnju7cuVMPHz6s+/fv1zlz5qjFYtFvvvlGValPey69Q5kqdZo1a5bu2LFDDx8+rIWFhZqcnKwRERFaU1OjqtQHvY/Xvve5o+dA17ijj0HX9LQvgvt0tde6GrBYB8DnrFixQmNjY9Vut+utt96qu3fv9nZKbrF9+3YVkVaPxx9/XFVVm5ub9bXXXtPIyEgNCAjQSZMmaUVFhcs2/v77b01LS9Pg4GB1OBw6bdo0bWhocIn58ccf9c4779SAgAAdPHiwZmdnt8pl3bp1etNNN6ndbteRI0fq5s2be+24O6ut2oiI5uTkGDFnzpzR559/XsPCwjQoKEinTJmiVVVVLts5cuSI3nPPPRoYGKgRERE6a9YsPX/+vEvM9u3bddy4cWq323Xo0KEu+2hhxvPwySef1Ouvv17tdrsOGDBAJ02aZDSkqtSnPZc3kL5ep6lTp+qgQYPUbrfr4MGDderUqfrzzz8b475eH3gGr33vckfPga5xVx+DznNHXwT36E6v1ddZVFU99zk+AAAAAAAAAO3hmnUAAAAAAACASbBYBwAAAAAAAJgEi3UAAAAAAACASbBYBwAAAAAAAJgEi3UAAAAAAACASbBYBwAAAAAAAJgEi3UAAAAAAACASbBYBwAAAAAAAJgEi3UAAAAAAACASbBYBwAAAAAAAJgEi3UAAAAAAACASbBYBwAAAAAAAJjE/wHfgF7VDkc67gAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1510,7 +1508,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 31, "id": "4cbc2fa0", "metadata": {}, "outputs": [ @@ -1535,8 +1533,8 @@ " \n", " \n", " \n", - " 541\n", - " 564\n", + " 11\n", + " 2\n", " \n", " \n", " \n", @@ -1547,23 +1545,23 @@ " \n", " \n", " pid\n", - " 32438\n", - " 32438\n", + " 50840\n", + " 50840\n", " \n", " \n", " tid\n", - " 32438\n", - " 32438\n", + " 50840\n", + " 50840\n", " \n", " \n", " dur\n", - " 27614\n", - " 10836\n", + " 3549\n", + " 3437\n", " \n", " \n", " ts\n", - " 85208\n", - " 116118\n", + " 10439\n", + " 2343\n", " \n", " \n", " ph\n", @@ -1572,18 +1570,8 @@ " \n", " \n", " name\n", - " Ma_MatMul1/MatMulAddFusion/_kernel_time\n", - " Ma_MatMul1/MatMulAddFusion/_kernel_time\n", - " \n", - " \n", - " args_op_name\n", - " Gemm\n", - " Gemm\n", - " \n", - " \n", - " op_name\n", - " Ma_MatMul1/MatMulAddFusion/\n", - " Ma_MatMul1/MatMulAddFusion/\n", + " Ma_MatMul/MatMulAddFusion_kernel_time\n", + " Ma_MatMul/MatMulAddFusion_kernel_time\n", " \n", " \n", " args_thread_scheduling_stats\n", @@ -1592,23 +1580,23 @@ " \n", " \n", " args_output_size\n", - " 2560000\n", - " 2560000\n", + " 2540000\n", + " 2540000\n", " \n", " \n", " args_parameter_size\n", - " 512\n", - " 512\n", + " 508\n", + " 508\n", " \n", " \n", " args_activation_size\n", - " 2540000\n", - " 2540000\n", + " 200000\n", + " 200000\n", " \n", " \n", " args_node_index\n", - " 12\n", - " 12\n", + " 11\n", + " 11\n", " \n", " \n", " args_provider\n", @@ -1616,67 +1604,77 @@ " CPUExecutionProvider\n", " \n", " \n", + " args_op_name\n", + " Gemm\n", + " Gemm\n", + " \n", + " \n", + " op_name\n", + " Ma_MatMul/MatMulAddFusion\n", + " Ma_MatMul/MatMulAddFusion\n", + " \n", + " \n", " event_name\n", " kernel_time\n", " kernel_time\n", " \n", " \n", " iteration\n", - " 22\n", - " 23\n", + " 0\n", + " -1\n", " \n", " \n", " it==0\n", - " 0\n", - " 0\n", + " 1\n", + " 1\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 541 \\\n", + " 11 \\\n", "cat Node \n", - "pid 32438 \n", - "tid 32438 \n", - "dur 27614 \n", - "ts 85208 \n", + "pid 50840 \n", + "tid 50840 \n", + "dur 3549 \n", + "ts 10439 \n", "ph X \n", - "name Ma_MatMul1/MatMulAddFusion/_kernel_time \n", - "args_op_name Gemm \n", - "op_name Ma_MatMul1/MatMulAddFusion/ \n", + "name Ma_MatMul/MatMulAddFusion_kernel_time \n", "args_thread_scheduling_stats {'main_thread': {'thread_pool_name': 'session-... \n", - "args_output_size 2560000 \n", - "args_parameter_size 512 \n", - "args_activation_size 2540000 \n", - "args_node_index 12 \n", + "args_output_size 2540000 \n", + "args_parameter_size 508 \n", + "args_activation_size 200000 \n", + "args_node_index 11 \n", "args_provider CPUExecutionProvider \n", + "args_op_name Gemm \n", + "op_name Ma_MatMul/MatMulAddFusion \n", "event_name kernel_time \n", - "iteration 22 \n", - "it==0 0 \n", + "iteration 0 \n", + "it==0 1 \n", "\n", - " 564 \n", + " 2 \n", "cat Node \n", - "pid 32438 \n", - "tid 32438 \n", - "dur 10836 \n", - "ts 116118 \n", + "pid 50840 \n", + "tid 50840 \n", + "dur 3437 \n", + "ts 2343 \n", "ph X \n", - "name Ma_MatMul1/MatMulAddFusion/_kernel_time \n", - "args_op_name Gemm \n", - "op_name Ma_MatMul1/MatMulAddFusion/ \n", + "name Ma_MatMul/MatMulAddFusion_kernel_time \n", "args_thread_scheduling_stats {'main_thread': {'thread_pool_name': 'session-... \n", - "args_output_size 2560000 \n", - "args_parameter_size 512 \n", - "args_activation_size 2540000 \n", - "args_node_index 12 \n", + "args_output_size 2540000 \n", + "args_parameter_size 508 \n", + "args_activation_size 200000 \n", + "args_node_index 11 \n", "args_provider CPUExecutionProvider \n", + "args_op_name Gemm \n", + "op_name Ma_MatMul/MatMulAddFusion \n", "event_name kernel_time \n", - "iteration 23 \n", - "it==0 0 " + "iteration -1 \n", + "it==0 1 " ] }, - "execution_count": 79, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1697,7 +1695,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 32, "id": "de43df2f", "metadata": {}, "outputs": [ @@ -1733,54 +1731,56 @@ " \n", " \n", " \n", - " Sigmoid\n", - " Si_Sigmoid1\n", - " 0.033348\n", + " Mul\n", + " Mu_Mul1\n", + " 0.054147\n", " \n", " \n", - " Si_Sigmoid\n", - " 0.034335\n", + " Sigmoid\n", + " Si_Sigmoid1\n", + " 0.058972\n", " \n", " \n", - " Mul\n", + " Mul\n", " Mu_Mul\n", - " 0.050846\n", + " 0.061785\n", " \n", " \n", - " Mu_Mul1\n", - " 0.062528\n", + " Sigmoid\n", + " Si_Sigmoid\n", + " 0.063396\n", " \n", " \n", " MatMul\n", " Ma_MatMul2\n", - " 0.062572\n", + " 0.067053\n", " \n", " \n", " Gemm\n", - " Ma_MatMul/MatMulAddFusion/\n", - " 0.105980\n", + " Ma_MatMul/MatMulAddFusion\n", + " 0.234326\n", " \n", " \n", - " Ma_MatMul1/MatMulAddFusion/\n", - " 0.650391\n", + " Ma_MatMul1/MatMulAddFusion\n", + " 0.460321\n", " \n", " \n", "\n", "" ], "text/plain": [ - " dur\n", - "args_op_name name \n", - "Sigmoid Si_Sigmoid1 0.033348\n", - " Si_Sigmoid 0.034335\n", - "Mul Mu_Mul 0.050846\n", - " Mu_Mul1 0.062528\n", - "MatMul Ma_MatMul2 0.062572\n", - "Gemm Ma_MatMul/MatMulAddFusion/ 0.105980\n", - " Ma_MatMul1/MatMulAddFusion/ 0.650391" + " dur\n", + "args_op_name name \n", + "Mul Mu_Mul1 0.054147\n", + "Sigmoid Si_Sigmoid1 0.058972\n", + "Mul Mu_Mul 0.061785\n", + "Sigmoid Si_Sigmoid 0.063396\n", + "MatMul Ma_MatMul2 0.067053\n", + "Gemm Ma_MatMul/MatMulAddFusion 0.234326\n", + " Ma_MatMul1/MatMulAddFusion 0.460321" ] }, - "execution_count": 80, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1791,17 +1791,17 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 33, "id": "0e5c02ec", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "np.float64(0.6503907600802269)" + "np.float64(0.46032090561501343)" ] }, - "execution_count": 81, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1821,17 +1821,17 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 34, "id": "fa7950bc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "np.float64(1.5142817622242202)" + "np.float64(2.167646886948391)" ] }, - "execution_count": 82, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1861,17 +1861,17 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 36, "id": "3b3aa43b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(np.float64(2.817548150346738e-08), np.float64(4.224119546935093e-09))" + "(np.float64(2.7422816128996885e-08), np.float64(3.844877509922521e-09))" ] }, - "execution_count": 85, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1896,7 +1896,7 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 37, "id": "605df039", "metadata": {}, "outputs": [ @@ -1904,7 +1904,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "872 μs ± 66.6 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "526 μs ± 41.2 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -1922,7 +1922,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 53, "id": "e77ff4f0", "metadata": {}, "outputs": [ @@ -1932,15 +1932,15 @@ "True" ] }, - "execution_count": 87, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from torch.nn import Module\n", + "import torch\n", "\n", - "isinstance(model.model, Module)" + "isinstance(model.model, torch.nn.Module)" ] }, { @@ -1953,10 +1953,19 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 58, "id": "3c875b35", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_50840/2369393440.py:4: DeprecationWarning: You are using the legacy TorchScript-based ONNX export. Starting in PyTorch 2.9, the new torch.export-based ONNX exporter has become the default. Learn more about the new export logic: https://docs.pytorch.org/docs/stable/onnx_export.html. For exporting control flow: https://pytorch.org/tutorials/beginner/onnx/export_control_flow_model_to_onnx_tutorial.html\n", + " torch.onnx.export(\n" + ] + } + ], "source": [ "import torch.onnx\n", "\n", @@ -1969,12 +1978,13 @@ " input_names=[\"X\"],\n", " output_names=[\"variable\"],\n", " dynamic_axes={\"X\": {0: \"batch_size\"}, \"variable\": {0: \"batch_size\"}},\n", + " dynamo=False,\n", ")" ] }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 59, "id": "b8c41c5e", "metadata": {}, "outputs": [], @@ -1986,7 +1996,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 60, "id": "861a94d0", "metadata": { "scrolled": false @@ -1998,22 +2008,22 @@ "text": [ "opset: domain='' version=15\n", "input: name='X' type=dtype('float32') shape=['batch_size', 10]\n", - "init: name='_operators.0.root_nodes' type=dtype('int64') shape=(1,) -- array([8])\n", - "init: name='_operators.0.root_biases' type=dtype('float32') shape=(1,) -- array([-0.00267735], dtype=float32)\n", - "init: name='_operators.0.tree_indices' type=dtype('int64') shape=(1,) -- array([0])\n", - "init: name='_operators.0.leaf_nodes' type=dtype('float32') shape=(128, 1)\n", - "init: name='_operators.0.nodes.0' type=dtype('int64') shape=(2,) -- array([3, 4])\n", - "init: name='_operators.0.nodes.1' type=dtype('int64') shape=(4,) -- array([4, 9, 0, 5])\n", - "init: name='_operators.0.nodes.2' type=dtype('int64') shape=(8,)\n", - "init: name='_operators.0.nodes.3' type=dtype('int64') shape=(16,)\n", - "init: name='_operators.0.nodes.4' type=dtype('int64') shape=(32,)\n", - "init: name='_operators.0.nodes.5' type=dtype('int64') shape=(64,)\n", - "init: name='_operators.0.biases.0' type=dtype('float32') shape=(2,) -- array([-0.09563538, -0.16326863], dtype=float32)\n", - "init: name='_operators.0.biases.1' type=dtype('float32') shape=(4,) -- array([-0.25053233, 0.6288608 , -0.48234493, -0.3351562 ], dtype=float32)\n", - "init: name='_operators.0.biases.2' type=dtype('float32') shape=(8,)\n", - "init: name='_operators.0.biases.3' type=dtype('float32') shape=(16,)\n", - "init: name='_operators.0.biases.4' type=dtype('float32') shape=(32,)\n", - "init: name='_operators.0.biases.5' type=dtype('float32') shape=(64,)\n", + "init: name='_operators.0.root_nodes' type=int64 shape=(1,) -- array([3])\n", + "init: name='_operators.0.root_biases' type=float32 shape=(1,) -- array([0.123061], dtype=float32)\n", + "init: name='_operators.0.tree_indices' type=int64 shape=(1,) -- array([0])\n", + "init: name='_operators.0.leaf_nodes' type=float32 shape=(128, 1)\n", + "init: name='_operators.0.nodes.0' type=int64 shape=(2,) -- array([2, 4])\n", + "init: name='_operators.0.nodes.1' type=int64 shape=(4,) -- array([5, 8, 1, 0])\n", + "init: name='_operators.0.nodes.2' type=int64 shape=(8,)\n", + "init: name='_operators.0.nodes.3' type=int64 shape=(16,)\n", + "init: name='_operators.0.nodes.4' type=int64 shape=(32,)\n", + "init: name='_operators.0.nodes.5' type=int64 shape=(64,)\n", + "init: name='_operators.0.biases.0' type=float32 shape=(2,) -- array([-0.00307798, -0.19721702], dtype=float32)\n", + "init: name='_operators.0.biases.1' type=float32 shape=(4,) -- array([ 0.04036466, -0.18311241, 0.2513926 , -0.7457566 ], dtype=float32)\n", + "init: name='_operators.0.biases.2' type=float32 shape=(8,)\n", + "init: name='_operators.0.biases.3' type=float32 shape=(16,)\n", + "init: name='_operators.0.biases.4' type=float32 shape=(32,)\n", + "init: name='_operators.0.biases.5' type=float32 shape=(64,)\n", "Constant(value=[-1]) -> /_operators.0/Constant_output_0\n", "Gather(X, _operators.0.root_nodes, axis=1) -> /_operators.0/Gather_output_0\n", " LessOrEqual(/_operators.0/Gather_output_0, _operators.0.root_biases) -> /_operators.0/LessOrEqual_output_0\n", @@ -2105,6 +2115,1104 @@ "print(onnx_simple_text_plot(onxh, raise_exc=False))" ] }, + { + "cell_type": "code", + "execution_count": 74, + "id": "6ecbffca", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "I_0\n", + "\n", + "X\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "Gather_8\n", + "\n", + "Gather(., [3], axis=1)\n", + "\n", + "\n", + "\n", + "I_0->Gather_8\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "GatherElements_15\n", + "\n", + "GatherElements(., ., axis=1)\n", + "\n", + "\n", + "\n", + "I_0->GatherElements_15\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "GatherElements_24\n", + "\n", + "GatherElements(., ., axis=1)\n", + "\n", + "\n", + "\n", + "I_0->GatherElements_24\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "GatherElements_33\n", + "\n", + "GatherElements(., ., axis=1)\n", + "\n", + "\n", + "\n", + "I_0->GatherElements_33\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "GatherElements_42\n", + "\n", + "GatherElements(., ., axis=1)\n", + "\n", + "\n", + "\n", + "I_0->GatherElements_42\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "GatherElements_51\n", + "\n", + "GatherElements(., ., axis=1)\n", + "\n", + "\n", + "\n", + "I_0->GatherElements_51\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "GatherElements_60\n", + "\n", + "GatherElements(., ., axis=1)\n", + "\n", + "\n", + "\n", + "I_0->GatherElements_60\n", + "\n", + "\n", + "FLOAT(batch_size,10)\n", + "\n", + "\n", + "\n", + "i_1\n", + "\n", + "_operators.0.leaf_nodes\n", + "FLOAT(128, 1)\n", + "\n", + "\n", + "\n", + "Gather_67\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_1->Gather_67\n", + "\n", + "\n", + "FLOAT(128, 1)\n", + "\n", + "\n", + "\n", + "i_2\n", + "\n", + "_operators.0.nodes.3\n", + "INT64(16)\n", + "\n", + "\n", + "\n", + "Gather_40\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_2->Gather_40\n", + "\n", + "\n", + "INT64(16)\n", + "\n", + "\n", + "\n", + "i_3\n", + "\n", + "_operators.0.nodes.4\n", + "INT64(32)\n", + "\n", + "\n", + "\n", + "Gather_49\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_3->Gather_49\n", + "\n", + "\n", + "INT64(32)\n", + "\n", + "\n", + "\n", + "i_4\n", + "\n", + "_operators.0.nodes.5\n", + "INT64(64)\n", + "\n", + "\n", + "\n", + "Gather_58\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_4->Gather_58\n", + "\n", + "\n", + "INT64(64)\n", + "\n", + "\n", + "\n", + "i_5\n", + "\n", + "_operators.0.biases.3\n", + "FLOAT(16)\n", + "\n", + "\n", + "\n", + "Gather_45\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_5->Gather_45\n", + "\n", + "\n", + "FLOAT(16)\n", + "\n", + "\n", + "\n", + "i_6\n", + "\n", + "_operators.0.biases.4\n", + "FLOAT(32)\n", + "\n", + "\n", + "\n", + "Gather_54\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_6->Gather_54\n", + "\n", + "\n", + "FLOAT(32)\n", + "\n", + "\n", + "\n", + "i_7\n", + "\n", + "_operators.0.biases.5\n", + "FLOAT(64)\n", + "\n", + "\n", + "\n", + "Gather_63\n", + "\n", + "Gather(., ., axis=0)\n", + "\n", + "\n", + "\n", + "i_7->Gather_63\n", + "\n", + "\n", + "FLOAT(64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_9\n", + "\n", + "LessOrEqual(., [0.123061])\n", + "\n", + "\n", + "\n", + "Gather_8->LessOrEqual_9\n", + "\n", + "\n", + "FLOAT(batch_size,1)\n", + "\n", + "\n", + "\n", + "Cast_10\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_9->Cast_10\n", + "\n", + "\n", + "BOOL(batch_size,1)\n", + "\n", + "\n", + "\n", + "Add_11\n", + "\n", + "Add(., [0])\n", + "\n", + "\n", + "\n", + "Cast_10->Add_11\n", + "\n", + "\n", + "INT64(batch_size,1)\n", + "\n", + "\n", + "\n", + "Reshape_12\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "Add_11->Reshape_12\n", + "\n", + "\n", + "INT64(batch_size,1)\n", + "\n", + "\n", + "\n", + "Gather_13\n", + "\n", + "Gather([2, 4], ., axis=0)\n", + "\n", + "\n", + "\n", + "Reshape_12->Gather_13\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Mul_17\n", + "\n", + "Mul(., 2)\n", + "\n", + "\n", + "\n", + "Reshape_12->Mul_17\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_18\n", + "\n", + "Gather\n", + "([-0.0030779822, -0.19721702], ., axis=0)\n", + "\n", + "\n", + "\n", + "Reshape_12->Gather_18\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_14\n", + "\n", + "Reshape(., [-1, 1])\n", + "\n", + "\n", + "\n", + "Gather_13->Reshape_14\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_14->GatherElements_15\n", + "\n", + "\n", + "INT64(?,1)\n", + "\n", + "\n", + "\n", + "Reshape_16\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "GatherElements_15->Reshape_16\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "LessOrEqual_19\n", + "\n", + "LessOrEqual(., .)\n", + "\n", + "\n", + "\n", + "Reshape_16->LessOrEqual_19\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Add_21\n", + "\n", + "Add(., .)\n", + "\n", + "\n", + "\n", + "Mul_17->Add_21\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_18->LessOrEqual_19\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Cast_20\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_19->Cast_20\n", + "\n", + "\n", + "BOOL(?)\n", + "\n", + "\n", + "\n", + "Cast_20->Add_21\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_22\n", + "\n", + "Gather([5, 8, 1, 0], ., axis=0)\n", + "\n", + "\n", + "\n", + "Add_21->Gather_22\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Mul_26\n", + "\n", + "Mul(., 2)\n", + "\n", + "\n", + "\n", + "Add_21->Mul_26\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_27\n", + "\n", + "Gather\n", + "([0.040364657, -0.18311241, 0.2513926, -0.7457566], ., axis=0)\n", + "\n", + "\n", + "\n", + "Add_21->Gather_27\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_23\n", + "\n", + "Reshape(., [-1, 1])\n", + "\n", + "\n", + "\n", + "Gather_22->Reshape_23\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_23->GatherElements_24\n", + "\n", + "\n", + "INT64(?,1)\n", + "\n", + "\n", + "\n", + "Reshape_25\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "GatherElements_24->Reshape_25\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "LessOrEqual_28\n", + "\n", + "LessOrEqual(., .)\n", + "\n", + "\n", + "\n", + "Reshape_25->LessOrEqual_28\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Add_30\n", + "\n", + "Add(., .)\n", + "\n", + "\n", + "\n", + "Mul_26->Add_30\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_27->LessOrEqual_28\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Cast_29\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_28->Cast_29\n", + "\n", + "\n", + "BOOL(?)\n", + "\n", + "\n", + "\n", + "Cast_29->Add_30\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_31\n", + "\n", + "Gather\n", + "([6, 1, 1, 5, 0, 7, 9, 8], ., axis=0)\n", + "\n", + "\n", + "\n", + "Add_30->Gather_31\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Mul_35\n", + "\n", + "Mul(., 2)\n", + "\n", + "\n", + "\n", + "Add_30->Mul_35\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_36\n", + "\n", + "Gather\n", + "([-0.38214105, 0.028844688, 0.30779052, -0.5173236, -0.4752456, -0.3372159, -0.43787128, -0.31271878], ., axis=0)\n", + "\n", + "\n", + "\n", + "Add_30->Gather_36\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_32\n", + "\n", + "Reshape(., [-1, 1])\n", + "\n", + "\n", + "\n", + "Gather_31->Reshape_32\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_32->GatherElements_33\n", + "\n", + "\n", + "INT64(?,1)\n", + "\n", + "\n", + "\n", + "Reshape_34\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "GatherElements_33->Reshape_34\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "LessOrEqual_37\n", + "\n", + "LessOrEqual(., .)\n", + "\n", + "\n", + "\n", + "Reshape_34->LessOrEqual_37\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Add_39\n", + "\n", + "Add(., .)\n", + "\n", + "\n", + "\n", + "Mul_35->Add_39\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_36->LessOrEqual_37\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Cast_38\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_37->Cast_38\n", + "\n", + "\n", + "BOOL(?)\n", + "\n", + "\n", + "\n", + "Cast_38->Add_39\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_39->Gather_40\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Mul_44\n", + "\n", + "Mul(., 2)\n", + "\n", + "\n", + "\n", + "Add_39->Mul_44\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_39->Gather_45\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_41\n", + "\n", + "Reshape(., [-1, 1])\n", + "\n", + "\n", + "\n", + "Gather_40->Reshape_41\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_41->GatherElements_42\n", + "\n", + "\n", + "INT64(?,1)\n", + "\n", + "\n", + "\n", + "Reshape_43\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "GatherElements_42->Reshape_43\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "LessOrEqual_46\n", + "\n", + "LessOrEqual(., .)\n", + "\n", + "\n", + "\n", + "Reshape_43->LessOrEqual_46\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Add_48\n", + "\n", + "Add(., .)\n", + "\n", + "\n", + "\n", + "Mul_44->Add_48\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_45->LessOrEqual_46\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Cast_47\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_46->Cast_47\n", + "\n", + "\n", + "BOOL(?)\n", + "\n", + "\n", + "\n", + "Cast_47->Add_48\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_48->Gather_49\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Mul_53\n", + "\n", + "Mul(., 2)\n", + "\n", + "\n", + "\n", + "Add_48->Mul_53\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_48->Gather_54\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_50\n", + "\n", + "Reshape(., [-1, 1])\n", + "\n", + "\n", + "\n", + "Gather_49->Reshape_50\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_50->GatherElements_51\n", + "\n", + "\n", + "INT64(?,1)\n", + "\n", + "\n", + "\n", + "Reshape_52\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "GatherElements_51->Reshape_52\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "LessOrEqual_55\n", + "\n", + "LessOrEqual(., .)\n", + "\n", + "\n", + "\n", + "Reshape_52->LessOrEqual_55\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Add_57\n", + "\n", + "Add(., .)\n", + "\n", + "\n", + "\n", + "Mul_53->Add_57\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_54->LessOrEqual_55\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Cast_56\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_55->Cast_56\n", + "\n", + "\n", + "BOOL(?)\n", + "\n", + "\n", + "\n", + "Cast_56->Add_57\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_57->Gather_58\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Mul_62\n", + "\n", + "Mul(., 2)\n", + "\n", + "\n", + "\n", + "Add_57->Mul_62\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_57->Gather_63\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_59\n", + "\n", + "Reshape(., [-1, 1])\n", + "\n", + "\n", + "\n", + "Gather_58->Reshape_59\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_59->GatherElements_60\n", + "\n", + "\n", + "INT64(?,1)\n", + "\n", + "\n", + "\n", + "Reshape_61\n", + "\n", + "Reshape(., [-1])\n", + "\n", + "\n", + "\n", + "GatherElements_60->Reshape_61\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "LessOrEqual_64\n", + "\n", + "LessOrEqual(., .)\n", + "\n", + "\n", + "\n", + "Reshape_61->LessOrEqual_64\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Add_66\n", + "\n", + "Add(., .)\n", + "\n", + "\n", + "\n", + "Mul_62->Add_66\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Gather_63->LessOrEqual_64\n", + "\n", + "\n", + "FLOAT(?)\n", + "\n", + "\n", + "\n", + "Cast_65\n", + "\n", + "Cast(., to=INT64)\n", + "\n", + "\n", + "\n", + "LessOrEqual_64->Cast_65\n", + "\n", + "\n", + "BOOL(?)\n", + "\n", + "\n", + "\n", + "Cast_65->Add_66\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Add_66->Gather_67\n", + "\n", + "\n", + "INT64(?)\n", + "\n", + "\n", + "\n", + "Reshape_68\n", + "\n", + "Reshape(., [-1, 1, 1])\n", + "\n", + "\n", + "\n", + "Gather_67->Reshape_68\n", + "\n", + "\n", + "FLOAT(?,1)\n", + "\n", + "\n", + "\n", + "ReduceSum_69\n", + "\n", + "ReduceSum(., [1])\n", + "\n", + "\n", + "\n", + "Reshape_68->ReduceSum_69\n", + "\n", + "\n", + "FLOAT(?,1,1)\n", + "\n", + "\n", + "\n", + "O_70\n", + "\n", + "variable\n", + "FLOAT(batch_size,1)\n", + "\n", + "\n", + "\n", + "ReduceSum_69->O_70\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from onnx_diagnostic.helpers.dot_helper import to_dot\n", + "import graphviz\n", + "\n", + "dot = to_dot(onxh)\n", + "\n", + "with open(\"dump_model.dot\", \"w\") as f:\n", + " f.write(dot)\n", + "graph = graphviz.Source.from_file(\"dump_model.dot\")\n", + "graph" + ] + }, { "cell_type": "markdown", "id": "1edb6177", @@ -2115,17 +3223,17 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 75, "id": "2220ca2e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "np.float64(1.4748302929273112)" + "np.float64(1.7091389654766018)" ] }, - "execution_count": 93, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } @@ -2148,7 +3256,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 76, "id": "fd13b28b", "metadata": {}, "outputs": [ @@ -2156,7 +3264,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.67 ms ± 17.8 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "1.02 ms ± 34.1 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -2184,7 +3292,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 77, "id": "96abfddb", "metadata": {}, "outputs": [], @@ -2196,17 +3304,17 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 78, "id": "94dc4d66", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(np.float64(1.3105977468247925), np.float64(0.21366120021158772))" + "(np.float64(1.1582154970123497), np.float64(0.21548286223135504))" ] }, - "execution_count": 96, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -2226,7 +3334,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 79, "id": "a50b3384", "metadata": { "scrolled": false @@ -2236,25 +3344,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "0/10: loss: 2.76 lr=0.0001 max(coef): 6.5 l1=0/1.5e+03 l2=0/2.5e+03\n", - "1/10: loss: 2.242 lr=9.95e-06 max(coef): 6.5 l1=8.4e+02/1.5e+03 l2=3.3e+02/2.5e+03\n", - "2/10: loss: 2.165 lr=7.05e-06 max(coef): 6.5 l1=1.7e+03/1.5e+03 l2=2e+03/2.5e+03\n", - "3/10: loss: 2.135 lr=5.76e-06 max(coef): 6.5 l1=2.6e+02/1.5e+03 l2=88/2.5e+03\n", - "4/10: loss: 2.119 lr=4.99e-06 max(coef): 6.5 l1=4.7e+02/1.5e+03 l2=2.9e+02/2.5e+03\n", - "5/10: loss: 2.106 lr=4.47e-06 max(coef): 6.5 l1=1.6e+02/1.5e+03 l2=23/2.5e+03\n", - "6/10: loss: 2.098 lr=4.08e-06 max(coef): 6.5 l1=1.9e+03/1.5e+03 l2=3.5e+03/2.5e+03\n", - "7/10: loss: 2.086 lr=3.78e-06 max(coef): 6.5 l1=9.9e+02/1.5e+03 l2=9.4e+02/2.5e+03\n", - "8/10: loss: 2.072 lr=3.53e-06 max(coef): 6.5 l1=54/1.5e+03 l2=1.9/2.5e+03\n", - "9/10: loss: 2.063 lr=3.33e-06 max(coef): 6.5 l1=6.4e+02/1.5e+03 l2=1.9e+02/2.5e+03\n", - "10/10: loss: 2.054 lr=3.16e-06 max(coef): 6.5 l1=1.2e+03/1.5e+03 l2=6.4e+02/2.5e+03\n" + "0/10: loss: 2.025 lr=0.0001 max(coef): 6.5 l1=0/1.5e+03 l2=0/2.5e+03\n", + "1/10: loss: 2.03 lr=9.95e-06 max(coef): 6.5 l1=4e+02/1.5e+03 l2=67/2.5e+03\n", + "2/10: loss: 2.019 lr=7.05e-06 max(coef): 6.5 l1=7.6e+02/1.5e+03 l2=2.8e+02/2.5e+03\n", + "3/10: loss: 2.014 lr=5.76e-06 max(coef): 6.5 l1=2.3e+02/1.5e+03 l2=39/2.5e+03\n", + "4/10: loss: 2.013 lr=4.99e-06 max(coef): 6.5 l1=2.3e+03/1.5e+03 l2=4.5e+03/2.5e+03\n", + "5/10: loss: 2.01 lr=4.47e-06 max(coef): 6.5 l1=7.1e+02/1.5e+03 l2=1.6e+02/2.5e+03\n", + "6/10: loss: 2.007 lr=4.08e-06 max(coef): 6.5 l1=7.1e+02/1.5e+03 l2=2e+02/2.5e+03\n", + "7/10: loss: 2.005 lr=3.78e-06 max(coef): 6.5 l1=1.1e+03/1.5e+03 l2=5.9e+02/2.5e+03\n", + "8/10: loss: 2 lr=3.53e-06 max(coef): 6.5 l1=7.1e+02/1.5e+03 l2=2e+02/2.5e+03\n", + "9/10: loss: 1.997 lr=3.33e-06 max(coef): 6.5 l1=9.3e+02/1.5e+03 l2=8.5e+02/2.5e+03\n", + "10/10: loss: 1.994 lr=3.16e-06 max(coef): 6.5 l1=2e+03/1.5e+03 l2=5.1e+03/2.5e+03\n" ] }, { "data": { "text/html": [ - "
NeuralTreeNetRegressor(estimator=None, lr=0.0001, max_iter=10, verbose=1)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + "\n", + ".estimator-table summary {\n", + " padding: .5rem;\n", + " font-family: monospace;\n", + " cursor: pointer;\n", + "}\n", + "\n", + ".estimator-table details[open] {\n", + " padding-left: 0.1rem;\n", + " padding-right: 0.1rem;\n", + " padding-bottom: 0.3rem;\n", + "}\n", + "\n", + ".estimator-table .parameters-table {\n", + " margin-left: auto !important;\n", + " margin-right: auto !important;\n", + "}\n", + "\n", + ".estimator-table .parameters-table tr:nth-child(odd) {\n", + " background-color: #fff;\n", + "}\n", + "\n", + ".estimator-table .parameters-table tr:nth-child(even) {\n", + " background-color: #f6f6f6;\n", + "}\n", + "\n", + ".estimator-table .parameters-table tr:hover {\n", + " background-color: #e0e0e0;\n", + "}\n", + "\n", + ".estimator-table table td {\n", + " border: 1px solid rgba(106, 105, 104, 0.232);\n", + "}\n", + "\n", + ".user-set td {\n", + " color:rgb(255, 94, 0);\n", + " text-align: left;\n", + "}\n", + "\n", + ".user-set td.value pre {\n", + " color:rgb(255, 94, 0) !important;\n", + " background-color: transparent !important;\n", + "}\n", + "\n", + ".default td {\n", + " color: black;\n", + " text-align: left;\n", + "}\n", + "\n", + ".user-set td i,\n", + ".default td i {\n", + " color: black;\n", + "}\n", + "\n", + ".copy-paste-icon {\n", + " background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n", + " background-repeat: no-repeat;\n", + " background-size: 14px 14px;\n", + " background-position: 0;\n", + " display: inline-block;\n", + " width: 14px;\n", + " height: 14px;\n", + " cursor: pointer;\n", + "}\n", + "
NeuralTreeNetRegressor(estimator=None, lr=0.0001, max_iter=10, verbose=1)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "NeuralTreeNetRegressor(estimator=None, lr=0.0001, max_iter=10, verbose=1)" ] }, - "execution_count": 97, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } @@ -2673,17 +4006,17 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 80, "id": "c3ae49b2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(np.float64(1.324478311165207), np.float64(0.22581473935951998))" + "(np.float64(1.2809916184057408), np.float64(0.22175907540246548))" ] }, - "execution_count": 98, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } @@ -2703,16 +4036,24 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "id": "6cfe39bd", "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22587d4f", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "this312", "language": "python", "name": "python3" }, @@ -2726,7 +4067,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.12.3" } }, "nbformat": 4, From 5ec203c9971af202b7100ac79b38c9c8e43b5268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 4 Dec 2025 13:30:25 +0100 Subject: [PATCH 8/8] fix --- _doc/conf.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/_doc/conf.py b/_doc/conf.py index 2ea8b9ec..61c0ab4d 100644 --- a/_doc/conf.py +++ b/_doc/conf.py @@ -72,7 +72,7 @@ """ # The following is used by sphinx.ext.linkcode to provide links to github -linkcode_resolve = make_linkcode_resolve( +_linkcode_resolve = make_linkcode_resolve( "mlstatpy", ( "https://github.com/sdpython/mlstatpy/" @@ -81,6 +81,11 @@ ), ) + +def linkcode_resolve(domain, info): + return _linkcode_resolve(domain, info) + + latex_elements = { "papersize": "a4", "pointsize": "10pt",