From ee5c37814dd1d8901e0ce7a1843e413e91c88831 Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Tue, 26 Sep 2023 08:35:35 -0400 Subject: [PATCH 01/18] Fix/check url validity (#57) --- .github/workflows/ci_cd.yml | 6 ++--- .github/workflows/nightly.yml | 6 ++--- codegen/pyadritem.txt | 2 +- pyproject.toml | 22 +++++++++---------- .../core/utils/report_remote_server.py | 13 +++++++++-- 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 7981a448..aef5cd89 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -76,10 +76,10 @@ jobs: python-version: [ '3.8', '3.9', '3.10', '3.11' ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -184,7 +184,7 @@ jobs: needs: [ style, test, docs-style ] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Microsoft Teams Notification uses: jdcargile/ms-teams-notification@v1.3 with: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b9f83559..dd4a12e1 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -50,12 +50,12 @@ jobs: python-version: [ '3.8', '3.9', '3.10', '3.11' ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: 'refs/heads/main' - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -102,7 +102,7 @@ jobs: needs: [ nightly_test, nightly_and_upload] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Microsoft Teams Notification uses: jdcargile/ms-teams-notification@v1.3 with: diff --git a/codegen/pyadritem.txt b/codegen/pyadritem.txt index 82d5559d..890bf488 100644 --- a/codegen/pyadritem.txt +++ b/codegen/pyadritem.txt @@ -95,7 +95,7 @@ class Item: self.item_image = None """Image object (Image and PNG binary files)""" self.item_scene = None - """3D scene (AVZ, PLY, GBT, and STL files)""" + """3D scene (AVZ, PLY, SCDOC, and STL files)""" # Attributes for the table items self.table_attr = table_attr self.item_table = None diff --git a/pyproject.toml b/pyproject.toml index f3cb242f..233dfe04 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ requires = [ [project] name = "ansys-dynamicreporting-core" -version = "0.5.dev0" +version = "0.6.0.dev0" authors = [ {name = "ANSYS, Inc.", email = "pyansys.core@ansys.com"}, ] @@ -65,33 +65,33 @@ tests = [ "pyansys-docker==5.0.4", "numpy==1.25.1", "psutil==5.9.5", - "pytest==7.4.0", + "pytest==7.4.2", "pytest-cov==4.1.0", ] doc = [ - "ansys-sphinx-theme==0.10.0", + "ansys-sphinx-theme==0.11.2", "numpydoc==1.5.0", - "pillow==10.0.0", + "pillow==10.0.1", "pyansys-docker==5.0.4", - "Sphinx==7.1.1", + "Sphinx==7.2.6", "sphinx-copybutton==0.5.2", - "sphinx-gallery==0.13.0", + "sphinx-gallery==0.14.0", ] dev = [ "ipdb", "ipython", "whatsonpypi", - "ansys-sphinx-theme==0.10.0", + "ansys-sphinx-theme==0.11.2", "numpy==1.25.1", "numpydoc==1.5.0", - "pillow==10.0.0", + "pillow==10.0.1", "psutil==5.9.5", "pyansys-docker==5.0.4", - "pytest==7.4.0", + "pytest==7.4.2", "pytest-cov==4.1.0", - "Sphinx==7.1.1", + "Sphinx==7.2.6", "sphinx-copybutton==0.5.2", - "sphinx-gallery==0.13.0", + "sphinx-gallery==0.14.0", ] [tool.pytest.ini_options] diff --git a/src/ansys/dynamicreporting/core/utils/report_remote_server.py b/src/ansys/dynamicreporting/core/utils/report_remote_server.py index dc5ba03f..68ea04f3 100755 --- a/src/ansys/dynamicreporting/core/utils/report_remote_server.py +++ b/src/ansys/dynamicreporting/core/utils/report_remote_server.py @@ -50,7 +50,7 @@ def wrapper(*args, **kwargs): def print_allowed(): # Note: calling print() from a pythonw interpreter (e.g. template_editor launched - # via the icon) an cause the interpreter to crash. We will allow print, but only + # via the icon) can cause the interpreter to crash. We will allow print, but only # if this is not a pythonw instance. return not sys.executable.lower().endswith("pythonw.exe") @@ -104,6 +104,14 @@ class Server: """ def __init__(self, url=None, username=None, password=None): + # Check on the validity of url formatting + if url is not None: + o = urlparse(url) + is_valid = True if o.scheme and o.netloc else False + if is_valid is False: + if print_allowed(): + print("Error: invalid URL. Setting it to None") + url = None self.cur_url = url self.cur_username = username self.cur_password = password @@ -935,7 +943,8 @@ def get_pptx_from_report(self, report_guid, directory_name=None, query=None): continue self._download_report(link, q_params["filename"], directory_name=directory_name) except Exception as e: - print(f"Unable to get pptx from report '{report_guid}': {e}") + if print_allowed(): + print(f"Unable to get pptx from report '{report_guid}': {e}") else: raise Exception(f"The server returned an error code {resp.status_code}") From ccec2ad5344e883ba7b203ef3b77a36349a19b56 Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:00:56 -0400 Subject: [PATCH 02/18] Change python support version (#64) --- .github/workflows/ci_cd.yml | 4 ++-- .github/workflows/nightly.yml | 4 ++-- README.rst | 2 +- doc/source/gettingstarted/index.rst | 4 ++-- pyproject.toml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index aef5cd89..e31ce789 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -51,7 +51,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python-version: ['3.8', '3.9', '3.10', '3.11'] + python-version: ['3.9', '3.10', '3.11', '3.12'] should-release: - ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags') }} exclude: @@ -73,7 +73,7 @@ jobs: strategy: matrix: os: [ ubuntu-latest ] - python-version: [ '3.8', '3.9', '3.10', '3.11' ] + python-version: [ '3.9', '3.10', '3.11', '3.12' ] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index dd4a12e1..36691693 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -30,7 +30,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] - python-version: ['3.8', '3.9', '3.10', '3.11'] + python-version: [ '3.9', '3.10', '3.11', '3.12'] steps: - name: Build wheelhouse and perform smoke test uses: ansys/actions/build-wheelhouse@v4 @@ -47,7 +47,7 @@ jobs: strategy: matrix: os: [ ubuntu-latest ] - python-version: [ '3.8', '3.9', '3.10', '3.11' ] + python-version: [ '3.9', '3.10', '3.11', '3.12' ] steps: - uses: actions/checkout@v4 diff --git a/README.rst b/README.rst index e7b8b289..1e171c30 100644 --- a/README.rst +++ b/README.rst @@ -66,7 +66,7 @@ To reach the project support team, email `pyansys.core@ansys.com `_. diff --git a/doc/source/gettingstarted/index.rst b/doc/source/gettingstarted/index.rst index da729b99..c6a1fb1a 100755 --- a/doc/source/gettingstarted/index.rst +++ b/doc/source/gettingstarted/index.rst @@ -11,8 +11,8 @@ To get a copy of Ansys, visit the `Ansys `_ website. Installation ~~~~~~~~~~~~ -The ``ansys-dynamicreporting-core`` package currently supports Python 3.8 -through Python 3.11 on Windows and Linux. +The ``ansys-dynamicreporting-core`` package currently supports Python 3.9 +through Python 3.12 on Windows and Linux. To install the latest package from GitHub, run this command: diff --git a/pyproject.toml b/pyproject.toml index 233dfe04..22d68c01 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,10 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Natural Language :: English", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ From 297745eb908c6e81c7c7866e942e85f9ff777793 Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Tue, 10 Oct 2023 10:23:32 -0400 Subject: [PATCH 03/18] Add ansys installation information in the docs (#67) --- README.rst | 2 +- doc/.vale.ini | 2 +- doc/source/gettingstarted/index.rst | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 1e171c30..ad489084 100644 --- a/README.rst +++ b/README.rst @@ -203,7 +203,7 @@ PyDynamicReporting is licensed under the MIT license. PyDynamicReporting makes no commercial claim over Ansys whatsoever. This library extends the functionality of Ansys Dynamic Reporting by -adding a Python interface to Ansys Dynamic Reproting without changing +adding a Python interface to Ansys Dynamic Reporting without changing the core behavior or license of the original software. The use of PyDynamicReporting requires a legally licensed copy of an Ansys product that supports Ansys Dynamic Reporting. diff --git a/doc/.vale.ini b/doc/.vale.ini index f4f8b29e..fad4ddd3 100644 --- a/doc/.vale.ini +++ b/doc/.vale.ini @@ -20,7 +20,7 @@ WordTemplate = \b(?:%s)\b Packages = Google # Define the Ansys vocabulary -Vocab = ANSYS +Vocab = ANSYS, Polyflow [*.{md,rst}] diff --git a/doc/source/gettingstarted/index.rst b/doc/source/gettingstarted/index.rst index c6a1fb1a..2c26785f 100755 --- a/doc/source/gettingstarted/index.rst +++ b/doc/source/gettingstarted/index.rst @@ -3,11 +3,22 @@ Getting started PyDynamicReporting supports Ansys Dynamic Reporting 2023 R2 and later. To run PyDynamicReporting, you must have either a local copy of an Ansys installation -with a product that uses Ansys Dynamic Reporting or use a Docker image that -PyDynamicReporting sets up for you. +with a product that uses Ansys Dynamic Reporting or use a Docker image. To get a copy of Ansys, visit the `Ansys `_ website. +.. note:: + + Up to the Ansys 2023 R2 release, Ansys Dynamic Reporting is installed as + part of the Ansys EnSight package, under the Fluids section of the + installer. Starting from the Ansys 2024 R1 release, Ansys Dynamic Reporting + is installed separately, and can be found in the Fluids section of the + Ansys installer. Please also note that in all versions, Ansys Dynamic Reporting + is automatically installed if one of the following Ansys products is + installed: EnSight, Forte, Fluent, Polyflow, Icepack. + + + Installation ~~~~~~~~~~~~ @@ -18,7 +29,7 @@ To install the latest package from GitHub, run this command: .. code:: - pip install ansys-dynamicreporting-core + pip install ansys-dynamicreporting-core If you plan on doing local *development* of PyDynamicReporting, install the From 343bbf470fb570d085f99b96201a0d19eba3672b Mon Sep 17 00:00:00 2001 From: Visesh Rajendraprasad Date: Fri, 13 Oct 2023 11:31:07 -0400 Subject: [PATCH 04/18] add exclude_from_toc for pptx slide layouts (#69) --- .../dynamicreporting/core/utils/report_objects.py | 10 ++++++++++ tests/test_report_objects.py | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/ansys/dynamicreporting/core/utils/report_objects.py b/src/ansys/dynamicreporting/core/utils/report_objects.py index d8e5e4ba..8e4952b8 100644 --- a/src/ansys/dynamicreporting/core/utils/report_objects.py +++ b/src/ansys/dynamicreporting/core/utils/report_objects.py @@ -3263,6 +3263,16 @@ def source_slide(self, value): props["source_slide"] = value self.set_property(props) + @property + def exclude_from_toc(self): + return self.get_property().get("exclude_from_toc") + + @exclude_from_toc.setter + def exclude_from_toc(self, value): + props = self.get_property() + props["exclude_from_toc"] = value + self.set_property(props) + class datafilterREST(LayoutREST): """Representation of Data Filter Layout Template.""" diff --git a/tests/test_report_objects.py b/tests/test_report_objects.py index ca93f207..1e1048be 100755 --- a/tests/test_report_objects.py +++ b/tests/test_report_objects.py @@ -1692,6 +1692,8 @@ def test_pptx_slide() -> bool: a = ro.pptxslideREST() a.source_slide = "a" assert a.source_slide == "a" + a.exclude_from_toc = "1" + assert a.exclude_from_toc == "1" @pytest.mark.ado_test From 4ba5fb7a13c904e10f919d5dc9a46e9479987e05 Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:39:32 -0400 Subject: [PATCH 05/18] Syntax error in exception clause (#72) --- src/ansys/dynamicreporting/core/utils/geofile_processing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ansys/dynamicreporting/core/utils/geofile_processing.py b/src/ansys/dynamicreporting/core/utils/geofile_processing.py index 0d9a58eb..ef00c14e 100644 --- a/src/ansys/dynamicreporting/core/utils/geofile_processing.py +++ b/src/ansys/dynamicreporting/core/utils/geofile_processing.py @@ -198,7 +198,7 @@ def rebuild_3d_geometry(csf_file: str, unique_id: str, exec_basis: str = None): close_fds=True, creationflags=create_flags, ) - except Exception: + except Exception as e: print(f"Warning: unable to convert '{csf_file}' into AVZ format: {str(e)}") # At this point, if we have an original AVZ file or a converted udrw file, we # still look for proxy images. @@ -212,5 +212,5 @@ def rebuild_3d_geometry(csf_file: str, unique_id: str, exec_basis: str = None): with open(os.path.join(avz_dir, "proxy.png"), "wb") as output_file: output_file.write(data) break - except Exception: + except Exception as e: print(f"Warning: unable to extract AVZ proxy image: {str(e)}") From c4d98b9ae298c39307829df1e7b276dc4322b1e1 Mon Sep 17 00:00:00 2001 From: Mario Ostieri <107915956+mariostieriansys@users.noreply.github.com> Date: Mon, 23 Oct 2023 17:44:22 +0100 Subject: [PATCH 06/18] remove enve dependency (#73) --- pyproject.toml | 1 + .../core/utils/report_objects.py | 4 +- .../core/utils/report_utils.py | 245 +++++++++++++++--- tests/test_report_utils.py | 8 +- 4 files changed, 222 insertions(+), 36 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 22d68c01..dea897bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,7 @@ dependencies = [ "requests>=2.28.2", "twine>=4.0.1", "urllib3<2.0.0", + "Pillow>=9.3.0" ] [tool.setuptools.packages.find] diff --git a/src/ansys/dynamicreporting/core/utils/report_objects.py b/src/ansys/dynamicreporting/core/utils/report_objects.py index 8e4952b8..052282b1 100644 --- a/src/ansys/dynamicreporting/core/utils/report_objects.py +++ b/src/ansys/dynamicreporting/core/utils/report_objects.py @@ -1278,8 +1278,8 @@ def set_payload_image(self, img): if has_qt: # pragma: no cover if isinstance(img, QtGui.QImage): tmpimg = img - elif report_utils.is_enve_image(img): - image_data = report_utils.enve_image_to_data(img, str(self.guid)) + elif report_utils.is_enve_image_or_pil(img): + image_data = report_utils.image_to_data(img) if image_data is not None: self.width = image_data["width"] self.height = image_data["height"] diff --git a/src/ansys/dynamicreporting/core/utils/report_utils.py b/src/ansys/dynamicreporting/core/utils/report_utils.py index 2defa79f..d433f1a1 100644 --- a/src/ansys/dynamicreporting/core/utils/report_utils.py +++ b/src/ansys/dynamicreporting/core/utils/report_utils.py @@ -1,6 +1,8 @@ import array import base64 from html.parser import HTMLParser as BaseHTMLParser +import io +import json import os import os.path import platform @@ -9,6 +11,8 @@ import tempfile from typing import List, Optional +from PIL import Image +from PIL.TiffTags import TAGS import requests try: @@ -19,20 +23,13 @@ except (ImportError, SystemError): has_enve = False -try: - from PyQt5 import QtCore, QtGui - - has_qt = True -except ImportError: - has_qt = False - try: import numpy has_numpy = True except ImportError: has_numpy = False - +TIFFTAG_IMAGEDESCRIPTION: int = 0x010E text_type = str """@package report_utils Methods that serve as a shim to the enve and ceiversion modules that may not be present @@ -51,20 +48,222 @@ def encode_url(s): return s -def is_enve_image(img): - if has_enve and has_qt: # pragma: no cover - return isinstance(img, enve.image) - return False +def check_if_PIL(img): + """ + Check if the input image can be opened by PIL. + + Parameters + ---------- + img: + filename or bytes representing the picture + + Returns + ------- + bool: + True if the image can be opened by PIL + """ + # Assume you are getting bytes. + # If string, open it + imghandle = None + imgbytes = None + if isinstance(img, str): + imghandle = open(img, "rb") + elif isinstance(img, bytes): + imgbytes = img + try: + # Check PIL can handle the img opening + if imghandle: + Image.open(imghandle) + elif imgbytes: + Image.open(io.BytesIO(imgbytes)) + return True + except Exception: + return False + finally: + if imghandle: + imghandle.close() + + +def is_enve_image_or_pil(img): + """ + Check if the input image can be handled by enve or PIL. + + Parameters + ---------- + + img: + filename or bytes representing the picture + + Returns + ------- + bool: + True if the image can be opened either by PIL or enve + """ + is_enve = False + if has_enve: # pragma: no cover + is_enve = isinstance(img, enve.image) + is_PIL = check_if_PIL(img) + return is_enve or is_PIL + + +def is_enhanced(image): + """ + Check if the input PIL image is an enhanced picture. + + Parameters + ---------- + image: + the input PIL image + + Returns + ------- + str: + The json metadata, if enhanced. None otherwise + """ + if not image.format == "TIFF": + return None + frames = image.n_frames + if frames != 3: + return None + image.seek(0) + first_channel = image.getbands() == ("R", "G", "B") + image.seek(1) + second_channel = image.getbands() == ("R", "G", "B", "A") + image.seek(2) + third_channel = image.getbands() == ("F",) + if not all([first_channel, second_channel, third_channel]): + return None + image.seek(0) + meta_dict = {TAGS[key]: image.tag[key] for key in image.tag_v2} + if not meta_dict.get("ImageDescription"): + return None + json_description = meta_dict["ImageDescription"][0] + description = json.loads(json_description) + if not description.get("parts"): + return None + if not description.get("variables"): + return None + return json_description + + +def create_new_pil_image(pil_image): + """ + Convert the existing PIL image into a new PIL image for enhanced export. Reading an + enhanced picture with PIL and save it directly does not work, so a new set of + pictures for each frame needs to be generated. + + Parameters + ---------- + pil_image: + the PIL image currently handled + + Returns + ------- + list: + a list of PIL images, one for each frame of the original PIL image + """ + pil_image.seek(0) + images = [Image.fromarray(numpy.array(pil_image))] + pil_image.seek(1) + images.append(Image.fromarray(numpy.array(pil_image))) + pil_image.seek(2) + images.append(Image.fromarray(numpy.array(pil_image))) + return images + + +def save_tif_stripped(pil_image, data, metadata): + """ + Convert the existing pil image into a new TIF picture which can be used for + generating the required data for setting the payload. + + Parameters + ---------- + + pil_image: + the PIL image currently handled + data: + the dictionary holding the data for the payload + metadata: + the JSON string holding the enhanced picture metadata + + Returns + ------- + data: + the updated dictionary holding the data for the payload + """ + buff = io.BytesIO() + new_pil_images = create_new_pil_image(pil_image) + tiffinfo_dir = {TIFFTAG_IMAGEDESCRIPTION: metadata} + new_pil_images[0].save( + buff, + "TIFF", + compression="deflate", + save_all=True, + append_images=[new_pil_images[1], new_pil_images[2]], + tiffinfo=tiffinfo_dir, + ) + buff.seek(0) + data["file_data"] = buff.read() + data["format"] = "tif" + buff.close() + return data + + +def PIL_image_to_data(img, guid=None): + """ + Convert the input image to a dictionary holding the data for the payload. + + Parameters + ---------- + img: + the input picture. It may be bytes or the path to the file to read + guid: + the guid of the image if it is an already available Qt image + + Returns + ------- + data: + A dictionary holding the data for the payload + """ + imgbytes = None + imghandle = None + if isinstance(img, str): + imghandle = open(img, "rb") + elif isinstance(img, bytes): + imgbytes = img + data = {} + image = None + if imghandle: + image = Image.open(imghandle) + elif imgbytes: + image = Image.open(io.BytesIO(imgbytes)) + data["format"] = image.format.lower() + if data["format"] == "tiff": + data["format"] = "tif" + data["width"] = image.width + data["height"] = image.height + metadata = is_enhanced(image) + if metadata: + data = save_tif_stripped(image, data, metadata) + else: + buff = io.BytesIO() + image.save(buff, "PNG") + buff.seek(0) + data["file_data"] = buff.read() + if imghandle: + imghandle.close() + return data -def enve_image_to_data(img, guid=None): +def image_to_data(img): # Convert enve image object into a dictionary of image data or None # The dictionary has the keys: # 'width' = x pixel count # 'height' = y pixel count # 'format' = 'tif' or 'png' # 'file_data' = a byte array of the raw image (same content as disk file) - if has_enve and has_qt: # pragma: no cover + data = None + if has_enve: # pragma: no cover if isinstance(img, enve.image): data = dict(width=img.dims[0], height=img.dims[1]) if img.enhanced: @@ -80,22 +279,8 @@ def enve_image_to_data(img, guid=None): return data except OSError: return None - else: - # convert to QImage via ppm string I/O - tmpimg = QtGui.QImage.fromData(img.ppm(), "ppm") - # record the guid in the image (watermark it) - # note: the Qt PNG format supports text keys - tmpimg.setText("CEI_REPORTS_GUID", guid) - # save it in PNG format in memory - be = QtCore.QByteArray() - buf = QtCore.QBuffer(be) - buf.open(QtCore.QIODevice.WriteOnly) - tmpimg.save(buf, "png") - buf.close() - data["format"] = "png" - data["file_data"] = buf.data() # returns a bytes() instance - return data - return None + if not data: + return PIL_image_to_data(img) def enve_arch(): diff --git a/tests/test_report_utils.py b/tests/test_report_utils.py index f460bc89..c34825a3 100755 --- a/tests/test_report_utils.py +++ b/tests/test_report_utils.py @@ -27,14 +27,14 @@ def test_encode_decode() -> bool: @pytest.mark.ado_test def test_is_enve_image(request) -> bool: - no_img = ru.is_enve_image(return_file_paths(request)[0]) - assert no_img is False + img = ru.is_enve_image_or_pil(return_file_paths(request)[0]) + assert img is True @pytest.mark.ado_test def test_enve_image_to_data(request) -> bool: - no_img = ru.enve_image_to_data(return_file_paths(request)[0]) - assert no_img is None + img_data = ru.image_to_data(return_file_paths(request)[0]) + assert "file_data" in img_data.keys() @pytest.mark.ado_test From 107a06a2cbda8efcc6930fd336d0ead690133661 Mon Sep 17 00:00:00 2001 From: Mario Ostieri <107915956+mariostieriansys@users.noreply.github.com> Date: Tue, 24 Oct 2023 14:12:35 +0100 Subject: [PATCH 07/18] remove pyansys_docker fork dependency (#74) --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dea897bc..44496578 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ dependencies = [ "filelock>=3.7.1", "numpy>=1.18.0", "packaging>=21.0", - "pyansys-docker>=5.0.4", + "docker>=6.1.0", "pypng>=0.20220715.0", "python-dateutil>=2.8.0", "pytz>=2021.3", @@ -63,7 +63,7 @@ ci = "https://github.com/ansys/pydynamicreporting/actions" [project.optional-dependencies] tests = [ - "pyansys-docker==5.0.4", + "docker>=6.1.0", "numpy==1.25.1", "psutil==5.9.5", "pytest==7.4.2", @@ -73,7 +73,7 @@ doc = [ "ansys-sphinx-theme==0.11.2", "numpydoc==1.5.0", "pillow==10.0.1", - "pyansys-docker==5.0.4", + "docker>=6.1.0", "Sphinx==7.2.6", "sphinx-copybutton==0.5.2", "sphinx-gallery==0.14.0", @@ -87,7 +87,7 @@ dev = [ "numpydoc==1.5.0", "pillow==10.0.1", "psutil==5.9.5", - "pyansys-docker==5.0.4", + "docker>=6.1.0", "pytest==7.4.2", "pytest-cov==4.1.0", "Sphinx==7.2.6", From 1ebebe3db5218fc52546468756e1c0d1dbbcf8e4 Mon Sep 17 00:00:00 2001 From: Mario Ostieri <107915956+mariostieriansys@users.noreply.github.com> Date: Thu, 26 Oct 2023 08:40:11 +0100 Subject: [PATCH 08/18] fix workflow for enve generated non-tif picture (#75) --- .../dynamicreporting/core/utils/report_utils.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ansys/dynamicreporting/core/utils/report_utils.py b/src/ansys/dynamicreporting/core/utils/report_utils.py index d433f1a1..88b25cb5 100644 --- a/src/ansys/dynamicreporting/core/utils/report_utils.py +++ b/src/ansys/dynamicreporting/core/utils/report_utils.py @@ -266,8 +266,8 @@ def image_to_data(img): if has_enve: # pragma: no cover if isinstance(img, enve.image): data = dict(width=img.dims[0], height=img.dims[1]) - if img.enhanced: - with tempfile.TemporaryDirectory() as temp_dir: + with tempfile.TemporaryDirectory() as temp_dir: + if img.enhanced: path = os.path.join(temp_dir, "enhanced_image.tif") # Save the image as a tiff file (enhanced) if img.save(path, options="Compression Deflate") == 0: @@ -279,6 +279,14 @@ def image_to_data(img): return data except OSError: return None + else: + path = os.path.join(temp_dir, "image.png") + if img.save(path) == 0: + try: + with open(path, "rb") as img_file: + return PIL_image_to_data(img_file.read()) + except OSError: + return None if not data: return PIL_image_to_data(img) From 1398b51ef2e4b0d858c8de9666386ea68dc979f3 Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:31:05 -0400 Subject: [PATCH 09/18] Change logging default value to be error (#77) --- codegen/adr_utils.txt | 4 ++-- src/ansys/dynamicreporting/core/adr_service.py | 4 ++-- tests/test_service.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/codegen/adr_utils.txt b/codegen/adr_utils.txt index bf652541..7303ff1c 100644 --- a/codegen/adr_utils.txt +++ b/codegen/adr_utils.txt @@ -60,7 +60,7 @@ def get_logger(logfile=None): The logger object. """ logger = logging.getLogger() - logger.setLevel(logging.DEBUG) + logger.setLevel(logging.ERROR) if logfile is None: # Logging for Python APIs should be disabled by default ch = logging.NullHandler() @@ -68,7 +68,7 @@ def get_logger(logfile=None): ch = logging.StreamHandler(sys.stdout) else: ch = logging.FileHandler(logfile) - ch.setLevel(logging.DEBUG) + ch.setLevel(logging.ERROR) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) logger.addHandler(ch) diff --git a/src/ansys/dynamicreporting/core/adr_service.py b/src/ansys/dynamicreporting/core/adr_service.py index e2895a17..558a1e58 100755 --- a/src/ansys/dynamicreporting/core/adr_service.py +++ b/src/ansys/dynamicreporting/core/adr_service.py @@ -544,7 +544,7 @@ def stop(self) -> None: except Exception: pass if v is False: - self.logger.warning("Error validating the connected service. Can't shut it down.\n") + self.logger.error("Error validating the connected service. Can't shut it down.\n") else: # If coming from a docker image, clean that up try: @@ -556,7 +556,7 @@ def stop(self) -> None: self.logger.info("Told service to shutdown.\n") self.serverobj.stop_local_server() except Exception as e: - self.logger.warning(f"Problem shutting down service.\n{str(e)}\n") + self.logger.error(f"Problem shutting down service.\n{str(e)}\n") pass if self._delete_db and self._db_directory: diff --git a/tests/test_service.py b/tests/test_service.py index e9263acc..37a34cd3 100755 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -64,7 +64,7 @@ def test_unit_nexus_stop(request) -> bool: a = Service(logfile=logfile) a.stop() f = open(logfile) - assert "There is no service connected to the current session" in f.read() + assert "Error validating the connected service" in f.read() @pytest.mark.ado_test From 231525f7a863e5491ca77787132c9c550bdc945a Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:52:20 -0500 Subject: [PATCH 10/18] Feat/export (#78) --- .github/workflows/ci_cd.yml | 1 + .github/workflows/nightly-docs.yml | 1 + doc/source/conf.py | 2 +- pyproject.toml | 2 +- src/ansys/dynamicreporting/core/adr_report.py | 126 +++++++++++++++++- test_cleanup.py | 9 +- tests/conftest.py | 4 + tests/test_report.py | 29 ++++ 8 files changed, 170 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index e31ce789..e1c2e2d2 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -120,6 +120,7 @@ jobs: with: python-version: ${{ env.MAIN_PYTHON_VERSION }} check-links: false + sphinxopts: '-j auto' package: name: Package library diff --git a/.github/workflows/nightly-docs.yml b/.github/workflows/nightly-docs.yml index da613090..1be7b3af 100644 --- a/.github/workflows/nightly-docs.yml +++ b/.github/workflows/nightly-docs.yml @@ -23,6 +23,7 @@ jobs: with: python-version: ${{ env.MAIN_PYTHON_VERSION }} check-links: false + sphinxopts: '-j auto' docs_upload: needs: docs_build diff --git a/doc/source/conf.py b/doc/source/conf.py index 96c143ef..e6450779 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -74,7 +74,7 @@ # Intersphinx mapping intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), + "python": ("https://docs.python.org/3.11", None), # kept here as an example # "scipy": ("https://docs.scipy.org/doc/scipy/reference", None), # "numpy": ("https://numpy.org/devdocs", None), diff --git a/pyproject.toml b/pyproject.toml index 44496578..fec07e76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ requires = [ [project] name = "ansys-dynamicreporting-core" -version = "0.6.0.dev0" +version = "0.6.1.dev0" authors = [ {name = "ANSYS, Inc.", email = "pyansys.core@ansys.com"}, ] diff --git a/src/ansys/dynamicreporting/core/adr_report.py b/src/ansys/dynamicreporting/core/adr_report.py index 95fa7121..3fd1a9ab 100644 --- a/src/ansys/dynamicreporting/core/adr_report.py +++ b/src/ansys/dynamicreporting/core/adr_report.py @@ -18,6 +18,7 @@ my_report.visualize() """ import sys +from typing import Optional import webbrowser from ansys.dynamicreporting.core.adr_utils import in_ipynb @@ -182,7 +183,7 @@ def get_iframe(self, width: int = 1000, height: int = 800): import ansys.dynamicreporting.core as adr adr_service = adr.Service(ansys_installation = r'C:\\Program Files\\ANSYS Inc\\v232') ret = adr_service.connect() - my_report = adr_service.get_report(report_name = "My Top Report" + my_report = adr_service.get_report(report_name = "My Top Report") report_iframe = my_report.get_iframe() """ if "IPython.display" in sys.modules: @@ -191,3 +192,126 @@ def get_iframe(self, width: int = 1000, height: int = 800): else: iframe = None return iframe + + def export_pdf( + self, + file_name: str = "", + query: Optional[dict] = None, + page: Optional[list] = None, + delay: Optional[int] = None, + ) -> bool: + """ + Export report as PDF. Currently works only with a local ADR installation, and + not a docker image. + + Parameters + ---------- + file_name : str + Path and filename for the PDF file to export. + query : dict, optional + Dictionary for query parameters to apply to report template before export. Default: None + page : list, optional + List of integers that represents the size of the exported pdf. Default: None, which + corresponds to A4 size + delay : int, optional + Seconds to delay the start of the pdf export operation. Default: None, which + corresponds to no delay + + Returns + ------- + bool + Success status of the PDF export: True if it worked, False otherwise + + Examples + -------- + :: + + import ansys.dynamicreporting.core as adr + adr_service = adr.Service(ansys_installation = r'C:\\Program Files\\ANSYS Inc\\v232') + ret = adr_service.connect() + my_report = adr_service.get_report(report_name = "My Top Report") + succ = my_report.export_pdf(file_name=r'D:\\tmp\\myreport.pdf') + """ + success = False # pragma: no cover + if self.service is None: # pragma: no cover + self.service.logger.error("No connection to any report") + return "" + if self.service.serverobj is None: # pragma: no cover + self.service.logger.error("No connection to any server") + return "" + try: + if query is None: + query = {} + self.service.serverobj.export_report_as_pdf( + report_guid=self.report.guid, + file_name=file_name, + query=query, + page=page, + parent=None, + delay=delay, + exec_basis=self.service._ansys_installation, + ansys_version=self.service._ansys_version, + ) + success = True + except Exception as e: # pragma: no cover + self.service.logger.error(f"Can not export pdf report: {str(e)}") + return success + + def export_html( + self, + directory_name: str = "", + query: Optional[dict] = None, + filename: Optional[str] = "index.html", + no_inline_files: Optional[bool] = False, + ) -> bool: + """ + Export report as static HTML. + + Parameters + ---------- + directory_name : str + .... + query : dict, optional + Dictionary for query parameters to apply to report template before export. Default: None + filename : str, optional + Filename for the exported static HTML file. Default: index.html + no_inline_files : bool, optional + If True, the information is exported as stand alone files instead of in line content + in the static HTML. Default: False + + Returns + ------- + bool + Success status of the HTML export: True if it worked, False otherwise + + Examples + -------- + :: + + import ansys.dynamicreporting.core as adr + adr_service = adr.Service(ansys_installation = r'C:\\Program Files\\ANSYS Inc\\v232') + ret = adr_service.connect() + my_report = adr_service.get_report(report_name = "My Top Report") + succ = my_report.export_html(directory_name = r'D:\\tmp') + """ + success = False + if self.service is None: # pragma: no cover + self.service.logger.error("No connection to any report") + return "" + if self.service.serverobj is None: # pragma: no cover + self.service.logger.error("No connection to any server") + return "" + try: + if query is None: + query = {} + self.service.serverobj.export_report_as_html( + report_guid=self.report.guid, + directory_name=directory_name, + query=query, + filename=filename, + no_inline_files=no_inline_files, + ) + success = True + except Exception as e: # pragma: no cover + self.service.logger.error(f"Can not export static HTML report: {str(e)}") + return success diff --git a/test_cleanup.py b/test_cleanup.py index 7155276f..a9c467a2 100644 --- a/test_cleanup.py +++ b/test_cleanup.py @@ -10,7 +10,13 @@ "tests/test_data/viewer_test/", ] dir_list.extend( - ["tests/test_data/ansys", "tests/test_data/media", "tests/test_data/webfonts/", "htmltest/"] + [ + "tests/test_data/ansys", + "tests/test_data/media", + "tests/test_data/webfonts/", + "htmltest/", + "htmltest_again/", + ] ) dir_list.append("tests/test_data/create_delete/") dir_list.append("tests/test_data/create_twice/") @@ -32,6 +38,7 @@ file_list.extend(glob.glob("tests/outfile*.txt")) file_list.append("mypresentation") file_list.append("mytest.pdf") +file_list.append("again_mytest") for i_file in file_list: try: os.remove(i_file) diff --git a/tests/conftest.py b/tests/conftest.py index 37a4a469..b6ba19dc 100755 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -74,6 +74,9 @@ def adr_service_query(request, pytestconfig: pytest.Config) -> Service: use_local = pytestconfig.getoption("use_local_launcher") local_db = os.path.join("test_data", "query_db") db_dir = os.path.join(request.fspath.dirname, local_db) + tmp_docker_dir = os.path.join( + os.path.join(request.fspath.dirname, "test_data"), "tmp_docker_query" + ) if use_local: ansys_installation = pytestconfig.getoption("install_path") else: @@ -83,6 +86,7 @@ def adr_service_query(request, pytestconfig: pytest.Config) -> Service: ansys_installation=ansys_installation, docker_image=DOCKER_DEV_REPO_URL, db_directory=db_dir, + data_directory=tmp_docker_dir, port=8000 + int(random() * 4000), ) tmp_service.start(create_db=False, exit_on_close=True, delete_db=False) diff --git a/tests/test_report.py b/tests/test_report.py index fcad71d3..1471a3e6 100755 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -96,3 +96,32 @@ def test_unit_no_url(request) -> bool: if "No connection to any server" in line: err_msg = True assert err_msg + + +@pytest.mark.ado_test +def test_save_as_pdf(adr_service_query, request, get_exec) -> bool: + exec_basis = get_exec + if exec_basis: + success = False + try: + my_report = adr_service_query.get_report(report_name="My Top Report") + pdf_file = os.path.join(request.fspath.dirname, "again_mytest") + success = my_report.export_pdf(file_name=pdf_file) + except Exception: + success = False + adr_service_query.stop() + else: # If no local installation, then skip this test + success = True + assert success is True + + +@pytest.mark.ado_test +def test_save_as_html(adr_service_query) -> bool: + success = False + try: + my_report = adr_service_query.get_report(report_name="My Top Report") + success = my_report.export_html(directory_name="htmltest_again") + except Exception: + success = False + adr_service_query.stop() + assert success is True From ccac2689a1f3f362fa18f6642d1a0892155b23df Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Fri, 1 Dec 2023 09:32:27 -0500 Subject: [PATCH 11/18] Fix/set filter method (#80) --- doc/source/class_documentation.rst | 10 +- doc/source/lowlevelapi/DataItemObject.rst | 365 ++++ .../lowlevelapi/DatasetandSessionObjects.rst | 107 ++ doc/source/lowlevelapi/GettingStarted.rst | 352 ++++ doc/source/lowlevelapi/ServerObject.rst | 308 ++++ doc/source/lowlevelapi/TemplateObjects.rst | 1642 +++++++++++++++++ doc/source/lowlevelapi/index.rst | 23 + doc/source/lowlevelapi/lib/NewItem293.png | Bin 0 -> 27314 bytes doc/source/lowlevelapi/lib/NewItem294.png | Bin 0 -> 28599 bytes doc/source/lowlevelapi/lib/NewItem304.png | Bin 0 -> 14492 bytes doc/source/lowlevelapi/lib/NewItem305.png | Bin 0 -> 49403 bytes doc/source/lowlevelapi/lib/NewItem306.png | Bin 0 -> 35137 bytes doc/source/lowlevelapi/lib/NewItem307.png | Bin 0 -> 27128 bytes doc/source/lowlevelapi/lib/NewItem308.png | Bin 0 -> 44203 bytes doc/source/lowlevelapi/lib/NewItem309.png | Bin 0 -> 94550 bytes doc/source/lowlevelapi/lib/NewItem310.png | Bin 0 -> 70692 bytes doc/source/lowlevelapi/lib/NewItem311.png | Bin 0 -> 15728 bytes doc/source/lowlevelapi/lib/NewItem312.png | Bin 0 -> 44941 bytes doc/source/lowlevelapi/lib/NewItem313.png | Bin 0 -> 8196 bytes .../core/utils/report_objects.py | 37 +- tests/test_report_objects.py | 86 +- 21 files changed, 2887 insertions(+), 43 deletions(-) create mode 100755 doc/source/lowlevelapi/DataItemObject.rst create mode 100755 doc/source/lowlevelapi/DatasetandSessionObjects.rst create mode 100755 doc/source/lowlevelapi/GettingStarted.rst create mode 100755 doc/source/lowlevelapi/ServerObject.rst create mode 100755 doc/source/lowlevelapi/TemplateObjects.rst create mode 100755 doc/source/lowlevelapi/index.rst create mode 100755 doc/source/lowlevelapi/lib/NewItem293.png create mode 100755 doc/source/lowlevelapi/lib/NewItem294.png create mode 100755 doc/source/lowlevelapi/lib/NewItem304.png create mode 100755 doc/source/lowlevelapi/lib/NewItem305.png create mode 100755 doc/source/lowlevelapi/lib/NewItem306.png create mode 100755 doc/source/lowlevelapi/lib/NewItem307.png create mode 100755 doc/source/lowlevelapi/lib/NewItem308.png create mode 100755 doc/source/lowlevelapi/lib/NewItem309.png create mode 100755 doc/source/lowlevelapi/lib/NewItem310.png create mode 100755 doc/source/lowlevelapi/lib/NewItem311.png create mode 100755 doc/source/lowlevelapi/lib/NewItem312.png create mode 100755 doc/source/lowlevelapi/lib/NewItem313.png diff --git a/doc/source/class_documentation.rst b/doc/source/class_documentation.rst index 4f3f394b..5528dd06 100644 --- a/doc/source/class_documentation.rst +++ b/doc/source/class_documentation.rst @@ -3,11 +3,10 @@ API reference ************* Ansys Dynamic Reporting contains a low-level API that allows the user to access -a;; the available features and properties in full detail. While this low-level +all the available features and properties in full detail. While this low-level API is very powerful, it can also be quite complex to use and it requires a steep learning curve. For a comprehensive description of this API, see -`External Python API `_ -in the documentation for Ansys Dynamic Reporting. +the section :ref:`Low Level Python API `. The goal of PyDynamicReporting is to provide an easier, more Pythonic way to start or connect to an Ansys Dynamic Reporting service so that you do not need @@ -30,9 +29,14 @@ class to create, query, and modify items. Lastly, you create and use ``Report`` instances to access reports in Ansys Dynamic Reporting. + .. autosummary:: :toctree: _autosummary/ ansys.dynamicreporting.core.Item ansys.dynamicreporting.core.Service ansys.dynamicreporting.core.Report + +.. toctree:: + lowlevelapi/index.rst + diff --git a/doc/source/lowlevelapi/DataItemObject.rst b/doc/source/lowlevelapi/DataItemObject.rst new file mode 100755 index 00000000..ed451104 --- /dev/null +++ b/doc/source/lowlevelapi/DataItemObject.rst @@ -0,0 +1,365 @@ +Data Item Object +================ + +.. _ItemREST: + +report_objects.ItemREST object +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This object is a Python representation of an Ansys Dynamic +Reporting data item object. When +this object is created, a GUID will automatically be generated for the +object and the date is set to the current time/date. + +Data members +^^^^^^^^^^^^ + +The following attributes are available on an ItemREST object: + +- guid - string GUID. The default is ``str(uuid.uuid1())`` +- tags - The user-defined tags string for this object. Multiple tags + are space-separated. +- sequence - An integer sequence number that can be used for + sorting/indexing in a report +- date - The time & date of the creation of this object. The default + is: ``datetime.datetime.now(pytz.utc)`` +- name - The name of the data object, a string +- source - The source of the data object, a string +- session - string GUID of a SessionREST object that already exists in + the database +- dataset - string GUID of a DatasetREST object that already exists in + the database + + +Methods +^^^^^^^ + +**item.set_tags(tagstring)** + +Set the tags for the item to the passed string. Multiple tags are +space-separated. + +**item.get_tags()** + +Returns the tags string for this object. Multiple tags are +space-separated. + +**item.add_tag(tag, value=None)** + +Adds a tag to the current tag string. If no value is passed, the simple +tag string is added to the tags string. If a value is specified, a +string of the form tag=value will be added to the tag string. + +**item.rem_tag(tag)** + +Remove the tag (and any potential associated value) from the current tag +string. + +**has_file = item.is_file_protocol()** + +This method returns True if the data item refers to an actual file on +the server. Currently the ItemRest.type values of ItemREST.type_img, +ItemREST.type_scn, ItemREST.type_anim and ItemREST.type_file all refer +to files. + +Once all of the metadata attributes listed above are set, an actual data +payload needs to be set for the data item. There are convenience methods +to set the item type and fill in the payload data. + +**content = item.get_payload_content()** + +For Items that have been fetched using the Server object, this method +allows you to get the payload without having to manually decode the +payload data. + +An example of the use of this method is shown below: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + serverobj = report_remote_server.Server("http://localhost:8000/", "nexus", "cei") + obj_list = serverobj.get_objects( + objtype=report_objects.ItemREST, query="A|i_type|cont|string;" + ) + + # Previously you had to do this to get the data of an item and then decode it to view human readable content + + # import pickle** + # data = pickle.loads(obj_list[0].payloaddata) + + # This method gives you the human readable content directly (handles decoding internally.) + data = obj_list[0].get_payload_content() + + +Animation Item +'''''''''''''' + +**item.set_payload_animation(mp4_filename)** + +This method sets the item payload to an animation. The "mp4_filename" +argument should be the name of a .mp4 encoded video file. Note: the file +must exist on disk before this call is made and must stay on disk until +the item is pushed to the ADR Nexus server. + +File Item +''''''''' + +**item.set_payload_file(filename)** + +This method sets the item payload to the content of an arbitrary file on +disk. The argument should be the name of a file to be uploaded. Note: +the file must exist on disk before this call is made and must stay on +disk until the item is pushed to the ADR Nexus server. + +HTML Item +''''''''' + +**item.set_payload_html(html_text)** + +This will set the item payload to HTML formatted text. + +Image Item +'''''''''' + +**item.set_payload_image(image)** + +This method sets the item payload to an image. The argument can be one +of three things: the binary representation of a .png file on disk as a +string, a QImage object or an enve.image object. Examples are shown +below: + +- A string which is the binary data representation of the image. Note: + this is the only format supported in a Python interpreter that lacks + the PyQt and enve modules. + + .. code-block:: python + + with open("example.png", "rb") as fp: + img = fp.read() + item.set_payload_image(img) + + +- A Qt QImage object instance + + .. code-block:: python + + from PyQt4 import QtGui + + img = QtGui.QImage("example.png") + item.set_payload_image(img) + + +- An enve image object instance + + .. code-block:: python + + import enve + + img = enve.image() + if img.load("example.png") == 0: + item.set_payload_image(img) + + +None Item +''''''''' + +**item.set_payload_none()** + +By default an item has no payload. This method will reset the item to +that state. It is legal to push an item without a data payload into the +server. + +Scene Item +'''''''''' + +**item.set_payload_scene(filename)** + +This method sets the item payload to the 3D geometry found in the passed +filename. Supported geometry formats include: EnSight CSF, STL, PLY, +SCDOC and AVZ format files. + +String Item +''''''''''' + +**item.set_payload_string(string)** + +This will set the item payload to an ASCII string. + +Table Item +'''''''''' + +**item.set_payload_table(dictionary)** + +This will set the item payload to be a table, the table being specified +in a dictionary. Minimally, the dictionary must contain a single numpy +array with the 'array' key. There are a few restrictions on this array. +First, it must be 2D. Second, the dtype of the array should be +numpy.float32, numpy.double or a string (dtype="\|S20"). + +Other table properties (e.g. row/column labels, text formatting, etc) +can also be set in this dictionary. A simple example: + +.. code-block:: python + + import numpy + + d = dict( + array=numpy.zeros((3, 2), numpy.double), + rowlbls=["Row 1", "Row 2", "Row 3"], + collbls=["Column A", "Column B"], + title="Simple table", + ) + item.set_payload_table(d) + + +If the external Python API is being used from within EnSight, it is also +possible to pass an ENS_PLOTTER object to the set_payload_table() +method. It will capture not only the data in the plots, but many of the +plotter attributes. One example might be: + +.. code-block:: python + + plot = ensight.objs.core.PLOTS[0] # get the first ENS_PLOTTER object + item.set_payload_table(plot) + + +Many more table properties exist and can be set as the default values +for a table by setting same-named keys in the dictionary. The properties +are documented in the item properties section at `this`_ page. + +.. _this: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableItem.html + +A short-cut APIs exists for a common case: + +.. code-block:: python + + item.set_payload_table_values(array, rowlbls=None, collbls=None, title=None) + + +This is a shortcut for the following two lines of python: + +.. code-block:: python + + d = dict( + array=numpy.array(array, numpy.double), + rowlbls=rowlbls, + collbls=collbls, + title=title, + ) + item.set_payload_table(d) + + +Note this can be handy for cases like: + +.. code-block:: python + + item.set_payload_table_values([[1, 2, 3], [4, 5, 6]]) + + +where one does not want to work with numpy and prefers to pass lists of +lists. The core API will convert the list of lists into a 2D numpy array +for the caller. + +It is possible to use a table of strings. To create a 2 row, 3 column +array of strings (up to 20 characters), one might use code like this: + +.. code-block:: python + + import numpy + + array = numpy.array([["A", "B", "C"], [1, 2, 3]], dtype="\|S20") + d = dict( + array=array, + rowlbls=["Row 1", "Row 2"], + collbls=["Column A", "Column B", "Column C"], + title="Simple ASCII table", + ) + item.set_payload_table(d) + + +A numpy array of strings contains strings of all the same length. The +maximum length must be specified using the 'dtype=' named argument when +the array is created. + +.. _TreeItemDetails: + + +Tree Item +''''''''' + +**item.set_payload_tree(tree)** + +A tree payload consists of a list of "entities". Each entity is a +dictionary with several required keys and potentially some optional +ones. The required dictionary keys are: + +- 'name' - the text string that will be displayed in the tree view. +- 'key' - a simple text string that can be used to specify the type of + the entity. This value can be used to enforce a schema on the + entities. This value is not displayed. +- 'value' - the data item value for the entity. This can be the None + object or an object of any of the following types: bool, int, float, + str, datetime.datetime, uuid.UUID. + +optional keys include: + +- 'children' - this key can be set to another list of entities. These + entities are 'children' of the entity with this key and their + visibility is controlled by the visible state of this entity. +- 'state' - if present, this key hints the generation engine that this + entity node (or the nodes below it) should be initially displayed + expanded or collapsed. Valid values include the strings: "expanded", + "collapsed", "collapseRecursive" and "expandRecursive". +- 'header' - this key may be set to a boolean and defaults to False. If + it is present and set to True, the rendered row associated with this + item will be displayed as bold text and with an enhanced bottom + border line. + +The following example includes examples of all of the various options: + +.. code-block:: python + + import datetime + import enve + import uuid + + image_item = server.create_item(name="An Image", source="externalAPI", sequence=0) + img = enve.image() + if img.load("example.png") == 0: + image_item.set_payload_image(img) + + leaves = list() + for i in range(10): + leaves.append(dict(key="leaves", name="Leaf {}".format(i), value=i)) + + children = list() + children.append(dict(key="child", name="Boolean example", value=True)) + children.append(dict(key="child", name="Integer example", value=10)) + children.append(dict(key="child", name="Float example", value=99.99)) + children.append(dict(key="child", name="Simple string", value="Hello world!!!")) + children.append( + dict(key="child", name="The current date", value=datetime.datetime.now()) + ) + + # this entity will display the image item (or a link to it) created above + children.append( + dict(key="child", name="A data item guid", value=uuid.UUID(image_item.guid)) + ) + children.append( + dict( + key="child_parent", + name="A child parent", + value="Parents can have values", + children=leaves, + state="expanded", + ) + ) + + tree = list() + tree.append( + dict(key="root", name="Top Level", value=None, children=children, state="collapsed") + ) + item = server.create_item(name="Tree List Example", source="externalAPI", sequence=0) + item.set_payload_tree(tree) + diff --git a/doc/source/lowlevelapi/DatasetandSessionObjects.rst b/doc/source/lowlevelapi/DatasetandSessionObjects.rst new file mode 100755 index 00000000..32cb3026 --- /dev/null +++ b/doc/source/lowlevelapi/DatasetandSessionObjects.rst @@ -0,0 +1,107 @@ +Dataset and Session Objects +=========================== + +.. _DatasetREST: + +report_objects.DatasetREST object +--------------------------------- + +This object is a Python representation of an Ansys +Dynamic Reporting dataset object. When +this object is created, a GUID will automatically be generated for the +object. + +Data members +^^^^^^^^^^^^ + +The following attributes are available on a DatasetREST object: + +- guid - string GUID. The default is str(uuid.uuid1()) +- tags - The user-defined tags string for this object. Multiple tags + are space-separated. +- filename - The filename portion of the dataset local path, a string +- dirname - The directory name portion of the dataset local path, a + string +- format - The format of the dataset, a string +- numparts - The number of parts in the dataset, an integer +- numelements - The total number of elements in the dataset, an integer + (a measure of the size of the dataset) + +Methods +^^^^^^^ + +**dataset.set_tags(tagstring)** + +Set the tags for the dataset to the passed string. Multiple tags are +space-separated. + +**dataset.get_tags()** + +Returns the tags string for this object. Multiple tags are +space-separated. + +**dataset.add_tag(tag, value=None)** + +Adds a tag to the current tag string. If no value is passed, the simple +tag string is added to the tags string. If a value is specified, a +string of the form tag=value will be added to the tag string. + +**dataset.rem_tag(tag)** + +Remove the tag (and any potential associated value) from the current tag +string. + +.. _SessionREST: + +report_objects.SessionREST object +--------------------------------- + +This object is a Python representation of an +Ansys Dynamic Reporting session object. When +this object is created, a GUID will automatically be generated for the +object and the date is set to the current time/date. + + +Data members +^^^^^^^^^^^^ + +The following attributes are available on a SessionREST object: + +- guid - string GUID. The default is ``str(uuid.uuid1())`` +- tags - The user defined tags string for this object. Multiple tags + are space-separated. +- date - The time & date of the creation of this object. The default + is: ``datetime.datetime.now(pytz.utc)`` +- hostname - The name of the host system the session was run on, a + string +- version - The version of the application that was used to generate + this session, a string +- platform - The platform/OS on which the application generated this + session, a string +- application - The name of the application generating this session, a + string + + +Methods +^^^^^^^ + +**session.set_tags(tagstring)** + +Set the tags for the session to the passed string. Multiple tags are +space-separated. + +**session.get_tags()** + +Returns the tags string for this object. Multiple tags are +space-separated. + +**session.add_tag(tag, value=None)** + +Adds a tag to the current tag string. If no value is passed, the simple +tag string is added to the tags string. If a value is specified, a +string of the form tag=value will be added to the tag string. + +**session.rem_tag(tag)** + +Remove the tag (and any potential associated value) from the current tag +string. diff --git a/doc/source/lowlevelapi/GettingStarted.rst b/doc/source/lowlevelapi/GettingStarted.rst new file mode 100755 index 00000000..d1403b1c --- /dev/null +++ b/doc/source/lowlevelapi/GettingStarted.rst @@ -0,0 +1,352 @@ +Startup +------- + +The following code snippet illustrates how to import the necessary API +modules (technically, **import requests** is not necessary, but some of +the API calls are simpler with that module available): + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + import requests + + +Simple Example +-------------- + +This snippet creates a new database, starts an ADR Nexus server, verifies the +server and shuts it down. It uses the port=None option to allow the +system to find and use a non-conflicting port to run the server on. If +needed, the port is returned as part of the URL returned by: +serverobj.get_URL(). + +.. code-block:: python + + db_dir = "D:/data/example_database" + report_remote_server.create_new_local_database(None, directory=db_dir) + serverobj = report_remote_server.Server() + report_remote_server.launch_local_database_server( + None, port=None, directory=db_dir, connect=serverobj + ) + version_number = serverobj.validate() + serverobj.stop_local_server() + +core.report_remote_server module +-------------------------------- + +This module includes the interfaces needed to manage ADR Nexus servers. + +Module functions +^^^^^^^^^^^^^^^^ + +Many of these functions support Qt integration. The parent option +specifies the Qt widget that should be the parent if they are to display +any GUI elements. If parent is specified as None, no GUI elements will +be presented to the user and the operation will just return an error +status. + +report_remote_server.launch_local_database_server +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + bError = launch_local_database_server( + parent, + directory="", + no_directory_prompt=False, + port=8000, + connect=None, + terminate_on_python_exit=False, + delete_db_on_python_exit=False, + username="nexus", + password="cei", + verbose=True, + return_info=None, + raise_exception=False, + use_system_tray=None, + server_timeout=180.0, + **kwargs + ) + + +This function will try to launch a local ADR Nexus server using the database +found in the specified directory on the specified port. If parent is not +set None, the function will interact with the user via Qt modal dialogs +(parent will be the parent of the dialogs) to select database directory, +ports, username and password. One can bypass the prompt to select the +server directory using the no_directory_prompt keyword argument. + +By default, a launched server will continue to run after the current +Python session stops. There is a server method stop_local_server() that +can be used to stop the launched server. Otherwise, the +terminate_on_python_exit keyword can be set to True to cause the server +to be automatically shut down if the current Python interpreter instance +exits cleanly. + +If the delete_db_on_python_exit argument is also set to True, then once +the server is automatically shut down the database directory it was +connected to will be deleted. + +If the Qt parent is not set to None and the server has not been set to +terminate on exit, then the use_system_tray option can be used to cause +the server to place a menu in the system tray. This menu will allow for +the server to be stopped, the logs to be reviewed and other options. + +When launching a server, this function will try to connect to the +launched server for some time before assuming the launch has failed. The +length of this timeout is specified by the server_timeout keyword. + +By default, the function will return True on success or False on +failure. If raise_exception is True, the function will raise an +exception instead of returning False. + +The username and password for the database should be specified using +those keywords. + +If the connect keyword is specified, it should be an instance of the +report_remote_server.Server class. This object will be populated with +the launched server details when the function returns. It is a handy way +to capture a dynamically selected port. + +The port keyword can be set to the specific port number the ADR Nexus server +should use. The port keyword may also be set to None, in which case the +system will search for an open port on which to start the ADR Nexus server, +starting at 8000. If this option is selected, it is critical that the +'connect' keyword be set, otherwise there will be no mechanism for one +to know the actual port that was used. + +The verbose keyword controls the level of log output generated by the +ADR Nexus server and determines if the user is allowed to modify any +dynamically selected port number. + +In addition to the above mentioned arguments, this method supports all +of the options available to the Ansys Dynamic Reporting Launcher CLI (through ``**kwargs``). + +report_remote_server.create_new_local_database +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + bError = create_new_local_database( + parent, directory="", return_info={}, raise_exception=False + ) + + +This function will create a new, empty database with the default +username and password in the directory specified by the directory +keyword. If parent is None, this function will try to create the +database and return True on success without presenting any GUI elements. +It is very important to set the directory keyword if passing None as the +parent. Otherwise, parent should be a Qt widget object that will serve +as the parent of modal dialog used to select the directory to contain +the new database. The target directory should be empty as this method +will insert a media directory, a db.sqlite3 file and a manage.py file. +The return_info argument is optional. If a dictionary is passed, +information about the created database will be stored in it. + +If raise_exception is True, method will throw an error instead of +returning the error flag. + +report_remote_server.connect_to_server_dialog +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + bError = connect_to_server_dialog(parent, server, title=None) + + +This method presents a dialog to the user with a window title specified +by the title keyword that allows the user to enter all of the +information needed to connect to an ADR Nexus server. It then attempts to +connect to the server and returns True if the connection succeeded. The +server argument should be an instance of the report_remote_server.Server +class which will be initialized with the entered values. This method can +only be called from a PyQt application. You can specify None for the +parent, but it will have the same effect as displaying a modal dialog +with no parent specified. Do not use this method if your application +should not display any GUI. + +:doc:`report_remote_server.Server ` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This class provides an interface to the ADR Nexus server. Most of the core +API can be accessed via an instance of this class. The Server object has +methods for creating instances of data item and template objects. + + +core.report_objects module +-------------------------- + +This module provides the core data items that can be pushed into +an Ansys Dynamic Reporting +database. This includes the session, dataset and item objects. +Generally, these classes should be created using the Server object +methods create_item, create_layout, default_dataset and default_session +or via one of the Server query methods. + +.. _ReportObjectsList: + + +Class hierarchy +^^^^^^^^^^^^^^^ + + +**BaseRESTObject** - Abstract Ansys Dynamic Reporting REST object interface base class + + - :ref:`DatasetREST ` - Dataset + information + + - :ref:`SessionREST ` - Session + information + + - :ref:`ItemREST ` - Core data items + + - :ref:`TemplateREST ` - Abstract base class + for all template (layout and generator) classes + + - :ref:`LayoutREST ` - Abstract base class for + all layout classes + + - :ref:`basicREST ` - Basic column layout class + + - :ref:`panelREST ` - Column layout class with + support for pullouts and headers + + - :ref:`boxREST ` - Explicit child layout class + + - :ref:`tabsREST ` - Layout that organizes + layout children into tabs + + - :ref:`carouselREST ` - Layout that + organizes children into a 'carousel' presentation + + - :ref:`sliderREST ` - Specialized image + layout for interactive image review/comparison + + - :ref:`footerREST ` - Page footer layout + + - :ref:`headerREST ` - Page header layout + + - :ref:`iteratorREST ` - Tag-based layout + replicator + + - :ref:`tagpropsREST ` - Map item/layout + tags into properties + + - :ref:`tocREST ` - Table of contents/figure list + layout + + - :ref:`reportlinkREST ` - Cross layout + linking + + - :ref:`GeneratorREST ` - Abstract base + class for all generator classes + + - :ref:`tablemergeREST ` - Table merge + generator for merging multiple tables into a single table + + - :ref:`tablereduceREST ` - Table + reduction generator that may collapse rows/columns into aggregated + values + + - :ref:`tablerowcolumnfilterREST ` - + Table row/column filter generator for removing/organizing table rows + and columns + + - :ref:`tablevaluefilterREST ` - Table + value filter generator for processing table values + + - :ref:`tablesortfilterREST ` - Table + sort/filter generator for re-organizing tables + + - :ref:`sqlqueriesREST ` - SQL query + generator for pulling data into the report from external SQL databases + + - :ref:`treemergeREST ` - tree merge + generator for merging multiple trees into a single tree + + +Examples +-------- + +A simple example of how this API might be used: + + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + serverobj = report_remote_server.Server( + url="http://localhost:8000", username="nexus", password="cei" + ) + session = serverobj.get_default_session() + session.application = "My Application" + session.version = "10.2" + item = serverobj.create_item(name="Simple header", source="My Python script") + item.set_payload_html("

An Example Header

") + error = serverobj.put_objects([item]) + + +This would start a new session that connects to an ADR Nexus server already +running on port 8000 of the local system. The server has a default +dataset and a default session object. We change the name and version of +the session application before creating a new data item. The data item +is populated with some HTML source and then pushed to the server. The +put_objects() call will push the item, the session and the dataset +objects all to the ADR Nexus server. + +A more complex example that generates an ASCII table of three columns +representing a username, a version number and a date (as a floating +point value): + +.. code-block:: python + + # core Python modules + from dateutil import parser + import datetime + import random + import requests + import numpy + + # Ansys Dynamic Reporting modules + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + # time values can be represented as double precision counts of seconds from a standard time_base + time_base = datetime.datetime(1970, 1, 1) + + + def make_time(s): + dt = parser.parse(s) + return (dt - time_base).total_seconds() + + + # generate a row of random values + def row_gen(start, end): + users = ["bob", "fred", "mary", "jill"] + versions = ["1.1", "2.0", "1.3", "1.0"] + t0 = make_time(start) + t1 = make_time(end) + return [ + users[random.randint(0, 3)], + versions[random.randint(0, 3)], + t0 + (t1 - t0) * random.random(), + ] + + + # connect to the default ADR Nexus server (this assumes the server had been started previously + + s = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + nrows = 40 + ncols = 3 + item = s.create_item(name="Text List Example", source="externalAPI", sequence=0) + array = numpy.zeros((nrows, ncols), dtype="\|S20") + for i in range(nrows): + array[i] = row_gen("1/1/2017", "2/1/2017") + + item.set_payload_table_values( + array, rowlbls=None, collbls=["User", "Version", "Date"], title="January" + ) + item.add_tag("month", "Jan") + item.add_tag("user_version_example") + if s.put_objects(item) == requests.codes.ok: + print("Success") diff --git a/doc/source/lowlevelapi/ServerObject.rst b/doc/source/lowlevelapi/ServerObject.rst new file mode 100755 index 00000000..361b08d2 --- /dev/null +++ b/doc/source/lowlevelapi/ServerObject.rst @@ -0,0 +1,308 @@ +Server Object +============= + +report_remote_server.Server object +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This object serves to wrap the Ansys Dynamic Reporting REST API. +It sets up a connection +to an ADR Nexus server and allows objects to be pulled from and pushed to the +server. + +A new server object can be created with the following: + +**serverobj = report_remote_server.Server(url=None, username=None, password=None)** + +Methods +^^^^^^^ + +**serverobj.set_URL("http://localhost:8000")** +**serverobj.set_username("nexus")** +**serverobj.set_password("cei")** + +Specify the ADR Nexus server (url and authentication information) to which +to connect the Server object to. + +**url = serverobj.get_URL()** +**username = serverobj.get_username()** +**password = serverobj.get_password()** + +Retrieve information about the current Server configuration. + +**server_name = serverobj.get_server_name()** + +Attempts to connect to the database returns the name of the server. For +remote servers, the name is a configuration parameter. For local +servers, it is the name of the directory that contains the SQLite file. +Note: if a connection to the server cannot be made or the server does +not support names, this method returns the URL for the server. + +**server_version_float = serverobj.validate()** + +Attempts to connect to the database and verifies that the server +connection specifications are valid. It returns the version of the +ADR Nexus +server API that the server is using. Note: this method will throw an +exception on encountering an error. + +**has_database_url = serverobj.valid_database()** + +This method checks to see if a database url has been set. It returns +True if a url has been set. It does not verify that the connection and +username, password is valid. + +**serverobj.stop_local_server()** + +This method will stop any local ADR Nexus server accessible via the current +Server object URL, username and password. + +**guid_list = serverobj.get_object_guids(objtype=type_class, query=None)** + +This method will query the server and returns a list of the object GUIDs +that meet the specific query. If the query is +None, all of the GUIDs of the type specified by objtype will be +returned. The objtype keyword specifies the type of database object to +get the list of guids for. Valid values for the objtype keyword include: + +- report_objects.DatasetREST +- report_objects.SessionREST +- report_objects.ItemREST + +**obj_list = serverobj.get_objects(objtype=type_class, query=None)** + +This method is similar to **get_object_guids()** except that it +returns a list of actual instances of the class specified by the +objtype keyword instead of just returning the GUIDs. + +Note that if you want the list of templates, you can either set +**objtype** to **report_objects.TempalteREST** or to +**report.objects.TemplateREST.factory**. In the first case, all the +templates will be returned as objects of the TemplateREST class. In +the second case, all templates will be returned as objects of the +sub-classes of TemplateREST, corresponding to the exact report_type. + +**obj = serverobj.get_object_from_guid(guid, objtype=type_class)** + +This method queries the ADR Nexus server for a single object of the class +specified by objtype with the GUID specified by the guid argument. It +returns an instance of the class specified by objtype or None if the +GUID is not present. + +**status_code = serverobj.put_objects(objects)** + +This method takes a collection of objects of the classes +report_objects.DatasetREST, report_objects.SessionREST and +report_objects.ItemREST and pushes the local contents of the objects to +the server. If objects with the same GUID(s) already exist in the server +database, they will be overwritten. The return value is a status code +from the **requests** Python module (e.g. **requests.codes.ok**). Note: +if an error occurs the method will return the last error, but it will +try to push every object in the input collection. + +**status_code = serverobj.del_objects(objects)** + +This method takes a collection of objects of the classes +report_objects.DatasetREST, report_objects.SessionREST and +report_objects.ItemREST and asks the server to delete them. If objects +with matching GUIDs exist in the server database, they will be removed +from the database. This method only looks at the guid attribute of the +input object collection. The return value is a status code from the +**requests** Python module (e.g. **requests.codes.ok**). Note: if an +error occurs the method will return the last error, but it will try to +delete every object in the input collection. + +**status_code = serverobj.get_file(object, fileobj)** + +In some cases, a report_objects.ItemREST instance will have an +associated file in the Ansys Dynamic Reporting datastore. +Examples include images, +animations and 3D geometry (see report_objects.ItemRest above). The +ItemREST.is_file_protocol() can be used to check for this. This method +will download the file (if any) associated with the (ItemREST instance) +object and write the output into the file object specified by the +fileobj argument. Fileobj should be an open Python file type object that +supports minimally write I/O semantics. Note that the operation is +streaming, so it is possible for a partial file to exist if errors are +encountered. The return value is a status code from the **requests** +Python module (e.g. **requests.codes.ok**). + +**session = serverobj.get_default_session()** +**dataset = serverobj.get_default_dataset()** +**serverobj.set_default_session(session)** +**serverobj.set_default_dataset(dataset)** + +The server object maintains default SessionREST and DatasetREST objects +that are used with the create_item() method to simplify data item +creation. The get_default_session() and get_default_dataset() methods +return the current default session and dataset objects. The +corresponding set_default_session() and set_default_dataset() methods +set these objects to externally generated objects or more commonly, +modified objects returned by the get methods. + +**item = serverobj.create_item(name="Unnamed Item", source="ADR Python +API", sequence=0)** + +This method simplifies the generation of data items. One can create a +new data item by simply instantiating an instance of ItemREST(), but +many of the item attributes would need to be configured properly before +the object can be saved into the database. Most notably, the +item.session and item.dataset attributes need to be set to the GUIDs for +an instance of SessionREST and DatasetREST respectively. The Server +object always maintains a default instance of SessionREST and +DatasetREST objects. The object references can be modified by the user +to customize their metadata. The create_item() method will create a new +instance of the ItemREST class and will automatically fill in the +session and dataset attributes to the objects returned by +get_default_session() and get_default_dataset(). Additionally, if +put_objects() is called on an item whose session or dataset attributes +match the default GUIDs, the put_objects() method will push the session +and/or dataset objects as needed. If the session/dataset objects change +(without changing the GUIDs) the system will detect this any +automatically push them when the next item is pushed that references one +of them. The create_item() method allows the user to specify the name, +source and sequence number for the item during creation. + +**serverobj.export_report_as_html(report_guid, directory_name, +query=None)** + +This method exports the Ansys Dynamic Reporting report with the +GUID specified by the +argument "report_guid". The result will be written into the directory +specified by the argument "directory_name". The method will create the +directory if it does not exist previously. There will be a file named +"index.html" in the directory and a "media" subdirectory containing the +resources needed to display the report. note: if there is an error, this +method will throw an exception. + +Input arguments: + +- report guid (string) - the guid of the report to be downloaded as + HTML. +- directory_name (string) - the name of the directory to save the + downloaded contents. +- query (dictionary) - a dictionary of query parameters to add to the + report URL. + +**serverobj.export_report_as_pdf(report_guid, file_name, delay=5000)** + +Save a PDF rendering of the Ansys Dynamic Reporting report with the GUID specified by the +argument "report_guid". The name of the PDF file is specified by the +argument "file_name". Note: if there is an error, this method will throw +an exception. This is the equivalent of displaying the report with the +query 'print=pdf' included in the report URL. + +Input arguments: + +- report guid (string) - the guid of the report to be saved as PDF. +- file_name (string) - the name of the target PDF file. +- delay (int) - number of milliseconds to wait for the report to load + before downloading it. Default is 5000ms. Optional. + +Various data items and report templates will behave differently when +printing: + +#. Tree data items will be fully expanded and the interactive buttons + for expanding/collapsing will be removed. +#. Animation data items will be rendered as if the 'image_display' + property is set to 1. +#. Table data items will have all of their interactive controls + suppressed (e.g. sorting, searching, scrolling, pagination, etc) +#. Tab layouts will behave as if the 'inline_tabs' property is set to 1. +#. Panel layouts will behave as if the 'panel_template_toggle' property + is set to 0. + +Magic tokens +^^^^^^^^^^^^ + +Magic tokens is a new way for users in the ADR Nexus server +to login without using +their password. Ansys Dynamic Reporting +provides a Python API to generate a per-user +secret token. This token can then be attached to any Ansys Dynamic Reporting web page URL +to bypass login during future access. This is currently restricted to +only the user who starts the server. This can be useful if a URL needs +to be reused within a HTML iframe. + +**serverobj.generate_magic_token(max_age=None)** + +This method generates a magic token with the desired expiry. + +Input arguments: + +- max_age (int) - Expiry of the token in seconds. If this is None, the + server will use its default expiry of 1 day. + +**serverobj.get_url_with_magic_token()** + +This will return a URL to access the ADR Nexus server with a magic token +attached. + +Usage: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server() + opts = { + "port": 8000, + "directory": "C:\\Users\\Nexus\\db", + "raise_exception": True, + "connect": server, + } + launched = report_remote_server.launch_local_database_server(None, opts) + if launched: + print(server.magic_token) # auto generation.. default expiry of 1day + print(server.get_url_with_magic_token()) + server.magic_token = server.generate_magic_token( + max_age=60 + ) # manual generation, with an expiry of 60 seconds + print(server.get_url_with_magic_token()) + # Prints URL with token. + # Example: http://127.0.0.1:8000?magic_token=eyJ1c2VyX2lkIjozLCJtYXhfYWdlIjo4NjQwMCwidGltZXN0YW1wIjoiMW5QY1B5In0:1nPcPy:c3OZhMCVQQq_fXXzevQ47WHxYfbAZE5TI-GL0yBzIaw + template = serverobj.create_template( + name="New Template", parent=None, report_type="Layout:basic" + ) + + +Method on a report_remote_server.Server() object to create a new +report_object.TemplateREST object. You can pass as input: + +- name (string) - the name of the template +- parent (template objects)- the parent template. If None, the new + template will be a top level one +- report_type (string) - sets the type of template. Each value of + report_type corresponds to a different template type, and will + generate an object from the corresponding template sub-class. See the + table for the accepted values of report_type, the corresponding + template type and Python API sub-class. + +**error_string = serverobj.get_last_error()** + +Several of the server methods return REST error codes: put_objects(), +del_objects(), get_file(), etc. When these methods error, they return +the specific REST error code. If the error in question was generated by +the ADR Nexus server, in addition to the error_code not being equal to +**requests.codes.ok**, the server may return a more detailed error +string. This string can be retrieved using the get_last_error() method. +An example of a data item with an item name exceeding: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + serverobj = report_remote_server.Server( + url="http://localhost:8000", username="nexus", password="cei" + ) + invalid_data_item_name = 100 + item = serverobj.create_item(invalid_data_item_name, "command line") + item.set_payload_string("A simple text string") + print(serverobj.put_objects(item)) + print(serverobj.get_last_error()) + + +will output the following (note: **requests.codes.bad_request** == 400) +output noting that the "name" field exceeds the maximum field length: + +**400** +**{"name":["Ensure this field has no more than 80 characters."]}** diff --git a/doc/source/lowlevelapi/TemplateObjects.rst b/doc/source/lowlevelapi/TemplateObjects.rst new file mode 100755 index 00000000..b74d3db1 --- /dev/null +++ b/doc/source/lowlevelapi/TemplateObjects.rst @@ -0,0 +1,1642 @@ +.. _TemplateREST: + +Template Objects +================ + +.. _here: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?LayoutTemplates.html +.. _link: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?QueryExpressions.html +.. _Columns: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Columns.html +.. _Panel: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Panel.html +.. _Boxes: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Boxes.html +.. _Tabs: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Tabs.html +.. _Carousel: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Carousel.html +.. _Slider: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Slider.html +.. _Page Footer: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?PageFooter.html +.. _Page Header: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?PageHeader.html +.. _Iterator: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Iterator.html +.. _Tag to Properties: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TagProperties.html +.. _Table of Contents: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableofContents.html +.. _Link Report: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?LinkReport.html +.. _Table Merge: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableMerge.html +.. _Table Reduction: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableReduction.html +.. _Table Row/Column Filter: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableRowColumnFilter.html +.. _Table Value Filter: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableValueFilter.html +.. _Table Row/Column Sort: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableRowColumnSort.html +.. _SQL Query: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?SQLQuery.html +.. _Tree Merge: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TreeMerge.html +.. _Generator templates: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?GeneratorTemplates.html + + + +report_objects.TemplateREST object +---------------------------------- + +This object is a Python representation of an Ansys +Dynamic Reporting template object. When +this object is created, a GUID will automatically be generated for the +object and the date is set to the current time/date. The +report_objects.TemplateREST class represent features common to all +template types. Two sub-classes, report_objects.LayoutREST and +report_objects.GeneratorREST represent the generic Layout and Generator +templates. From each of these classes, a set of sub-classes representing +the specific template types are inherited. For information specific to +each template type, refer to the :ref:`subclass tree `. + +.. note:: + + TemplateREST objects should always be generated using the + server object :doc:`create_template() ` method. + + +Data members +^^^^^^^^^^^^ + +The following attributes are available on a TemplateREST object: + +- guid - string GUID. The default is **str(uuid.uuid1())** +- tags - The user-defined tags string for this object. Multiple tags + are space-separated. You can also access the tabs via the method + :ref:`get_tags() `. +- date - The time & date of the creation of this object. The default + is: **datetime.datetime.now(pytz.utc)** +- name - The name of the template +- report_type - The type of the report template (e.g. 'Layout:basic'). + The report_type is also set by the sub-class of the object. See + :ref:`this table ` for the + correspondence between report_type and template sub-class +- item_filter - The filter string for this report template. You can + also access the filter via the method + :ref:`get_filter() `. +- params - A Python dictionary of the parameters for this specific + report_type. You can also access the parameters via the method + :ref:`get_params() `. +- children - A list of the child templates of this template +- master - True if the parent data member is None +- parent - The parent template (if any) of this template + +Methods +^^^^^^^ + +.. _template_get_params: + +**template.get_params()** + +Get the parameters of the template. + +The parameter field contains all the fields that can be set via the GUI, +including filters, list of properties, individual settings for the +specific template type. While one can access all the values via this +method, we would suggest using the methods specific to the field you are +interested in for each field for sake of clarity and usability. + +**template.set_params({'param1': 1})** + +Set the parameters of the template. This function takes as input a +dictionary. + +The parameter field contains all the fields that can be set via the GUI, +including filters, list of properties, individual settings for the +specific template type. While one can access all the values via this +method, we would suggest using the methods specific to the field you are +interested in for each field for sake of clarity and usability. + +**template.add_params({'param1': 1})** + +Add the parameters to the existing template parameters. This function +takes as input a dictionary. + +The parameter field contains all the fields that can be set via the GUI, +including filters, list of properties, individual settings for the +specific template type. While one can access all the values via this +method, we would suggest using the methods specific to the field you are +interested in for each field for sake of clarity and usability. + +**template.get_property()** + +Get the properties of the template as a dictionary. A general +description of what properties are for a template can be found +`here`_. + +**template.set_property(property={})** + +Set the properties of the template. Input needs to be a dictionary. A +general description of what properties are for a template can be found +`here`_. + +**template.add_property(property={})** + +Add the properties of the template. Input needs to be a dictionary. A +general description of what properties are for a template can be found +`here`_. + +**template.get_sort_fields()** + +Get the sorting filter of the template. + +**template.set_sort_fields(['+i_date', '-i_name'])** + +Set the sorting filter of the template. This function takes a list as +input. The list is generated with '+' for increasing, '-' for +decreasing, followed by the property to sort by, with the same strings +as reported at this `link`_. Example: setting the sort +fields to be by increasing item date and decreasing by item name +becomes: ['+i_date', '-i_name'] + +**template.add_sort_fields(['+i_date', '-i_name'])** + +Add elements to the sorting filter of the template. This function takes +a list as input. The list is generated with '+' for increasing, '-' for +decreasing, followed by the property to sort by, with the same strings +as reported `link`_. Example: setting the sort +fields to be by increasing item date and decreasing by item name +becomes: ['+i_date', '-i_name'] + +**template.get_sort_selection()** + +Get the sort selection parameter. + +**template.set_sort_selection(value="all")** + +Set the sort selection parameter for the template.This function takes a +string as input, among the following options: + +- 'all' +- 'first' +- 'last' + +**template.set_tags(tagstring)** + +Set the tags for the template to the passed string. Multiple tags are +space-separated. + +.. _template_get_tags: + +**template.get_tags()** + +Returns the tags string for this object. Multiple tags are +space-separated. + +**template.add_tag(tag, value=None)** + +Adds a tag to the current tag string. If no value is passed, the simple +tag string is added to the tags string. If a value is specified, a +string of the form tag=value will be added to the tag string. + +**template.rem_tag(tag)** + +Remove the tag (and any potential associated value) from the current tag +string. + +.. _template_get_filter: + +**template.get_filter()** + +Get the item filter of the template. The item filter is encoded as a +string using the format explained `link`_. + +**template.set_filter(filter_str='')** + +Sets the item filter of the template. Takes as input a string. The item +filter is encoded as a string using the format explained +`link`_. + +**template.add_filter(filter_str='')** + +Add filters to the item filter of the template. Takes as input a string. +The item filter is encoded as a string using the format explained +`link`_. + +**template.get_filter_mode()** + +Returns the filter mode of the template. The possible outputs are: + +- 'items': corresponds to Incoming Items +- 'root_replace': corresponds to Database (replace) +- 'root_append': corresponds to Database (append) + +**template.set_filter_mode(value='items')** + +Sets the filter mode of the template. Takes as input a string. See +get_filter_mode for the accepted values. + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the documentation example in the +Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem306.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a root-level template +(i.e.: that doesn't have a parent template) in the database running +locally on port 8000. These would be the lines of code to create the new +template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_template = server.create_template( + name="Example Template", parent=None, report_type="Layout:panel" + ) + my_template.set_filter("A|i_src|cont|build_imagery;A|i_tags|cont|timestep=10;") + my_template.set_property({"width": "50"}) + server.put_objects(my_template) + + +SubClasses +^^^^^^^^^^ + +Each template type is represented by a subclass of the TemplateREST +class. There are two main subclasses: LayoutREST for the Layout template +types and GeneratorREST for the Generator template types. Each of these +subclasses has its own set of subclasses, to represent each specific +template type. + +.. _template_type_table: + +======================= ============================= ======================================== +**Layouts** **Template type** **Template API sub-class** +======================= ============================= ======================================== +basic `Columns`_ :ref:`report_objects.basicREST() + ` + +panel `Panel`_ :ref:`report_objects.panelREST() + ` + +box `Boxes`_ :ref:`report_objects.boxREST() + ` + +tabs `Tabs`_ :ref:`report_objects.tabsREST() + ` + +carousel `Carousel`_ :ref:`report_objects.carouselREST() + ` + +slider `Slider`_ :ref:`report_objects.sliderREST() + ` + +footer `Page Footer`_ :ref:`report_objects.footerREST() + ` + +header `Page Header`_ :ref:`report_objects.headerREST() + ` + +iterator `Iterator`_ :ref:`report_objects.iteratorREST() + ` + +tagprops `Tag to Properties`_ :ref:`report_objects.tagpropsREST() + ` + +toc `Table of Contents`_ :ref:`report_objects.tocREST() + ` + +reportlink `Link Report`_ :ref:`report_objects.reportlinkREST() + ` +======================= ============================= ======================================== + +======================= ============================= ======================================== +**Generators** **Template type** **Template API sub-class** +======================= ============================= ======================================== +tablemerge `Table Merge`_ :ref:`report_objects.tablemergeREST() + ` + +tablereduce `Table Reduction`_ :ref:`report_objects.tablereduceREST() + ` + +tablerowcolumnfilter `Table Row/Column Filter`_ :ref:`report_objects.tablerowcolumnfilterREST() + ` + +tablevaluefilter `Table Value Filter`_ :ref:`report_objects.tablevaluefilterREST() + ` + +tablesortfilter `Table Row/Column Sort`_ :ref:`report_objects.tablesortfilterREST() + ` + +sqlqueries `SQL Query`_ :ref:`report_objects.sqlqueriesREST() + ` + +treemerge `Tree Merge`_ :ref:`report_objects.mergetreeREST() + ` +======================= ============================= ======================================== + + +.. _LayoutREST: + +LayoutREST class +^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST + +Class that groups all the common attributes among Layout templates +(for reference, see `here`_). Its specific methods are: + +**template.get_column_count()** + +Get the number of columns. + +**template.set_column_count(value)** + +Set the number of columns. Takes as input an integer larger than 0. + +**template.get_column_widths()** + +Get the list of the widths of the columns. + +**template.set_column_widths([1.0, 2.0, 1.0])** + +Set the list of the widths of the columns. Takes as input an array where +each number represent the relative width of that column compared to the +other columns. + +**template.get_transpose()** + +Returns the Transpose columns/rows status of the template. It returns 0 +for off, 1 for on. It supports only Layout: template types. + +**template.set_transpose(value=0)** + +Sets the Transpose columns/rows status of the template. value = 0 for +off, value = 1 for on. It supports only Layout: template types. + +**template.get_skip()** + +Returns the Skip if no input items status of the template. It returns 0 +for off, 1 for on. It supports only Layout: template types. + +**template.set_skip(value=0)** + +Sets the Skip if no input items status of the template. value = 0 +(default) for off, value = 1 for on. It supports only Layout: template +types. + +**template.get_html()** + +Returns the HTML of the template. It supports only Layout: template +types + +**template.set_html(value=None)** + +Sets the HTML of the template. Takes as input a string. It supports only +Layout: template types. + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the "Slider Example" template in the +documentation example in the Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem307.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a root-level template +(i.e.: that doesn't have a parent template) in the database running +locally on port 8000. These would be the lines of code to create the new +template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_template = server.create_template( + name="Slider Example", parent=None, report_type="Layout:panel" + ) + my_template.set_column_count(2) + my_template.set_column_widths([1.0, 1.0]) + * my_template.set_html("

Example Slider Panels

キャンペー") + server.put_objects(my_template) + + +.. _GeneratorREST: + +GeneratorREST class +^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST + +Class that groups all the common attributes among +`Generator templates`_. Its specific methods are: + +**template.get_generated_items()** + +Get the Generated items flag. Returned values: + +- 'replace': corresponds to Replace +- 'add': corresponds to Append + +**template.set_generated_items(value)** + +Get the Generated items flag. Takes as input a string. See +get_generated_items() for the acceptable strings. + +**template.get_append_tags()** + +Get the value for Append template tags to new items. Returned values are +True for toggled ON, False for toggled OFF + +**template.set_append_tags(value=True)** + +Get the value for Append template tags to new items. The input needs to +be a boolean: True / False + + +.. _basicREST: + +basicREST object +^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Columns`_ Layout template +type. No specific methods. + +.. _panelREST: + +panelREST object +^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Panel`_ Layout template type. +Its specific methods are: + +**template.get_panel_style()** + +Get the style of the Panel. Possible returned values: + +- 'panel': corresponds to Titled Panel +- 'callout-default': corresponds to Callout +- 'callout-danger': corresponds to Callout Error +- 'callout-warning': corresponds to Callout Warning +- 'callout-success': corresponds to Callout Success +- 'callout-info': corresponds to Callout Info + +**template.set_panel_style(value='panel')** + +Set the style of the Panel. Takes as input strings. For the acceptable +values, see get_panel_style() + +**template.get_items_as_link()** + +Get the Show items as link toggle. 0 corresponds to Off, 1 corresponds +to ON. + +**template.set_items_as_link(value=0)** + +Set the Show items as link toggle. Takes as input an integer. 0 +corresponds to Off, 1 corresponds to ON. + +.. _boxREST: + +boxREST object +^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Boxes`_ Layout template type. +Its specific methods are: + +**template.get_children_layout()** + +Get the children layout. This method returns a dictionary where each +entry is a different child layout. + +For each entry, the key corresponds to the guid of the child template. +The corresponding value is an array that gives:: + + [ X, Y, Width, Height, Clip] + + +where Clip has the following values: + +- 'self': corresponds to Clip: To self +- 'scroll': corresponds to Clip: Scroll +- 'none': corresponds to Clip: None + +**template.set_child_position(guid=None, value=[0,0,10,10])** + +Set the children layout: position and size. The method takes as input +the guid of the child template you want to modify, and an array of 4 +integers that corresponds to [X, Y, Width, Height] that you want to +set. +Remember that if you are setting a new child template (not modifying +an existing one), you will manually need to set that this child +template has the current box template as the parent template. See the +example below for how to do it. + +**template.set_child_clip(guid=None, clip='self')** + +Set the children layout: clip parameter. The method takes as input the +guid of the child template you want to modify, and the clip type as a +string. Only the types enumerated in get_children_layout() are +acceptable values. +Remember that if you are setting the clip type for a new child +template (not modifying an existing one), you will manually need to +set that this child template has the current box template as the +parent template. See the example below for how to do it. + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the documentation example in the +Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem305.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child template of the +template "Box report test" that already exists in in the database +running locally on port 8000. These would be the lines of code to create +the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "Box reporttest"][0] + my_template = server.create_template( + name="Box Template", parent=my_parent, report_type="Layout:box" + ) + + first_box = [x for x in all_reports if x.name == "box_images"][0] + my_template.set_child_position(guid=first_box.guid, value=[40, 39, 320, 240]) + first_box.parent = my_template.guid + second_box = [x for x in all_reports if x.name == "box_movies"][0] + my_template.set_child_position(guid=second_box.guid, value=[370, 39, 355, 241]) + my_template.set_child_clip(guid=second_box.guid, clip="scroll") + second_box.parent = my_template.guid + third_box = [x for x in all_reports if x.name == "box_plot"][0] + + my_template.set_child_position(guid=third_box.guid, value=[41, 288, 685, 210]) + my_template.set_child_clip(guid=third_box.guid, clip="none") + third_box.parent = my_template.guid + + server.put_objects([first_box, second_box, third_box]) + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _tabsREST: + +tabsREST object +^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Tabs`_ Layout template type. No +specific methods for this class. + +.. _carouselREST: + +carouselREST object +^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Carousel`_ Layout template +type. Its specific methods are: + +**template.get_animated()** + +Get the Animated value. If the toggle is OFF (default), the method will +return 0. This means that the Carousel doesn't automatically change +displayed image, and the user needs to click to see the next item. + +A non-zero integer value means the Carousel will automatically change +displayed image. The value represents how long each image is displayed +for in ms. + +**template.set_animated(value=0)** + +Set the Animated value. For an explanation of what this parameter +represents, see the get_animated() method above. + +**template.get_slide_dots()** + +Get the Include side dots value. If zero (default), the method returns +1. If the number of side dots is larger than the number of items +displayed on the Carousel, a number of dots corresponding to the number +of items will be displayed. If the number of side dots is smaller than +the number of items displayed on the Carousel, it is ignored an no dots +are displayed. + +**template.set_slide_dots(value=20)** + +Set the Include side dots value. For an explanation of what this +parameter represents, see the get_side_dots() method above. + +.. _sliderREST: + +sliderREST object +^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Slider`_ template +type. Its specific methods are: + +**template.get_map_to_slider()** + +Get the Selected tags and sort to map to sliders. This function returns +a list where each element corresponds to one tag and its sorting order. +The accepted sorted orders are: + +- 'text_up': corresponds to Text sort up +- 'text_down': corresponds to Text sort down +- 'numeric_up': corresponds to Numeric sort up +- 'numeric_down': corresponds to Numeric sort down +- 'none': corresponds to No sorting + +An example of output of this function is: ['tag1|text_up', +'tag2|numeric_down', 'tag3|none'] where the slider is sorted by "tag1" +using the "Text sort up" sorting method, then by "tag2" using the +"Numeric sort down" method and finally by "tag3" using no sorting +method. + +**template.set_map_to_slider(value=[])** + +Set the Selected tags and sort to map to sliders. This function takes as +input a list where each element corresponds to one tag and its sorting +order. See function get_map_to_slider() for the accepted sorting order +values. The input for this function will have form: + +['tag1|text_up', 'tag2|numeric_down', 'tag3|none'] + +**template.add_map_to_slider(value=[])** + +Add new tags and sorting methods to the the Selected tags and sort to +map to sliders. This function takes as input a list where each element +corresponds to one tag and its sorting order. See function +get_map_to_slider() for the accepted sorting order values. The input for +this function will have form: + +['tag1|text_up', 'tag2|numeric_down', 'tag3|none'] + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the "Basic Slider" template in the +documentation example in the Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem308.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child of the template +"Tabs" in the database running locally on port 8000. These would be the +lines of code to create the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "Tabs"][0] + my_template = server.create_template( + name="Basic Slider", parent=my_parent, report_type="Layout:slider" + ) + my_template.set_filter("A|s_app|cont|Imagery Session;") + my_template.set_map_to_slider( + ["timestep|numeric_up", "variable|text_up", "mode|text_down"] + ) + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _footerREST: + +footerREST object +^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Page Footer`_ Layout +template type. No specific methods. + +.. _headerREST: + +headerREST object +^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Page Header`_ Layout +template type. No specific methods. + +.. _iteratorREST: + +iteratorREST object +^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Iterator`_ template +type. Its specific methods are: + +**template.get_iteration_tags()** + +Get the values for Iteration tag and Secondary sorting tag. The values +are returned as element 0 and 1 of a list. + +**template.set_iteration_tags(value = ['', ''])** + +Set the values for Iteration tag and Secondary sorting tag. The input +values are given as element 0 and 1 of a list, and they need to be +strings + +**template.get_sort_tag()** + +Get the values for Sort items by tag and Reverse the sort as booleans. +The values are returned as element 0 and 1 of a list. + +**template.set_sort_tag(value=[True, False])** + +Set the values for Iteration tag and Secondary sorting tag. The values +are given as a list of booleans. Note that if you set the first element +to False, the second will automatically be set to False as well, +regardless of what the input is. + +.. _tagpropsREST: + +tagpropsREST object +^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Tag to Properties`_ +Layout template type. No specific methods. + +.. _tocREST: + +tocREST object +^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Table of Contents`_ +Layout template type. Its specific methods are: + +**template.get_toc()** + +Get the values for Table of Contents, Figure List and Table List. Only +one option can be ON at any given time. The function will return a +string that corresponds to the option that is toggled on: + +- 'toc': corresponds to Table of Contents option +- 'figure': corresponds to the Figure List option +- 'table': corresponds to the Table List option + +If none of these option is ON (default when the template is created), +then the method will return None. + +**template.set_toc(option='toc')** + +Set the values for Table of Contents, Figure List and Table List. Only +one can be ON at any given time. Only the following values for option +are accepted: + +- 'toc': toggles on the Table of Contents option +- 'figure': toggles on the Figure List option +- 'table': toggles on the Table List option + +.. _reportlinkREST: + +reportlinkREST object +^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Link Report`_ Layout +template type. Its specific methods are: + +**template.get_report_link()** + +Get the guid of the linked report. If no linked report, it will return +None + +**template.set_report_link(link=None)** + +Set the guid of the linked report. It takes as input a valid guid. If +you want to set to link to no report, set the input to None + +.. _tablemergeREST: + +tablemergeREST object +^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `Table Merge Generator` +template type. Its specific methods are: + +**template.get_merging_param()** + +Get the value of Merging. Possible outputs are: + +- 'row': corresponds to Rows +- 'column': corresponds to Columns + +**template.set_merging_param(value='row')** + +Set the value of Merging. Input needs to be a string: either "row" or +"column". + +**template.get_table_name()** + +Get the value of Resulting table name. + +**template.set_table_name(value = '')** + +Set the value of Resulting table name. Input should be a string. + +**template.get_sources()** + +Get the values of the Select source rows/columns. The output is a list +where each element is a different source. Each element has the following +form: 'row_name|merge_operation' where merge_operation can have one of +the following values: + +- 'duplicate': corresponds to Allow Duplicates +- 'merge': corresponds to Combine Values +- 'rename_tag': corresponds to Rename Using Only Tag +- 'rename_nametag': corresponds to Rename With Name and Tag + +**template.set_sources(value=[])** + +Set the values of the Select source. The input needs to be a list where +each element is a different source, with the form explained in the +get_sources() method section. + +**template.add_sources(value=[])** + +Add some values to the Select source. The input needs to be a list where +each element is a different source, with the form explained in the +get_sources() method section. + +**template.get_rename_tag()** + +Get the value of the Tag to use when renaming field. Output will be a +string. + +**template.set_rename_tag(value='')** + +Set the value of the Tag to use when renaming field. Input should be a +string. + +**template.get_rename_tag()** + +Get the value of the Tag to use when renaming field. Output will be a +string. + +**template.set_rename_tag(value='')** + +Set the value of the Tag to use when renaming field. Input should be a +string. + +**template.get_use_labels()** + +Get the value of the toggle for Use row/column labels as row/column IDs. +Output is 0 for toggled OFF, 1 for toggled ON. + +**template.set_use_labels(value=1)** + +Set the value of the toggle for Use row/column labels as row/column IDs. +Input should be an integer: 0 for toggled OFF, 1 for toggled ON. + +**template.get_use_ids()** + +Get the value for the Row/Column to use as column/row IDs field. + +**template.set_use_ids(value='')** + +Set the value for the Row/Column to use as column/row IDs field. Input +should be a string. This method will not work if get_use_labels() +returns 1. + +**template.get_id_selection()** + +Get the value for the Row/Column ID selection. The possible outputs are: + +- 'all': corresponds to All IDs +- 'intersect': corresponds to Only Common IDs +- 'select': corresponds to Select Specific IDs + +**template.set_id_selection(value='all')** + +Set the value for the Row/Column ID selection. Input should be a string +among the ones listed in the get_id_selection() method. + +**template.get_ids()** + +Get the value for the Select column/row IDs values. If the Column/Row ID +selection is not set to Select Specific IDs, it will return an empty +list. Otherwise, it will return a list where each element is an ID. + +**template.set_ids(value=[])** + +Set the value for the Select column/row IDs values. If the Column/Row ID +selection is not set to Select Specific IDs, the method will bail out. +The input is a list, where each element is an ID as an integer. + +**template.add_ids(value=[])** + +Add IDs to the Select column/row IDs values. If the Column/Row ID +selection is not set to Select Specific IDs, the method will bail out. +The input is a list, where each element is an ID as an integer. + +**template.get_unknown_value()** + +Get the value for Unknown value. It returns a string. Default is 'nan'. + +**template.set_unknown_value(value='nan')** + +Set the value for the Unknown value. Input needs to be a string. + +**template.get_table_transpose()** + +Get the value for Transpose results. Output is an integer: 0 for OFF, 1 +for ON. + +**template.set_table_transpose(value=0)** + +Set the value for Transpose results. Input must be an integer: 0 for +OFF, 1 for ON. + +**template.get_numeric_output()** + +Get the value for Force numeric table output. Output is an integer: 0 +for OFF, 1 for ON. + +**template.set_numeric_output(value=0)** + +Set the value for Force numeric table output. Input must be an integer: +0 for OFF, 1 for ON. + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the "Merged Table" template in the +documentation example in the Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem309.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child of the template +"Columns" in the database running locally on port 8000. These would be +the lines of code to create the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "Columns"][0] + my_template = server.create_template( + name="Merged Table", parent=my_parent, report_type="Generator:tablemerge" + ) + my_template.set_generated_items("replace") + my_template.set_table_name("Simple_test") + my_template.set_sources(["temperature|rename_nametag", "Distance|merge"]) + my_template.set_rename_tag("\_index\_") + my_template.set_use_labels(0) + my_template.set_use_ids("Distance") + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _tablereduceREST: + +tablereduceREST object +^^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `Table Reduction`_ +Generator template type. Its specific methods +are: + +**template.get_reduce_param()** + +Get the value of Reduce. Possible outputs are: + +- 'row': corresponds to Rows +- 'column': corresponds to Columns + +**template.set_reduce_param(value='row')** + +Set the value of Reduce. Input needs to be a string: either "row" or +"column". + +**template.get_table_name()** + +Get the value of Resulting table name. + +**template.set_table_name(value = 'output_table')** + +Set the value of Resulting table name. Input should be a string. + +**template.get_operations()** + +Get the values for the Reduce operations as a list. Each element +corresponds to a different operation. Each element is a dictionary, +where the following keys are presented: + +- 'source_rows': corresponds to the name(s) of the rows/columns used in + the operation +- 'output_rows': corresponds to the Output row/column name +- 'output_rows_from_values': False (OFF) / True (ON) for the Use unique + values from a column/row as column/row names +- 'output_column_select': corresponds to the "Select columns/rows" + field +- 'output_columns': corresponds to the Column/Row name field +- 'output_columns_from_values': False (OFF) / True (ON) for the Use + unique values from a column/row as a new columns/rows toggle +- 'operation': corresponds to the Operation field. Possible values: + + - 'min': Minimum + - 'max': Maximum + - 'count': Count + - 'sum': Sum + - 'diff': Difference + - 'mean': Mean + - 'stdev': Standard deviation + - 'skew': Skew + - 'kurtosis': Kurtosis + +**template.delete_operation(name = [])** + +Method to remove an entire Reduce operation. Takes as input a list with +the name(s) of the source rows/columns used in the operation. So for +example to delete the third Reduce operation from the following panel: + +.. figure:: lib/NewItem293.png + :alt: Image + :align: center + + +use: + +.. code-block:: python + + template.delete_source(name=["temperature", "pressure"]) + + +To delete the first operation, use: + +.. code-block:: python + + template.delete_source(name=["temperature"]) + template.add_operation( + name=["\*"], + unique=False, + output_name="output row", + existing=True, + select_names="\*", + operation="count", + ) + + +Add a new Reduce operation. + +- 'name': corresponds to the name(s) of the rows/columns used in the + operation. Input needs to be a list of strings +- 'unique': corresponds to the Use unique values from a column as row + names toggle. False is OFF, True is ON +- output_name: corresponds to the Output row/column name. +- existing: corresponds to the Use existing columns/rows toggle. False + if OFF, True is ON. +- select_names. If existing is set to True, it is used for the Selected + columns/rows field. If existing is set to False, this field is used + for the Column/Row name. +- operation: corresponds to the operation field. See get_operation() + for the acceptable values. + +For example to create the operation in the following widget: + +.. figure:: lib/NewItem294.png + :alt: Image + :align: center + + +you would run: + +.. code-block:: python + + template.add_operation( + name=["temperature"], + unique=True, + output_name="MinTemp", + existing=False, + select_names="simulationA", + operation="min", + ) + template.get_table_transpose() + + +Get the value for Transpose results. Output is an integer: 0 for OFF, 1 +for ON. + +**template.set_table_transpose(value=0)** + +Set the value for Transpose results. Input must be an integer: 0 for +OFF, 1 for ON. + +**template.get_numeric_output()** + +Get the value for Force numeric table output. Output is an integer: 0 +for OFF, 1 for ON. + +**template.set_numeric_output(value=0)** + +Set the value for Force numeric table output. Input must be an integer: +0 for OFF, 1 for ON. + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the "ASCII reduce" template in the +documentation example in the Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem310.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child of the template +"Merge reduce example" in the database running locally on port 8000. +These would be the lines of code to create the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "Merge reduce example"][0] + my_template = server.create_template( + name="ASCII reduce", parent=my_parent, report_type="Generator:tablereduce" + ) + my_template.set_generated_items("replace") + my_template.delete_operation(name=["\*"]) + my_template.add_operation( + name=["\*"], + unique=True, + output_name="User", + existing=False, + select_names="Version", + operation="count", + ) + my_template.add_operation( + name=["\*"], + unique=False, + output_name="Totals", + existing=False, + select_names="Version", + operation="count", + ) + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _tablerowcolumnfilterREST: + +tablerowcolumnfilterREST object +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `Table Row/Column Filter`_ +Generator template type. Its specific +methods are: + +**template.get_table_name()** + +Get the value of New table name. + +**template.set_table_name(value = 'output_table')** + +Set the value of New table name. Input should be a string. + +**template.get_filter_rows()** + +Get the value of Rows... The values are returned as a list of strings, +where each element corresponds to a row value. + +**template.set_filter_rows(value=['\*'])** + +Set the value of Rows... The input value needs to be a list of strings, +where each element corresponds to a different row value. + +**template.add_filter_rows(value=['\*'])** + +Add new values to the value of Rows... The input value needs to be a +list of strings, where each element corresponds to a different row +value. + +**template.get_filter_columns()** + +Get the value of Columns... The values are returned as a list of +strings, where each element corresponds to a column value. + +**template.set_filter_columns(value=['\*'])** + +Set the value of Columns... The input value needs to be a list of +strings, where each element corresponds to a different column value. + +**template.add_filter_columns(value=['\*'])** + +Add new values to the value of Columns... The input value needs to be a +list of strings, where each element corresponds to a different column +value. + +**template.get_invert()** + +Get the value of Select the rows/columns to remove. Returns 0 or False +if it is toggled OFF, 1 or True if it is toggled ON + +**template.set_invert(value=False)** + +Set the value of Select the rows/columns to remove. Set it to 0 or False +to toggle OFF, set to 1 or True to toggle ON + +**template.get_sort()** + +Get the value of Sort rows/columns by selection order. Returns 0 or +False if it is toggled OFF, 1 or True if it is toggled ON + +**template.set_sort(value=False)** + +Set the value of Sort rows/columns by selection order. Set it to 0 or +False to toggle OFF, set to 1 or True to toggle ON. This method works +only if the Select the rows/columns to remove is toggled OFF. + +**template.get_table_transpose()** + +Get the value of Transpose the output table. Returns 0 or False if it is +toggled OFF, 1 or True if it is toggled ON + +**template.set_table_transpose(value=False)** + +Set the value of Transpose the output table. Set it to 0 or False to +toggle OFF, set to 1 or True to toggle ON + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the "Filter" template in the +documentation example in the Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem311.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child of the template +"RC Filter Generator" in the database running locally on port 8000. +These would be the lines of code to create the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "RC Filter Generator"][0] + my_template = server.create_template( + name="Filter", parent=my_parent, report_type="Generator:tablerowcolumnfilter" + ) + my_template.set_filter_rows(["0", "fuselage", "\*wing\*"]) + my_template.set_filter_columns(["1", "Tria3", "Tetra\*"]) + my_template.set_table_name("RC_Filtered_Table") + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _tablevaluefilterREST: + +tablevaluefilterREST object +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `Table Value Filter`_ +Generator template type. Its specific methods +are: + +**template.get_table_name()** + +Get the value of New table name. + +**template.set_table_name(value = 'value filtered table')** + +Set the value of New table name. Input should be a string. + +**template.get_filter_by()** + +Get the value of Filter by values in as a list. The first element is +'column' (default) or 'row'. The second element of the list of the +number of row/column set in the following field. + +**template.set_filter_by(value = ['column', '0'])** + +Set the value of Filter by values in as a list. The first element needs +to be 'column' or 'row'. The second element of the list of the number of +row/column set in the following field, and needs to be a string. + +**template.get_filter_value()** + +Get the value of Filter. Each different type of filter will return a +different type of output: + +- 'Range of values': it returns a list of three elements. The first + element is 'range'. The second and third are strings that represent + the min. and max. of the range. +- 'Specific values': it returns a list of two elements. The first + element is "specific". The second element is a list of strings. Each + element in this second list is one entry in the Select specific + values... field +- 'Upper % of values': it returns a list of two elements. The first + element is "top_percent". The second element is a float that + corresponds to the Upper percent of values field. +- 'Upper # of values': it returns a list of two elements. The first + element is "top_count". The second element is an integer that + corresponds to the Upper number of values field. +- 'Lower % of values': it returns a list of two elements. The first + element is "bot_percent". The second element is a float that + corresponds to the Lower percent of values field. +- 'Lower # of values': it returns a list of two elements. The first + element is "bot_count". The second element is an integer that + corresponds to the Lower number of values field. + +**template.set_filter_value(value=['range', '', ''])** + +Set the value of Filter. Each different type needs a different type of +input. See the description of get_filter_value() possible outputs to know the +details of the accepted formats. + +**template.get_invert_filter()** + +Get the value of Invert filter sense. Returns 0 or False if it is +toggled OFF, 1 or True if it is toggled ON + +**template.set_invert_filter(value=False)** + +Set the value of Invert filter sense. Set it to 0 or False to toggle +OFF, set to 1 or True to toggle ON + +**template.get_values_as_dates()** + +Get the value of Treat values as dates. Returns 0 or False if it is +toggled OFF, 1 or True if it is toggled ON + +**template.set_values_as_dates(value=False)** + +Set the value of Treat values as dates. Set it to 0 or False to toggle +OFF, set to 1 or True to toggle ON + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the documentation example in the +Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem304.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child template of the +template "Value Filter Example" that already exists in in the database +running locally on port 800. These would be the lines of code to create +the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "Value Filter Example"][0] + my_template = server.create_template( + name="Generator", parent=my_parent, report_type="Generator:tablevaluefilter" + ) + my_template.set_sort_selection(value="first") + my_template.set_table_name("ValueFilteredTable") + my_template.set_filter_by(value=["row", "Quad4"]) + my_template.set_filter_value(value=["range", "100", ""]) + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _tablesortfilterREST: + +tablesortfilterREST object +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `Table Row/Column Sort`_ +Generator template type. Its specific methods +are: + +**template.get_table_name()** + +Get the value of New table name. + +**template.set_table_name(value = 'value filtered table')** + +Set the value of New table name. Input should be a string. + +**template.get_sort_rows()** + +Get the Select columns to sort rows by. This returns a list where each +element is a filter. Each elements start with '+' or '-' to indicate the +direction of the sort, and the string of the row name to sort by. + +**template.set_sort_rows([])** + +Set the Select columns to sort rows by. This function takes a list as +input. The list is generated with '+' for increasing, '-' for +decreasing, followed by the row to sort by. Example: setting the sort +fields to be by increasing row "temperature" and decreasing by row +"pressure" becomes: ['+temperature', '-pressure'] + +**template.add_sort_rows([])** + +Add the Select columns to sort rows by. This function takes a list as +input. See set_sort_rows() for the description on how the list has to be +formatted. + +**template.get_sort_columns()** + +Get the Select rows to sort columns by. This returns a list where each +element is a filter. Each elements start with '+' or '-' to indicate the +direction of the sort, and the string of the column name to sort by. + +**template.set_sort_columns([])** + +Set the Select rows to sort columns by. This function takes a list as +input. See set_sort_rows() for the description on how the list has to be +formatted. + +**template.add_sort_columns([])** + +Add the Select rows to sort columns by. This function takes a list as +input. See set_sort_rows() for the description on how the list has to be +formatted. + +Example of usage. Let's assume you want to create a template like the +one shown in the picture (from the "Sorted" template in the +documentation example in the Ansys Dynamic Reporting installer): + +.. figure:: lib/NewItem312.png + :alt: Image + :align: center + + +.. figure:: lib/NewItem313.png + :alt: Image + :align: center + + +Let's also assume you want this template to be a child of the template +"RC Sort Filter Example" in the database running locally on port 8000. +These would be the lines of code to create the new template: + +.. code-block:: python + + from ansys.dynamicreporting.core.utils import report_remote_server, report_objects + + server = report_remote_server.Server("http://localhost:8000", "nexus", "cei") + all_reports = server.get_objects(objtype=report_objects.TemplateREST) + my_parent = [x for x in all_reports if x.name == "RC Sort Filter Example"][0] + my_template = server.create_template( + name="Sorted", parent=my_parent, report_type="Generator:tablesortfilter" + ) + my_template.set_sort_rows(["+User", "+Version", "+Date"]) + my_template.set_generated_items("replace") + my_template.set_sort_columns(["+Labels"]) + server.put_objects(my_template) + server.put_objects(my_parent) + +.. _sqlqueriesREST: + +sqlqueriesREST object +^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `SQL Query`_ Generator +template type. Its specific methods are: + +**template.get_db_type()** + +Get the Database type. Possible outputs are: SQLite / PostgreSQL + +**template.set_db_type(value='SQLite')** + +Set the Database type. Input needs to be a string. Only two acceptable +values: 'SQLite' or 'PostgreSQL' + +**template.get_sqlite_name()** + +Get the SQLite filename. + +**template.set_sqlite_name(value='')** + +Set the SQLite filename. Input needs to be a string. The method will not +work if the Database type is set to PostgreSQL + +**template.get_postgre()** + +Get the PostgreSQL parameters. This method returns a dictionary with +five entries, corresponding to: + +- Database name: +- Hostname: +- Port: +- Username: +- Password: + +**template.set_postgre(value = {'database'**: '', +'hostname':'localhost', 'port': '5432', 'username':'nexus', +'password':'cei'}\ **)** + +Set the the PostgreSQL parameters. Input needs to be a dictionary with +the keys: 'database', 'hostname', 'port', 'username', 'password'. Note +that all keys are strings. See get_postgre() method for the description +of each element. The method will not work if the Database type is set to +SQLite + +**template.get_query()** + +Get theSQL query text: field. + +**template.set_query(value='')** + +Set theSQL query text: field. Input needs to be a string. Note that no +check on the validity of the SQL query itself is performed. It is up to +the user to make sure the query is properly formatted. + +**template.validate()** + +Validate the database. This method should be run after all the +parameters for the database connection have been set. The method +returns: + +- Boolean parameter: True is the database can be validated, False + otherwise. +- Error message: If the connection is validated, this will be an empty + string. Otherwise, and error message with more details about the + failure will be returned. + +.. _mergetreeREST: + +mergetreeREST object +^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, GeneratorREST + +Class that corresponds to the `Tree Merge`_ Generator +template type. Its specific methods are: + +**template.get_merge_rule()** + +Get the row merging rule. + +**template.set_merge_rule(value='all')** + +Set the row merging rule. Legal values: 'all', 'common', 'first' + +**template.get_match_rule()** + +Get the rule for matching rows. + +**template.set_match_rule(value='both')** + +Set the rule for matching rows. Legal values: 'key', 'name', 'both' + +**template.get_tree_name()** + +Get the name that the generated tree will be given. + +**template.set_tree_name(value='treemerge')** + +Set the name that the generated tree will be given. Input needs to be a +string. + +**template.get_fill_value()** + +Get the value to be used to fill unknown cells. + +**template.set_fill_value(value='')** + +Set the value to be used to fill unknown cells. Input needs to be a +string. + +**template.get_header_tag()** + +Get the name of the tag (if any) to be used to generate an output tree +header. + +**template.set_header_tag(value='')** + +Set the name of the tag to be used to generate an output tree header. +Input needs to be a string. An empty string (the default) specifies that +no tree header be generated. diff --git a/doc/source/lowlevelapi/index.rst b/doc/source/lowlevelapi/index.rst new file mode 100755 index 00000000..61ae9a24 --- /dev/null +++ b/doc/source/lowlevelapi/index.rst @@ -0,0 +1,23 @@ +Low Level Python API +==================== + +.. _Nexus: https://nexusdemo.ensight.com/docs/html/Nexus.html + +.. toctree:: + :maxdepth: 4 + :hidden: + + GettingStarted + DataItemObject + TemplateObjects + ServerObject + DatasetandSessionObjects + +.. _lowlevel: + +The low level Python API for Ansys Dynamic Reporting +allows the user to have full control of all the features +of ADR and the Nexus server. It is a very powerful API, but +at the same time it can be quite complex and requires the end user +to fully understand how ADR works in all its components. For a +full description of ADR as a package, see `Nexus`_ diff --git a/doc/source/lowlevelapi/lib/NewItem293.png b/doc/source/lowlevelapi/lib/NewItem293.png new file mode 100755 index 0000000000000000000000000000000000000000..0ee0ced006d56a1ab29f0ffb4c96754527ee9d91 GIT binary patch literal 27314 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 literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem304.png b/doc/source/lowlevelapi/lib/NewItem304.png new file mode 100755 index 0000000000000000000000000000000000000000..85ed434f71079eba6664fa90ec115b199cbde1f8 GIT binary patch literal 14492 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 AbN~PV literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem306.png b/doc/source/lowlevelapi/lib/NewItem306.png new file mode 100755 index 0000000000000000000000000000000000000000..055205753a7689fd8b870f26124838677532a06d GIT binary patch literal 35137 zcma&N1yCH}(gnICBuIh;cTFHbfZ*;L+}(l%U))_1g1cLAcUasK+}#$3#U;3tH{{BH z|NFmJ^{9enre6WCCOm2!!%UQd9{9g3AJdo^>O>1ol|G)4>Ej z;2e}BghAyaM7zKSys40^5C~Ki`Re}j3t$_`R#MXe1Va7w^b6N(Q)mnVeV_RxDx~77 zcesS+Nd)tveyp%E?1-AfgK`G?(pQveea}}6uxD=@!+J|T7+m(2`KIo?bTHkTrcsNK z^eEl%y7h=5-@bb=;y`>;RCyCSW~N&9`weD?|JzlA z4-Xl~ETc7d2M0q(rM1m9&9^PXzeadj&W19VyxPuqSr%wgl9G}rKp@`_w*%^JGNvPG z`CJx6AQ0I;dLRhY!67CQK_uh?>@c2g^YWo;-msNL1c9o{+aBrE(1oR+{->Y7SSPDB z>_(190fC}43*<8+;K>)0fG5xZf+o<%RLI0ePGszH5H`r*Tf?*wRmIP^R3Pmy{ZG>hKGJ5OPGqfc!2r(!yG>4NE;O_WIrBic)V`;{@ z%gnDE^AUtRFt=v{_-;lB$)>7v1;t6Mx=PwvrDuaYGy13n=DgI^JQYlx#?dy`Iy6 z{dxCbvUr)QGvK<#xa&8KP{td*j`JM!J6f4ThqjFTSZL<}p8zJ6G`fCM>Y2(}fR?F< zDb{^!s{KiCq2WPJa~yn4?35)E5jl}8DFz<$m{hyHU1C(o#hYZgDyi`S^EF5|JlzE= zL^Z*MW2uPFJ;;rC@RPk21&n%Kt>+Zvb$eos-$nxuBJ&#ZjgtwP4Lr&Z*bCFi$Ind2 z%wx&180%V6f=ZT^WL|n|!FZ&cQgvpMnLW66IoVN7`ciSl#hOnejctX2_X{hesHh0b ze@u4Jyv{6^)5Rrk{e}A;sS3X7AHNLuPBS+%)1T)*3!c}e1;KckIWo4bPb=l}2RyXY z&nfV{uk0N36747KtYYHqCTDt!^hGzu&0;Y?9WGlaNJYzW9ZF_MOL8j-vqH3GM-+0C z-1L7~%TTpVFG^q+xNSH_4tMPZeCHt5Q(hme{ORa~u|vo0rQ$)Ua_Bz0n?`|gJV%pk z{JV98`ZJiE#|$X*c=bsQMeFxD8bBK(zfm{GZVl@^kH@ zHv|C$;?-`nf7g08!ee3Oem;8HM^@{4V)zuPt4G5eD>9boPfs6o{qpJBo&jV}=lL78 z`m6ODKmt%l6b25(ythIF4nq8Uke}t#E;@K}5a_qqB`NIVvXH7OF>ARv<>IMn>?0Yy zPJ=?eLHhumqw5OX7y6?Rqhusu{34xO8nZaAWku|wT1pzl!(piLkoI(zGzN^|=ES6{ zoCEy$RTYbdR=nC?)^Pb2y$)4wtg8#YuFMgt#&KyqwRpy0=d0)m<nP3nH^+tV=q!S zNf+fQzCcejN;7Lc>2>6Vou=oN5c%GB>e>}K_0EsHZMOI4BhLnCL}&viU`+k3s*(z9i3enENfs7v9b^J(icl; zWH>vE`mRBB`ZzF7yP(c2DdCdPcfuKcBT&Q~7yoX2V-1D}ok=}ETg~#UH^QTwK7{Wx z$_PMLkBequ9>uOv?R3`ylZn1dpYb$=>?Hp{ctEQ|uRFquC#$dtbRMh`*V8Ay;EZSS z4(xKHRxL50WG)nW*`ZgQZd)vKsM3K>V|Vqv6}Vg3mzH;;7A2**?EDPaWvqQ}mpI0Y z5V=HX)rsp6ye88A&9&77c?9jl6qHSn9@bm#Ao6MnhL^hUl;D0d(rfz#iWD`?8^!t{}10gWWdw4_>_j(}`4*;$86=gmU{5D3>_nr zOdG~KjOniM%SDyABC4Q!EvS);5wiY9IQ9H?rIck!w+ts)h$RLlj`ATL7{zEx?WG^B z?^0IJR-0^?%A)PKCs+iZ)5B(3?6tKE7iS1Kv>6|Sh!GKr>V)B?HFs0f_|g2!h&X5x zkL_O3iT=12cxZzs5ymF#0({bUsEtHO1ukTn6>Llt3!Ftx=wRj zWp?%5?Hi#_LivD~X1F^>ds*=8njf^vu0K*!|Kd&Yx|D)`y{%<8mb$X8*!Q0Tsv9JY zhuQ~sB>_!UC@qKL`%GWFQQwjipSx<_)p1<`A*B`-WpP8~n-;P58iGlN+j=ph&Fr?u zg~;~$d@Q;z@uxv8Yft2P*UOT1P&~n4x6C$Uu5^jW$gDzY!!v_>7~7~C>{jdj(c75* zi*BFjULJoY{mbQYWGP3V=lX$>iyyj8?|RtY#u_!&2P3EGKt?yK%UIT(tuTmLcyj6p zycoGUoX7cFYi^Skk18vI`O)MKj%}Fx`O&uS;&<>obdMbeT)4kYF3I^mTjfHmv-{(e zJF2CtzyQu3nNi54E3nI*a(33iuhF@847kQfD6t>#*faa+&Zg#xR+6pDXz0F~B9il9 zHQm&PQLGN_|Kv2Sp?^JRiMx16+4e`A#3fj?{UBmrR}+I?Uxx0`x$WDgPC4h`Vc1fe zq##R!bqVIS(MH^{v(;jx=Iax^V}|fHi7gM!d3H%BzNXNy(es-m&O=M&OoZMmjyGtT zL4A;S+&xG8vhFgm@jkf=Fg!U^9ynwXMNXm&trpiRf{X7q{fA|FNR$d7kl>of*)WGW zY#{!8gy*<0&2{Bw#AS1zqwNIcW^ePUJf!n`EqF*vK7RhejTuXQi6{sHeH6(EP%ufg z6PlZ}9sZL1qOXYelL25nRo>|8zDhL`Xnv~$<9Nf3 zN`AW4+(*1K$5QBSG_1ULz;6;V2znb@IUw0<)DHKfGIxwvUAWFklyA@F`o@he&xt}L zlxyFai*Q??Y{u<0Of!vZkoQ8NZgfecexJp>zQ(oSG--%q%fa&lvw%{TpM`3hr)!4y z$5g0MoYAQf=^x_wA3Cu&b6*gcSHI8v*ylAQ-5_Q9814j(jL(6Gaep|jJv@qhcnPY^ zb(A$TnFNmuyMDiIWZn$2RV_iHP1;EiJul^A7ijaZ^ZvSg!X+!eB%)N_fENN6UeQzz;&Bo&JK zLH+_%qY}bFrGfUbWLvNjS~zAEX`Ns?tlLVV(I_y&MP4r8W*zg+>Ri{YhQSQv) z>xduY?X}IBmaJ;8rA3=7IMO;om;ZBY*ZLf?)R6VkNv~Ae>m6SkXR#(bz8PoK$OkoL z5J)3LNK!?er}5&=VSYc}5_d@MuH*i9-z)-m>Uyx2+1GfJI*~5i>B=A9*B!MBV%u4J~;peCKkT9^Pp+ z{g(|!a;M*39K$r>XdkQk;;olN?V!8-?S+HkyhqFS;CEb!mQb{fs$n@}-1Gx?R?_Li z#|Crjo_%LG<3?ze{d(=;$kR%HPg&k*g##I=ogSVn15vm8?SBx|KSS#uebiqVMfevp zp*+gH|F!IK%;$c0SZ{7`uLJ{i$P6d51mVzYiJonbs&hrr?>_R7!)LwrfW@nub%$U( zc4Mm-5`mJ6Ug0wIAs>7r1SWt@tBJ^C7Hi%Am$sAY7+OG?9~-YTVr0k5VD%)P3NQC-uKtN@{yZ_o66kNwUUi{NIAFt>DAa6!Uo@ zXPdOB;ON_wmdeQfD}^(XstD@orn`*X0O+NHgYRs8=m4trS>yp}cKEm?OfYV;E_0?> zZKZ0%_YI5|7rFmDU<`n-Q(_lQ@d_jK5pTG= zCu#QzQ#|(6625~BUZ1h%pJ|xTvwe?wLIgurUQ;e_zWzMH_Q}4W{<*)u7cW%NULQ(e zL09HkVC_!T$^C?@yA-7wC6ww=8^jbRbmb{~Q^exwljy_45rV&om;IoiJ@v4371XHv zHgjs}8ux97%zEl96l5n{SIFz2Ot?cyz@i*%I2l ze%6P>f=&*?ZYwHEt_=)%uEISgTwP#A)gT?FO}_XpAHOW-gp!Zd07Z*}J{oJr#*$q1 z$SP04i|?zJ3pWB*t86{Bh6HyxQu54lI57D0b6`9PW(|-Y6ARzNu!GZ ziuIzT$lY<>vs7y@`$y~4QgiWFAHdDZ*6DDFM2=e8+9tvvT2B@;BvqwUv%J7PRdsCY zihAJ^!WX4S?Ab>-vRJ#*wBYQeyz$*|%DnLeba~7&yd#p5J&j%K2d2ToqV8!Gbwwek z=tquDyVNh0kwu8ClNr@!9J;@3HDeMKP@F<$2FJvw(|c&fb)Cg=f3y^l&EGz&Q)zdm zpWc6OqOIRw&dj|?BOLXFt*`CWVVFg;?Mdgp82 z`5DsOuXj>r3N|7y>vv&^`uV9gZJOb*;5PA;yN;Bd3tC?y$J5PEO(#8s(|E?xP2OU6 zgZhsc>HK{Bzbu8_q?V&9p}k~D8=ELd9_YRxva@Q^!0U2m0c{~+6DWLLGH!sqL8|>H z+3k1h%j_UunbdgtEUR^D!PDmr0L5_4)4f99=i^#!@$F=zwVNp)jsIHkDR-Wb*1voP z$GZ$g*lnWYdyf<_jv!Ab^qo@!!PZ`KvVqjxtQ2L8r#}HpvlF(XVsOPe9PPQd!Fn+b&Tbij~RvD1p*=W+|yO$mQ+ZYq8rM| zlgrLV2CPen!-0^$Js!3Xx%76|8T1t8RDFFpC9=60uw|&FxM!Yc(HQZgObk2LChv#$ zsksanMHUPm6gA2F$C>Dlo&rVa%3*%7{TrRBhCII}1Zgu;fsf^}g^B{45dmVGix%r*=d2m}aq0_YB+aV{q;7(`z9cb`qIJVIwHYyo&p{nlTWmPF8}%EH*1y!; zFQy%eUStKHajD$K;Pak4I_QzeVYN8A$-!LvXMy&9mDZfNB9{)4&FX=J8PVkUs6jNX z{9VzfjC6vk7tFwO&=eC}Z>Jy)80$bxU!Mh#K5Ffl$ZgYzqw0*(FF`coPBAi&Z_AoI z`qOKQqN~y#Wh0~U$vU76t2lEP6gHo*S%lEr#EF2Of%-m)rFphe#lgi}v$QkhY9nZ}$u}d^3!1st33IW%NtNq2v%ina^C%s1Nje^R71p-nNl7`x=UUR{ZyCtd}>2&-<4CjhJVw7&{ePCqBqTr{_XZ?%P(H0JJSQ{ zTu&ptf(=a5K$7(uuST7NlaQgZ-ou-r#SCNltZ*9Y_amYgkYb!5qL~_k-Z9V2p$oeS zC}!;OWt;YXFo`99TTcuA4R2RFLeY`-;&y)ulxi{)8+zXA!PlNx1%0!$a{XXG_p-pm zdVdqkOFotk%q@i(P^OaAb2E40%%)K0{zcl(iC8u8=Zsy#e&mCWV8j}?gXVd8R8dt*s$=aVw`xL8E~3$y0WfJd>snw zm_wHqgX+2nbWVv@uDH~Chk-atIgPZ&`!QR5w1u-H@op-M zJZo(^UUxmf+22v^Ep1P1B5;nK{QL>J-MPjmX}+?^FV9qcqFE*Tr`1xmE$Vlxqni!U z)nFS+aNFqkXjz@!c5HLkMNsHdOmPyM_I=96X652a&O72{>z@W{c6PLGg@Eh2H0KWi zne3MIFK~4$N;^Z;~M^T zXBtO2I@jc0#+a!2IDm27`9t`yhHOw8HfRdXh}*e1g{1tl&n6ocoW9do5$iI|2k%S6 zytc2@h-)5~87#i1J$~6aTYVev<#5NFTz#Qw7rWEy=wZWqsGfbLS{8J2N4fQS@TwqY z!Ei4eYY&b3a`eR}$vDRC?_biIdl6^Co}Eglde2;1cfg>Mc1|H&8R1)LfJ~__#Tx18 z_!;lmhzJ+3$2V2xuS|Kgn$AH&-?nPpyv|Rt}nwP7MgXD@1cI-f) zCCu!bI3~r0+!$Vg@UYjae?t^_J|Ar*ULSR^Bq^Q|zSpLAhNtDls?+7p<}T&c;!x^7wZ-}O&dAER^)NH*qx42WF|ElP zMmUIjlEJw;^*EnskDC=5YvP43F0d??%!znPPA6t1CNAB^hOWqf=W@&2edvQDKu01V z{RVt2oBc4c|NFMhzTRRpX>aw5e6W8aKT}oDW)&?;)CEp*=Bqxj*hGf$yW{p_BXo>m z*wXs*F4@cCi1;b0kq;slJ@`@kUv&bMU3wgw4Z3iHv<9Yc2a5{IV^jEx^2Ic~R<@jb zeEQP2-spcc`ZLfd&-ZAkRGPH0QOU9{U0%@|e>F8umPnnjyJ?9?+YV44d4u9sX!?`y z<=OQ^TvMfUpxE>r&R*k${~^A|Z<;=A{}AJ6zWmC_g5xV$pL zh9SngHHLD3QtMT|Ff$y7L%qALMEs9yP8zXMRQKf8{rG|wIp~*iC@!Pg{L!-Knd~XEe)$?2n9_+`e^EZis+3y$F2?Rb zNNY}88nd5PoktI>kA#wftsY`xa*yXem!Wy5xu*BJ?GHI&{df5*7WPoLvJJPkcslh7 zp5vAr`*p8vo|Wi|mFpgk&5~Hz)HXpz6twLzwyaXSeUF~Qv}9iPhn}+T)7P#9@c}L5 zpIxk8%&ZV*&m`r`7k_CR-JRo*tVs4@Ae*FOlpUD$w*eS=LHl_yl6C2lppj8dP1QSi z5XgJO6bT#KWc{glfMSxADxTm%l+(TOG|dUxe{APq<#8QFOIiH zGvz~Z=(7hInq^=hW1!t@m9S}lU~j8<5l9-};e<3x({KEMa~NL7%FZ2=Ox6Xrv)JfR zYut~~_?i^)_cuCFIijA=gHzMv?f#qZWR`kvFl?#Q zNB79W_`#?;!3^4vumlF(5KtTizuvvjYL^YWAmld^`ZI;kYga7l+7M5dG|$R(B54-z z%$a;r$GIK)dbte9S2&^S%K&isX>=I`Qi1c~=Ym-x`uKq6r~5{Bd@=3DXxf&iOn*i0 zGuvKsoA^A&+SD9%kAw9c8OQG&q!!*Q+EjbHR1gtXkxw#;u#Q{F0B_2SadS!Fc5$*y_IJSr0?Vg7xQ4 zyDt0a&n12D$B|>8_EGHi_?b7%UQ}DJY2%$B${v*4Cc7Uns;SGTS>%Yr$9v@lC9KYP zqi15>1v9kDMfl<6YYR)i(%WlA`K!(_cX}&+F`i4JR?4qxNhWo3Y+9{FnZ!OzhA5ri zQMPeJAN!7fCGKa@ev8x=YC*gvx*tNLo||-B5PLq2xpsMBfgc@H&cTwOpI_M8ny%-% z_97m$+l`lAA8baOqWo4%IQb~TXm2>u>#TI3?V!?v_#`E;Kip|iQ|_m>q^N}AgY z1j}7FUtQSQOA0#-RX5YDIz?#n^GDQ*70U8+WDDMF@C!FP?VDFdxD%+3Vf?E^e?-rY zkz*=r_G{X^;hM8>C1r#%4p?PPfJ=rtXV9kycd$|gnBGG~aC&YSpdWRkM{6ackI~d; z2!qdEG;>E%=8muW9?2I9E$u5-#Co0Hm2jlx7G9Ri-9rP$A;U|bUr*^>tkAjn1isF0?@|M z_g1M|b_I>&ZJDz~+oqc@3;YgJc1cUwwBVH?-^+F?+Y~9u=o54s)U=dBc^DnNb7p0es?@FO^S{}bYm9TAI zH19N&vrZ9CmQg<|DUx9@t=qHUe&A_r*()wFd=`!G>#D`SmXHp-k;!EIKbYVc3Cqw0 zW{?_fxI5{V>^~Dum|M;5K{AWXy-Y0&l}DO`GveTeR>00I=rBu=;k~1(k3V{*YT8b| z-t;5tl{1e|!#Tbbg*%Dn7K8go!ptz0S(>{a;b_*?c75_qd5T0oCj4;R-?y!RZ>>xs zNO!aRzG)T5-S9bzUexq^lJs@4b0SSC@y)kAha7*s_qKtup2gOr$kq-QawsuRx(j1CQN<~1eGbvX0aAP7dw`s!Wr@rUo^S1eK4uK=vu;AShA`)N4L6iuCMUxuf-Hyg zU)WNOz%n1ZhiatsM)4QSO6f3h(H=CYH`~^!7M2X0d{muEb0M8-$kQd|ALUruyqcNw zhfWie_P`s?;eE#pc?tG(K$%m~#SBRofLX6%QqHS(udIktOU|(2p7D&$nd)j!yS?+I z&toBecwTiOzWI$RcG9_EgNM#PQKL#LKd@=PdGYvknBvj8q2-~qou-6`ffDF+>yei2 z2k9+d=kIsp>gU1+6HAzUhum*qiMv~=Hflz0zJChu`(+(z=;6w3(|O%uz%3`@Y+DS_ z_H13CYZxo~ZRV$o`OMdU#&i+FmuNE}0vhnZM-skQuk`Fh%SY=)Bh!;LE#|-yEFY9a zU-y_l`H+^(<@4B5P(c1H_f;nEsmRz5+uwJ|&7+Q~*+n!12eGOZ%}3l#TPc>tllU!b zEWG?PX}^tC`>4E8lM2y(6O}ysiQ+Fv78M(LRerZFjvN_oLWRhLDr!2K5ihR^<00!H zM4fwu^C61kEg1+-5Q3!xXv)6#YwGAfm+YP@T9eP~zp^t}Ni<8E>&#dcXq|LRdy)Ri z%Rc{?y!_inQ{@Rf>DE8vhXvFgvhR(i6_1}zLbfD?_;l9Qe-fSlO-IgiynDn%`j6`Q z>E<}_x@yTYlT#qb`-utt>3CAJf=jOzDB<>8P)`!Ng5>p?GCVy0y0@6fcO;!hLOS6? zw2vl_DJp>yOQ+ENVf{+}tiDfrdHbU~JO!xFZTFS1KDyBR?p_avuZ>po%vw#3G|v&}J)5a{fQ7mu|Lnv}0JxbBh$+AITBKmQ?lqTr{Nh_#m>;+;*N3 zt9S7S*_hn&5Za$p%Vei=2iX`*Uaj+vF=wnw8@Fcr#Z~g#^-tA>4a2m%^w*GsmY#el zKz3T$!4@Egk9X7T%^w(RW=nXZ$1I+KewPs+P4D4KNW571EKFneH`T~-E&-HV{1R zWLP-q6wix7&Ay9|hJ3D(fpR~qyQsZfja93(*Lpnex_69X-!tehtHGo-aGh7v%bYy* zn^vJZD-+b5?Du;O0x3m59yRC~qa{_tVxRTGfQ*M~lTB^nt5n7gxDP(G3Vqi`pl&Ks z*Js&1gp?!A?z`lgIpcFeQ=woQ!aY|H+0VD0^FO%Amt^rFth8kT=jAz5Orm54d z*bYX|SOym*9p_GtSgRtUA6RS0Qz`;01|5shHyb<;?wK2xL=C`D%G>%yodn#@PX~nq zbXiBY3|Gz1;XoaVQtjDZTSNFwumtTXjTF0AS$>6WpS&upEAsj!D9Ku>iOKJTvTZbjk1n%% z;KA*qm#68H|BF`uE$3Rx0on|3TuQ3E39WOa`e%I-(1-teCQWSuV+HMJ_kCd*?#*<<(1`_2zT zILED58TSDmQ=f4jbrs5=x7>SbG(F1g3_9uOo+z(P`J*HJaM&Ihk9jA(DS!R@n~3)Y zBe@U$O+mmv0zL`*f8kB=kP-{m=O6YLh{;-HALz!5983 z68u@KU8D@Y^S<(J=)T$48rRdbGBh!^n9gfIzgoOTMnWJzGJFB*%a2QCxz9;eaJ}{t z`@;z`4)rWdzYgMOdvd)D$g9a}Hl)u~*c4O}e8pP37HT6r{!v_vN}!(OCgFo{qAMft z#y1~eH&K##)ScHvC*3VvJc5Qe#tw(inIrY>-JqaFTaZSBf?h97WjfmM{cjfEr2UZv z=fEPb*22LS?{-DTq3@mqOJQ2VmRFN~dD5r5Kh(IzhvC?U8OCIKBiLf0#{Gl5jb!=| z%rC75ZfMgefL{i_08C5Fm6yMnyiUdKUK<=TZPpX$QIrY^_F0;is-ms2uNLHZl@oF(#%=Ew_r9GipuEQu%}}T8zmHJ>)1bv zTWqr6Mz72jj2LcKs^-!xw&~F`#<*Q(pKY(&h=~Zk6XkAX1he^S@%{dZ$xs5fTffa{!2$p7rCH zFbuV<@Fb#G@|9)QykT&hwwN6X3PYj@6?qR0Bl$d`;bKO7cr6d&68zqLxjf%WKw- zwnopRNxVBQw}Ls^Kda*ttC; z=toy6B|gLC8Xo5nu5TV7UFMUw}f|C#dRXyOg`yFuctC0ZN9Cx|`Fz*@gcv8pm1`+jHu zx2S9aaDTbnlc7+g`#Z$+Kr&`XJeB0Oz0PXUwmjWi^&*96d;1UZI1dx+ z;6bX8BB@5mtOdF4S3Z*bsKP~;VsXVM0?_e7iyoO$AZy*%%*f8SMvEfen!?Pkky*Y@ zT(lAoZ*?`dL6%fNm~YdrRj=O51WC0}Xw+Cetysi@eH?;G(!7}_Q$Hegc6C!+QXYaN z`USLZ?wyKN#s&`0Yv*CW6#Yt!`J1*btF>Fh2?;%|_7o%F_ z*4<*_I+}#Qtk4PV|E`SGjMEJ}+`7%P9yeq(NiP*F$LX|p=bYpDp_Y`Tc; z;t$znaFh#DK8(TqqGj6Xm1+7qDJuoeoU{vFQcJ!DUiU;T_%E$Z3a!%@@0#1)3(I4VKVteBRRX-4nm3m|be!YE z95%-|*h!aWs|Wtg>%u&pcwIR@r}QZmBJFY+rh3(8+4}N7NjJ>SDf^G9^`#U_^Oq`p z<(%4A4gATxB|Wj9B+}zMk6He(>y$sL=>Y|Hxc*}4FNo*ewajgl2WLxz;TVEi{#{-b z8uYwxOqy=CQm64MW2xmQ!a0@;dlvKd)oa_YyTh?a2>W9JwJLwK!P?_U+}`Fh9B9a% z<^}oVyw4Hi*Dee0@HSYSP4;huWp&VR5h*7RD=krkGH;MNlcy>ydDfvO8QgAuS7X%OL2Q-^$uaj3mg${qxyK2<60>+A% z7N4{&{?#4jxb<+PCpQAwIvVz0AkQcYPmA%N$ot9T>025*8~Ek?3G(~m|EGC$f;8|p zU_408jydxvNxFxpkajCeTQg?lBE{sUP5=aAiJBo}T~-u(wIAFRzTM}d+>~L7h6F6* zc+UMMz$e{D_mHv5Nw|O4LVy}(-002c_uR9+V*j!W=sl61kr20c$N9g}jKa?w4As3$bKVi`6$7Nh&=S$`&*fyTaxQf0+o>Bv zG?D$xqOU~4mBdPr^@!fO7tMt5PHEH8p2b6$TS^7S-CN_{)fu?sg3Pr zzoe@?VFe{Q#mt;YH3cZ#Hf{V>vqdCM8yO|k<`(x9W@}$+7YWN!DDus+J1W}v2t3Iy z)}2!`0QFq4GObiG?}Y%05>i$Xjop1PnwDCamzq){(GIq|l52mhKz|<9_R=ml=p})L zsrO8Jusz*gp%$B>vD?fK6&mM{D*EzSGwCzj7-c>NfpYze*Y-o^Z}hJ6068SgI*g8P z+KA$rje=e(fV3scu*s1(ve7}tpR|r6o^+sqGVT;0S3u-OwEO)w!mb|zo z*w^6Xl+TUX)mx#rGZ6bqt0xJ(r6*b`=iS@C2F4fDVidlEw_;rBJ$Bz|f@aCJRCwtx zdjjF_48hd;N8`E{Uo?Hr64KaUMil-DoDP)(dKynjWu}fAm~@a_Vau8q)E|n}$?W&< zt4sY*jtTmbZl#ZTtF(l>tD;qbH2mzLRd=eAuoJ+#y6AyQ3iJ73n-Qw}H?$zEkAF=( zeit7R{^92NZ`}L8h93T*K>`Hb_doygYa^p)e)hax3*w4?@&Gm2uK6zjO6xBye+8kG zw6t8yidJ^(-RePxROb`{pSDFn%EZk4ATKAou3r1!5|y}_2a+hcy~0%!drrhicNXTU3YLgE z^UwA&!mJ6)V9*i*Ox1$ADx)`c^c+ll)nN+^z4lmjC^W|@_~h1KCrMazg3pI!$R<~sOOH4zq;v_(sz9V^F|W$-fz z1(b=>ho_DD83j6r@{VNUmFAEnkDk?!Nz!lED_T{gU|UHwJ86;^ClYFYvd&(80&<(x z5$uY!LS25@8ItryPScI?8$uIa(@^kc=;{<8RkC*u96u?Q)s+X_cI%>2NFcK0u%)EG z5>%6+Y<_k`apR1>CdD&9rVrG}-16_s%X32D6p;pxSf=gQy6Evowv$Ca&hI+P1|>4( z_g6Q$8)-8+Z%7mdS;1rri0F6Q2=*s#y5VT!?=0#XXrTw4Y&_R!^2(o{p7jSrMLSHV znTs(Ii78jAodoH(H_BY58D>TO4<&he_>RO)_%$6ZXY>evsze7N^bx&u;`gGS)yfOo)nn)b#2tcgt9Qigu+BKXC$PgD8g$0L`ja|lFhIs z!2i@A7a>Q;q6|@SP8pM>b!eZ@ru8CWpze1AS2`x(3W$xx_lXNAWNjua6$0a*)B*Rl z$f-nd=r1L%at*U+Jk8)Hh`W;4p0yLc=$Ut&cy(Dd78`&cX7-)UJ zzTAj6&Ly&>9*N6CYoR>Ejo4azx?IxgO#Q-{2ejEsd@e3_U z7BOAgpr#O@C~YIqhGeAJNa`sd+lcYv-!#RwD?TD?N-f{TKNMu~_`(YAW^aO~sL z(@9B;^Fc%KYS960I5|L^Ly$oPD9)gjYwSQye~@h*Affi z48*T(UfxjGv`oG8ULp=6iwn4Z?r<@!K53Gun{N+rDZSJ+?e{Q7zK5y?{U@T1>w5su zUuS1iynXvN*POas!u|pG@D1Rh=-~Jd<4pJ;A+wf%;u!unY!a|D$aB!9?+|>};}3VN zI;l=?HuBM-w|%*Mf*0cv&;^>(p7r3}=vOg3U3ehDBfvXBa9o)E^+I$B6O%PdiQ_^^ z?_1WtTGK-PpNI9q9o2rQg?7|lJnZOvZ10W(@hu6nQFze5fyl1%_z;PA$t{Sja-`Ts zXrWV_^{5o|xdv7S)%8T@4W1}Ul>=G~a{_Y2(Q7-N#6r5|102aFXST*mItc^`H%(!* zd#lMC38CdiSyg2c>ofEN)>c`5emJzaZmQWI@zaPCE-1$CiDbj;#<|%@Dk4#d=j2i? zOREGAakMyCQ+`YXnTv3OB+&h(6wT_K<4%Er+pBnI?XsLFxx(WxpYX{ls8RkTXaE|; zZ+_L}&;jpUwYrue&oWNIyyujTQm-RI-)k-iPSL4*g@_jhsts5ZW-T>cuxm*0g@3`X zg7P!XNnu-roHYTCLggW4K)s^)V|MYz!ipxm7PVQr%(_3R!-AHFB%6s185C7A;Uin< zPv?ZN@fkT-%B{eH0$Y7nQ7o|++!VrHyww4z7F9XusZ4v12kY6CP*JiL`TmolIE{cN zZz261*82M{s0zUkL+?C>;#qp^H?}WT#$v3XB$T^NFHrrfJxivs&GDZBP}dwyIPW>1 z6)fw>t=RZfL6ocZkNenc$8HaIp;J^)G#mI8@l z$4WPP7l$M-%PFr`DjZ-yi)#_G(t%_NtBSYsQ3xAksKRlVlwAc^`F&fM!|@xxjhdXc z<+dFRy*$iO&}G98_2FHBN~`=FW`{z$i%Rpp?ZT_K3TzN##o;D%;-M&6ex0UGjke`k z!fAX}{*B#6Krm>k6>)8uddGF%0$Bs_wsO${HL78^(5Y3z#X49;p2$k{1@D~H6SPRH zh_1yaFKh_r4u=s)NToMJ@}=PkA}pM$8Ak~YG0G?`S)HNAA&qW=GRF+qovN}MN8D`P z@pG9=C~CO+)6ped%q7+TQ00j#Qn_MXddrX}PBw(JR8>UfINGLp@3F>T?&BP)b~3x~ zeRfKG1`(gEgXQ08&HaOBA)+yCiDM; z-v1AWRa<`_X$c9JePD*yrKUTO%2efA0FV{~ZoN=jXmP6<0Pe5-`l7cOcx(9h_|5_S zTR~Sh{WU9i+566VZ+}0>vb<3o3{bh(y%l6}mq!hxf3AB^x!wdnL*LkjdG1Q<$Iw%K z40BOX9eRFI-Boe%tfN##RGC6HUjWe#mk0rmkyD}DW&X)^b#g#LsoF1LEJF2rW9k$C zEfI*!!~SOs4!#0fi>RLP((^DT$I!c6%<8(ShHlctXay1iXa&1DniFFq(eN;f!uR(zp34`D8qG199ew!5XlOO`0> zH6e~!h?G=x*J%^4=b9t6<`N$`Z~CJK8Iy0-&BG#d(5&N=gPMU;)5`19>$?e@^>IOh zD&9-kd}G3tb>q~jI2^>P^4!=(&2d^JN_E!8{3A9$%DvQJOLIz6OBRoR8J%quAe%7R z@Tq507{t{pnAgV(0LCx(@_ypMRX4z*Jdg^Yj0|y)yuo-D0Zg4?N+s>QLGG3@=!g1x z0GXV55A4z$2<#u{m4DOPH?LyqoiiZ}1&pl*^rK6zc_^Z-_LK7Ci1A|sqWjN4A2-#} zi_P-Vw;bwVnho60@?#3*uVqqmX*K|{@|#XQ4R8$am9|#P@?|$?M^LmX#Mey;k|PUX z=0_=t|AVbjYFEbJFw{#ffQYCpJTLZ-zyrt`;}z#bCykuoUF$6`mLQlYdHe(Jtw(cV zmRfl7U=!Hr-8B36jkl^2?#;ruFstx~NN;Ywvl7@oFQupDJ} z^VA$j!WSr0s?Y{#a!0U%hF;zf1}2S%tbw!OEXR@&wS?TNzR~po&;#A{RG^MZ%(fmY z(T&H2qb}-bDb~cnC0-dHi>HFJJhz`c@?gSVBZ$p{NlWF^6(fFu^|s=?6pL0sK0LIq zjAEfaQus8Y$#8vqS+CkZ8QKH_Spmf&&88V}>Qts290%(F4e`+g4sD|8!mA>?Tvj`2 zNtMDWC5CO?hRQVeJ?^62SPFfW>ZY)-p7UE~v4u)vFd8j2AW^laRoK)97ta=jt~C6rw0O+DOAOn9X!~_P%p3ss0}C!JJTBZAXBelA$zcFi zxKjF#k?ObnC7=jo0B(Pb$5wQNV$%Cn1V=#39Mo6;{laDU#K{Za^-ICys_?nD6ma7FfTKca>+ z1@s?nPyWJ~`!k?x>et`P9KIM$<8s)%>pYfb_I|LE7ynPKfZ3A_^rOy)0}xwLVhmjIwKqT=`6XS&l{9fC0O0b@TyA$5piTf9nLG8hD@CMvRRv z?D!SV_aj@NF4sQ}t?!be5j%$syno<>hWLpB8wg1{Lc`dUw?@)SzCFo=$Nc5b1Jrlu z{*hq)+J7F_dVBGFoi`Pyq}nT-%L+YR3$GfDbz%#Rd8y& z{NVTp0PW$mkB@ied}vTedxherohIVT)xhT?Kfj(XFclP|CXU6HcXVZnJhngxGetew z9iI6|q5VAEH$M{3{skD!-o>L%#kh{5=Zc)qnaYz=z z`_l&;{Ud~LGZR{D$OgC{jJER2tuOW|E zdGx?)2AS3+(K`w5B5_z{iX0PIfQ6;UWOafbJsCIu@|&*XdKUxjxT))&)o4n^II=}` zn7D-seR2=EF;!}a_3+-V-Z#%}ko9fkMe+!p7xW?8kjUQs@Uq4NIT;5Db z@;Py6KnczGzrgx$obrC2NnGhe=8V^lV4|~x9>Snxb?BJb1(8e|1rh=ge^D~0lx(Jo zo7L0YZSlohEmqwNAt^4@X~&7r3uZiU4mV-&DdwZVkV9@p{qZO62J6`C((9|_6b>7b z!=>g#60h^|B*CsUO$gbx~ieC5d~Oo;1`m48$`VIPn){g)4B zk1T&XvC|rN_XylrdcfUBaRTE{C}+&E_A%U5u*VA$YrSNQE!h~Tbu@&_4tiG0OHbqvtayKxFvV5KKVpYTv4ZW zttX(2-y>8|SEriqi2~eSAA+Z>h+fV3uv;{H3?iQAw=bI) z5fG#XL`1rD2vww4=|X^r^xk_QDj-doNJo$wI*RlvBE1QrcL+TcA+%7>;IseldCop( zzhC@>Gn2{Wp8HzYTEENC8oTtIH#;%4=GymCkkUe2G?=;uoo|i+%NM`0$*FR<4Sl}Z z7l#Sh3yCtd-ZzSid}F^AqXv79zw2&T+1SOmgvFk|2!GzJBj!eXlE2e^Rr! ze{sCWzt1@ZOIzTsnaS<|y4AjW?bNo|{S`Yd;uEV7KyanJIS90()I{cC-)YmDG%_TV zMdo~RXx$B7v}9ki3*>?2{wh}-T7vs#l8t5l!sBv?WBJpETg=T#lGGV&H*qGtFVB57 zHTU}jrD#?|>-()5uj($1(46=S;R^Tg*QS&ZNO40zN@_80z zMhO_wxZlHhjcBP~ir~~GIobFba>wKJz_xzzJ)JHI&I$WpjwXun17_qh!K0ITUmP~MMaxmT!p~q8$5%>|1pQA>K0)TK_K)k9GBSP zc)emOp4^Z)puL-r>1lZP={9<8c&2X8_Tu7Lk#pa}VAI&N@07MsQ~f3o)Om=LcjU7R z$YklsUv6v6${hw)3RaY0Cs^w}lyl=QD!sM?X&24nq65yRJ+@v7;Elj+txM3uX4z4A zBW`s*dk;U0xhq7qqiiKeaVUj%qE)#GQ#kAk%>Yq4ymc>{BPT>xo`F6^*FKNsfukgz zCo&u{x#oROr~0lRYGi0a78jRWmuJ5SoRJ0mt;3Mi9k&!|y&SHPLtiS}i{Qd0GwRQx z-y&6NLk`0B7Fv?2`u*(2wSM*S-s>%LFc37O>~c~+jB3I>Gzs-9@!Sq=3D`N<}`&;JP^+D7$! zS@sM-0#?s58_tah{R_pGfRUH{YW^PfR=FAVbfPw{mpmNeC7AXKyW1j*M+EB&Q$m$0 zcL`Es40~O{#=y%{cSzw@>!LasPR9U~DetwVI~V$&a)vlWi8gqAyU&!Wq<~Q1oQ`6U zVw#*1Szn?;0JYW=2fh7=FSbgSZVRLU5Kw0=<;eLqlt_tR1`X7DvKZ;sck(dbTX?sBljOgo&X>nIlSTpw z;t=+Kx+dRlJWe?54{i#%_fp+5TPVlB_n}3g$YGJxHy3B`eS6t_;JsVC^IoaGWLkKc zj09X-TFTFibE8i~;Ers&dS!#)l=`@+c4{u`qni;n+##EK#}C+Q8n)zcvJ%~dpkjw3 zp4t=y;-&~2tP3?Hp}F@4sqg)pM-g+$FP?wS&f~At@(gkP zD8e5GYfjX8y&`lsiPgE^rtxo_aNlyanz`nWbK7FgDUMb7&y)Mx0Ow`KfV@dV2$#3z zoPQRE>9@P<*4iDhFZF&C!Tn(u+Ip1R8^DTx+=mN*Z!8R+-OB2z zzHQgrGYi19Vm0vY1rLX3E_ah^2hIH0#cN^1d65j59O(iZYeXMkO9}y&qVeE zNL#zf)tCQcPqeP(1LTMO`H@fO+{*u2SO2YF{19RWR_FFle)4}s)!YMbSpaF3Wt|z2 zI0wH9NTApSwAoyUb5jBkqb&hs(l0M^(YwJr^~I^Cv?RWNRgHavTbrAk7GGR3N7K$a zP$>Sh~q_#R+|PqR;kX;9OMooMt$$uYLc#0UN3n?aMUMSwgde*lrQi zm>bdeaVW_K0jJ@D=ntRPw>?$8(VSWrZ^SUI9x1Q&r?4;HvUK76;QF{iM{&yja_)KB z)vhlXo`Iy$1(PS%Z0t3WpQj#GX2(U-+veW4lQ2gsGplQ8fFIdUKTg{H0=je|;Py@r zjZYnPr6niVZhnNQXHL?twvZrf-+jrB_fRvlI9K`#vmW#&8it|uM zBANOa8%?;*^1S@#>@Rx*4G%GOiNrW!Z6yNdYEF#cIH2VQ>AReq){On8u&ZMm`|wK-umwn0_ADR#qCFjhhOL`%9gjhrhfuHU zk{9xfY+kG8lCDEmEe%R?h1|r3mdH`wTl1RUF1}VvI9a{3`-ECHA3CB|YM;3yUhZh1 zV{1_X;{v6WXoH}GbH>v?YlV%u8eN))Pm&@kcALGDjw^0heM{cu{Alim@{}sKq7UAp zTdH)`@XgMrY+ZMqI_=V_SW-(Uh_^i$K_2MZ2$dRZsi!^9PS?rNt!EC|G|=6b)-NUC zWG!z*$l;vtIyWl=5#r~XCjQ(eoE(893UL9;PL+f7+5LkUiHDL`Z|*WGC+UPfz8p2H zpV;YSBpjM;@UZ7MoK#X$n$*DZOkS?TX2GdtpMqlRULzvy{TMHbLQ_h4#S#^;80Z%Vd%*RSMM-i3X03{r)^7axBYU(di9W%=C+}sd~a? z6s?uW7#R5Jr-TFNv}fS-)6ap)m#8*G`wzh21kYfs6_P{v=q~yyS7vY|K~}mQSH}`2 zj!izJ9`2I({aM4UG~lA9;ub4*;0(`WfPT)Wc7{hVrk!$(x}-2(KLjeyDjl{dFxAI3 zunu2(()>1evZd)V?9h0hElcv8OfyyXRff`9x23-BQ2uX&@GDXMdoPEhwI`QnvwLd`jo5gMJdmD5) z_9af0_itpMaahcKWW9f|oPWh@C1%)2cC{%S5D|FX+L9-f-AAlguAwaqEH)h7cMvN? z>|)zFR-o~GB!|jr-g}Fsb#2TuFbO~xud%oXmi_BN&A8ghtbXs-@ zLgB^&A!B(v!t{xl7_osQo<69W3pjE9V#j+04L>2hde#iCE3S`tPjTT8qa*LL{+pTh z!GkXV2m=7)(8DedTQ0|S_4M-GUibD`;6?V(;aJ71;p+evjb#7&h{(u|S?_s0F)DXP zhTs!x|C#C`A;LPnWeu!Tt2}8#(`tqBLGrlP+$iAY2FiB1-GppF_ny5v%TeAqXGnaQ7MPa>XkJA7sVD9Vf>xcTz1yi?8G zPvSA5iT`#LKQc;(Z0O)Cc9V5*fLnUn%~Bi?r6xJ8TWTFc2i6SSUlK6SGFSsNIxu*d zlYrSu18KKYRQ>Mv#Kg;CMX?D^D}R~Aak;kDTCAO059WE9L#M+Vb4hVAJ*DqjW%LAy z?cctu#TpvVy3%9vga{`&i6otxr$YM=(9o;Y$B!Q`Z_lRlnAAVQVDzM%#c`HN5D{Vq zf2sqPSwL}cI|2A5%;@W@8`pgUw^W+oRiN7J30)gMYb&2&=qv{l@=2Pc>62BEqFn<= z;RU%Eu{~b=Mj(xL5UvS(SJr%LcfG+{o&^Y(vD39T_KKkw5rNoV=3>l1C6k6(e`CEb(gDt=|RIO0@e@Vu|45?#ge@DGvIu!T*l>n#)V=7+)U9Q^78VO zGk*b{(z+Cu+Q~#XWybvww|C6Th)9t>Za!}fsOm_OJk(ot)(x& z$*Kbx2H78nU;^e#OZx9~B4R7H8rY0?u}SwgT$^t%o}$YY?-1gA`Qg$Oh*TG8uY50f zChFev-JMw0@7Z@8#LvD27tZkAH>fmVQ}gA|pU-Zv@9!>5al{1%ZR=MzI&S%!fo&W4 z>eHfk^OdNArA~)p!1;qEb?>9kH=;ara|h>OQ7DOYpx+7tolSIFm*vAZ?d-XwZI*|az=Or8PRA_XbrmYP@b~UsytHm2v7Z)+ZymOhk@G7f} z)a(29tMGDMSs+w>3^r!3MmCI>d?&R{V@M+gy|Se>5E;Xp`n*<82_mfkxjOTueNgvgZTtYbIVE{CVIGHQ zsem}ug*Y|oNsW&f%%9C2kG!C~qUj0*i25IH z7MJ%Bwf`cuKR@Y|F6-cum=_q7V3|iGnfirCgQRyvL6rI9a_#+@Z?BOTBv-TZ7Yus3 zx?Ow5ZO>Ly;3ow2CL>KCXtmmk5xII=8T=Fh&z50gx?=nke>r-KMi~Xfo8}X{E!4HA<$RtVP!TTwPSd zXDY9Kz4C^i0Xh|A?13e-bqxmNK~U>n2ezzm^&N6q%V1`bb%oThi`pu@eqcMx%c)43eB4ByPly%yg5aHz&G zT;hc1Gj%zr$&Do7^`3Ek;2ynilg-AvktJ3Gs`IS3eM_jm)(}zcp38T z)9eGAUTH-m`Wfv-0WT}BkUjqM$gh611ZDkcBE4q*HT^|;#Sdp8u%rG#GxAQ&%Yykq z_@#TwU~R$=>jAGB?WKLs@q}^5rLm5fzylU6>(e!)iPJgiT|J$)H+9Oat3=;);hw~~ z49AY?utyTDGfPsZXsxb+L9ZFbuJ~@|oTBObmh|&u+?fE+exdO${@Rr<4c`R6qoW}d z5@p9oxB*Let#~vhxku=e-ao_~LCob{AP)mz+k340*eA#FQ=g`WJRwy^BEPaczY zKZCA(`WMJ=j)W(^6MLlOPIq$W=Uaop-qxOI+&EKG=e3se-j=R?AE2q?CPjd6+A^u$ z?jueybe46T5|qUg&-p5VK|ZPbewE>40)5G--XWwzlQeh!9Sa?>CW1K}1hKC-70N&sM!$(2=-#9niZ@%uh*#SC3Nq z4r><=-CrOvZXpiUf@;Ry`x4+T8~R@!s-X?*qEFG==8a8ODORegn#gBz&IAOH+*?ip zT-wm${zoPBB%y6?GvPE2huuWwZCqy}aE!?4i`R|)R(S1az35SsPpf=y&)de|ev}LV z8zh^!SdAO=U?d6ooXVP>O0nY(4Trefv>#$N=BuH(SN=gXsE|O>L<&ju8v4FvJcFb22K^5~ zHbn_=Fgy;oWk>75NkcrTw7gXdzD0||r((BH4kdDa?5fSWv=O@n)XVqyWQswNCXo^`8LJ*!vlGW} zT{#~OeRFBMF=Nc;4XI!BJq(jrJX5Pa zF2c6H(cPmQj5`GE4%JB|4`S(^ot=}YtArh=9(5vu8uV)$!Z>lAJlA&^G*&(DV@`1f z5uBv6HRT9bU#I(#Wum@Pyb0D7j{6auMokhmIDI?ZQJj{NFjU9m;1N3KxEKn|#|?pS$(O2j)#Ly_CkAHxYlaBg#0g+?&#X zQiBO&+2H$Z`&=I{CNnQm8k>ZZc6&o-e$CoAi9EuQiGD&Jm73i>Lnx~$eNnlUi0#%4 zl!gBxfXhgqFOqI_N?-C-RaSO&cHi`AC>~mA#OSmCuH4d4n$#9qPyq%kF3fuo=de0z&q((;x$M4-*V5th~uOuiQ8hj zf?zNQ$j+L7*WxL(KX*482?zZO2RVpHNT_9=&8#g0-diBzMWf28UlJzqd*GaoIZ)DN z;Z3^c)n_sRXlV;YQ5@VL;=iBAP((;fUMIGuIAMp0`gaEo0 zQM}=?e-y!yt<80WZ)}fvdJIYg=v5YJA7uZbPyM?W@R*0NZgzCxQ|1;A&^>qpEBr+) zUKz}vC9MRMI-l4l%J<#ceF*gQJb%~HazCi6hKBg1-xvm1B)WMV_MCX^XwPax!`!?j zz@`=e`0m+kUcY`f#i8fLabET#|9hb6rHq-Q=7(K)0aXDq@D5e#>jMC`+OFw=~bN?fv?^ruOXXKN6XI64*bkR1Q zLmrWNTFmNP$4$z{na${8z^(Q69yo7+O#B_}eUXtOpY@c2sb1{6jugk-Gft~OPX$JU zGEq*a|1#lW^tNZ|Bn3Q;OsxzG0do1xd>g!k$o+!I%|nmz?dol4uw$A}d)XQJ?C~r3 z!CfdL?(~6DGqV-+;n}+Dg`56>NC!i>d3LW^2Y)nLvn|jN{TmtYnAvJuC+INvAx1#v zMsFdIQur2A&!J+&8WYC5ro^3@Rjrj*G^5&3Dlm5K;zK*1%7m$aM^hZVaXm-f^9C>g zUC8sjIN!D2&hhHkC(eNg@f_C*}TfqzU;tO>CHEETes%xmZs#1R?b+oF@h zezw=wEp2DjKPwJdZVcqHeted&(4_ff$og?-H1H9Aw2k$)Uu8D7u_w0Aqwqx&^SMFj>M(G6j; zizh0)L#K6T!&`0?XODu)HBOr-F`jNX|G4Rgu(M;*@fRwUP2tP?uJ~Pi^<^Sx_~)(k z{pE^t4s9nBiqwt62k}j^AM9NpE!H-Q7ALh;jc{^CP6*6>NZDu>U5xma4q+`)b80PA zb{+nDxg=9atF3JaFUoId!gEQ#v9Ass!>x^*Z0PlHlMqVL&*n>(@a3JUc~ujbzMucr zx$@+os3SU(?7qqiuMzjBwAZwsj0U>C#<(U1v`{z*I~Vu>1XF zNulhyi#!`d=NqP%(wpL~_KY0hO?HYcYVlRItmoq8AhKgO@U1RmRlHp-e$PD(tnW8Z zE#7IK^9QVwgQQbb$+2EXnzYnOrHIOe<2*7Lus&S!`6CqPHuO%d^3sBQ+kj&?;KK$F zo5h(ZE+x)RH0pZc0#^a7c21qc*^~gE`b{4?BbAjYaH2rOPL81WXCwO&yviZ%4F zjjaw&$`C&XH^-JgG{J`JnU@=x*W6G+Ajh66V69;cc3Hr=fB(J~z_)>oc2}CU;S+_( zVut~c{2N)y+p<>ZPK)X{f(X}|6@emAVz{wU0ny>a@>JlW0O9xKq>~@yD_N{S&ggHp z;Y|s0JpBK14yrHj2KO~kA3SYIRbJbhzqMg-In9J|4$;04&k6}` zpJTB#&rY4+pMVEjg9uiN0oZ92!v5S_mYx^bP?Q#59bfkn7&yzdpD)y0=YRj4-5Gfq z*tW*u9dM>O6>#T&G%?ZyAE*;N##r6zr`Hr_0M_87q?0f4RwVY{W`@_4j z(Q-;Vv;fa8J!a6OfF1M!j)SXn8X=NQeJ=r8JXac%3VS~ftS35}u9w*F23o<#YzTk6Jzvbq^ z;qIo)hz)*mF(X-cZoX?B{Bh7HLR#;0HgI90|LN}KC#PuiQDoU#MpH|!^kq>3 z@?^Rft1tNs(xFSEd2hQtV>p<|xV zAe+<`>tw+AG>G^y`02VWTiZh$3HM|_-z9Tsg^@UYtj~-^NoTm>+~DOU!E5Z`@OGw1 z(8?Bh!L00o9B)W_%TSi5ZoP{7D_HzHhjxcAxE#IT|2!ccawRI$=FTD}SSpjgA!F4) zw^Mr;J88?gJOi88ERk8G`a@o~!BgL4+$iOhoI!Z?#P&Cb&kU=g<_l+N`N(;FAO$T~4(phcxT-=st(!he&mt$zZ1C?CgE}{lh+6G&pwjVR-e2iEc#TlX7G- z@?mLm)ApDr>rtQg$RUGuCZWr5nr+_Z$1}!5DdDt+CBdDKEJRL(_Dx&8=-DCYC z&IZVo`sQEAlc~6LFQiDp=W^U|oPF+{==kx>z*qgdOBBRc;dbrCp62gHXAwa(Q0dfu z6IWXA?ox`YYPr;Bvi(kWIZUNXWtFAO9PSRc@d~ib+a9liHr>R3If6>xGcwv!3^^uj z4pXo%&Vz2qfV+2Ry1K$(8L?KTHW40L4^XhhZdjGH=6YU|DaZNR?ZPxF(I@S56R{eI zbpnW#{Cu8to?^y{f<8pnXGeAC2PT+_E*~S21>jjaB{jo>h)B~0DPEt7$)+O$7Vkir z?!kYP_ZV8kl?Lx-bCTc?QFO9s5Xy?#EJ%48n9Oi5INp>v>m(=_Q)N7}qF@a5k=9SbGltf>5 zBlol#vQAz+0fNi?-PC_uh=ZM7%X~qkImC0a!qSclzUZDXJ?t7;ow8M9qj)n~X==4U z&Bnoj@-Hjp-SC(G2iCo}=D#GdjZubE-gJjO5lZ<6tn2OsnkIBg;OU2Dv6lEs=A z*QV^t54laeCM}T~05m#jnlz+c^};y@&*|F@Zss@iYey^n`H0LwKcm}BG(d0k&vLZ* zjuQI~pSM6@G{Ys5E8*4x9*|x0S)#N7z|+gggSUS~p5Fyr3A$BZBfuS_J|6;!H0)_> zeNns9g?V}Md7aBSeR=UQ^83?Qm&6ITQ>dI;`cLj0Fi`qZIm|~ZT{_bESkz&ApPX9V z?kGR9O~+|;A(jmvu;{aGPT!*h!lB_gBf2FWCd})(ZG%vFl$56?XH~V^X_4R7iL&3; zncQ(#qyKt+4qP?t`6M3|SYtYKm^(VOP+|3GD4JMKv%3*dz*Uc|2Jt1ZY6;AH`hSfZoid;Y5L8y1)4LeE3) z*k&o|F`PzrVn%eRiC?JJB~x*KTK^;_ovIw(^vpRd@%NB)%(j<5Dr(#|cqOwN`qb-LGt=oNmS0l z!0n9`vjF&VKlaIu8ScD65p((?x=fpk$u|+@g9Id|d3}tq&z{nO6!PgGhNfwmlZsiR;{+Opb7UBDxQo+0{ zCv789v+2E4O}f_ev>K46e@$8%0OS+M13ttKUKWrKp(ssZL0yc{73FNIFoLplP>OP8 z4>bJ*Zdy!vswQ=KwoEpxG5PoC6D-xwZ_T=Iyqd#ym`wh2-$U-o9$iA*XLG2^c_z+P7FwK9~;Ta@+oG$wHc?239XmiGjY{st@0FkVbJ6$Jody$b!ev+z*V{c z<^ye)kBmq-%fXuBM!kRP28P}~F)$-_m-)0gz2n%f7}oVwYAWkW!A38(C&Mo~Rc!25 z>P8(ROt{MyR$kqs$xA5sei}O{q6%zOkSl}NH+%wP8d-hf*tuqtG-=DaW z>^7hANEwK6jduEDqS%1)HkR#qH{&k1X0qJtRZhlTVjOnBIQ3fP_K!Q)%fqk0J6;w4 zED4V+TP~*TZz=&L>7FNp$f}^^)+Yj-5R^I4rKqHs7ebWd%9ts$;!j}u_iE`Ve6llI zrAnMt7IK{x77Q>}A%JLpTjcRF-%N5W=yxaBIqH%O-05a>9~x(`Yo049+I z_k^~5ck`e7E4?e~gs_i%-a9kNW@k~iKR^$k78g%*IjhN#y#pA|bs<5&0cZBe%gdi@ z95q;);J?$o{xz)VP32N&v-|$TMIq+qj+~V7AfE~LJwd?9K7TPgucyk|IUZa+GMm={ zcsmwTU+kprT>o9$_&d?PDkgVhDDIM3KmC!1`Aq^Ub%GSNTUlpU?%!zvrNIFsK$vyS z9RAn2{xi<(^}E<+=C`bL!Wcn>1W>SZb#KCX+W=7M|BSzC4!^~WXrS6kU)`$!W-d`u zAsXh=_dh~qm@y~|#UvH{^Gq)7* znK4dy<=(=g{Yegnz}4N=`1T`Xjf$cV_7`~l?|k3C2ZNy430WJEZ&_0T`68rKRqg4T zYbuEQ+CcMRgf3>Tp7AcGT9Sv{<~)Ke*~i+ zJ_8ne=Al_)Qz+n}dFmU5dpc?{$mzF{my}=DbTpNGJ3c<%uFL2R#ac>v62P?lkf!`e z(ROn#iP6il#j0| z@KjXn29Zj|dVl@P1MGY(1{gFGzJI7?#{Ye{Q>RG-7oYGxSIl%m{T*AYXG)U{M`0{kZj$-d1FvV6Z|m2)}fx;j94NqxbQ-lo&uO($M@{XkjY)A^2dnA6hlQv z^D)eaj42HdiCT_f?E>G4o=m@5h3K^g*=Z0UP}L6{pKd;Ku1DE121dxyKLme$Ye8S( zog?4j$jz1$X&1V)zx3(rbgx?doxZ%otZ{!xLo!R^&TAwlblUm*svbJ}1E%8ku{AD3 ztm@03+Yol28QR3Rlg1ii7F(P~szBUve?9d#2ZxC@F@vbZ9VTNlXR^_QdSP0Mdr3Jv zFVj-RWYy;TkPfYV15eB&(x4vc?}}^Rk-pfbD(*vR9w^+@m}lmcD4EvgTn(#Iar^_6 zXfTF5g zsD9j>cnfDCUV=#WhLK4=zT-d?i6L%hP^Bhbq726U!1%jil{2EhBC#y1zepkGj@9d_ zwm~69T-kmrJuK-^LBTKF{$oQ_XXY1E!@}dZ`$5&n06uiZExVd7rdN0j_H*0Q^0(cv zPYu(WqN_(bc+OA(&+eTDZ>L55_()V${&sZPtqTXoO_mXl*~GT9!IXet@yB}`kx%BT zY$>;9Uk%}SrDrTW8S(B)-J#;TS@nocliuT0LH-FuF)vNE{VGPs#^FQB`xi8&(J|2B z`e8jgn|z-DJ2D)m&}A*M;RNAv>=6gF@|6d5>gK!Gd)%L29;sZ?LxBX>SmZXoxlj>} zr$lXxS3z0r$@Y*3TK!gOlV;deB>1(L=}=y{0(tMC{^=BXW!dl9Ero{(Fm|AaZG4Uh@+T0U96R9}GzaP1vVycqb(Yn7g#!?ZIg0jfxV< zKX@Vjxsn%-Rju25(EuBvuJhlPy2S*LR%FOjQkuD^v3|f3;$v{~?8$Gn!ET;*LC8yJFS(?Pqf&bzJet|HA$-5&)F$*ni@G9@ z6mr!Tju@z2NjWB&a!sq6iEe&crTBjId^M$xQL{Q-xy(Iuf;_55`9qpzuW!jpq<&#% zuz-Mch2|0Ly8~;PgCwalBFQrnTOF|oqk)-ZXyHCR6eH#y%uppj&F!9Mkje%!0MvyCBMIyy&*< z7pzzvPf7+y&Vp3gsNMSFH(_#?Y$H^};q58@BYL5E3vLz$Q1-B*PYO^nx9I~TXGE0o zRz1aBz2NglxE@LdzXC$ne;oC9P?*SvaB^H#Ab#yPZol>~9b;GvU6*RoG>5E*mlnMf zUIkqT=Z}n}zNYp>huWy!eea+7rD8jGOj?2YUZ26*pCb#Ud$#6u{QY%Unl99d%;VMa<6WJmMaG_a)9V5F~`A~Y@3&Ckn`0*x&hlc z+9@uM17c&>Icsz^-(ai=Jrf|`aIoFG#kd$zZ*yPr+sZwyxbC`~F~=;U0f-*3fSbS6 zP-6;Nu@jC|(Ff8z&!3M}Py68e0K;MAES;^C(=}g152ai=LvSMZv~_@ zo(po2{CHXLK^OqOGMh^CLaM=jGc#k`ztVXp_xAY9rL0P<1RSaT#r^c71Q5sl+sQ9g zU$z=()Z8@cZ`<&LiQ`!4kPt9yecM|7ez;vZSz;oJQ@ZrsGT?p5;5zr)QA@inHlc<> z$1q%Z5Cbhg$GnA{~@2gkC#NcYj86gm*O7C(bPrqYPKnY+$%fOIVRK#KU zo*EQ*!n}8yCF6R`KHm$>D7@h|R$Sh!ay|OWyj${Y>$?Zww(6D^2D+AIhl+@Yd&*gi z!ksK^A345pLz-n#h@bkZVL{>8BC!>=>xSSYvmw_Xa%!LGb98jj`Oopg-$Xaxh|WCh zY0m`4^1d;|{TFfepZ*}wsY5i-eq8abqX4otM4^zoF0|DxcK>}(9qXxIGeh}zmHnIP zfyE0FPVQQ~vdWl#3hZ-vcn_PBeE&{k{TH2s30;C9`nyT~8=3h5(z*SPY<~0$s13MY zJ`4#VulI9c^2y@wL#a*z#DfJY>R&T|PYlYpDf(x^>faeQ|JpA1xoL=`Tc$SZnb}1| z$Y%W>sTwz>b3eXGir(w)R!;F?{97jOpCoj8&aJOM(F4pUmQ4$m%~uz@*VSPT;A&@r z{BOnxs!4snPhjvjz&%p})b)hk4FeLZYuAmN?~EGsa@dNNj_y$UI^GnhtVmWgeJ)SK z`}-O#W+=i=$Cq?nb13Xt36jx8sU4JWtL@g0B7f3^aCeOac1AGva>ZAt0a2^ZcV^_J*qyk1Ky@|1Zo2 zq*5#@DoPzq<=8B92$aXe1RxkwuX+*ySVLyZN3H{KBptEvl^(C<95sdp*?7*(ZrFQs zQFnpD_-J}D*uvf@q1F3lI-Ah_*c-Cv$k$>-L=HmGhb;}oO zC`@Yr9o)N$vm}3gd2Yagc^QBMlK=2E#@k)C6W=`tmGl{)AX;P&06!VjSlwg~oKNGb2b>Ln1wD8`zsr zy021(*9$1Cc4^L(3IUC&_V)IQ;kC%f^qtd1^t&Id(Y4@A~1p*sMqpC#d(K2;S{ma1p~ zJK#taS?f`f8f?St^TRq7>j5tm1+>v~2 z?KIHx49hvwEVcTw+*$ESb?+pT2M`aOY;ULT?^DU}zmJd;h!(xQDwvU!l#-kriyUrs z6erJ9b5Jxj1V#_Y-T4TKOHu$>h#eAya)m^H#}81x$id3$N6>|nppO-E+YTNv-^~Mo z&>weB*S!~q%{Zp@-pS;4rIE`?W_*9Pp44)l=b+xWH-Hu-3yi+R9>i?4e+PKscIwl#~S zgB?-c0}~ScE7ODM(3B-AJm>*P;!N{EQL$O!3Y!8~g&!P43b#Yf*3T`Sf2Tk{XE$}G z0iXVCa1a)CiLC;4Tl!3T3{AUUDoST(25j3OSUtzRfT8vME=Vumm^Q32{=EfLkk=W< z?Ts6A(T!9W$Uk++ zCYw~OQ<}zM;DF-maxp@ zg#=YgeCSky9qdPxVYUyY#sgBtN;V`+qpwWats$}>q`Tb9pJdC6aDT}Y;m*(NP5QmG zGCph>$&=IF8?l}fDgAgqsmnG}s_xCIvFW2EWf2|>%aZ3en^|N3!_mt198jLU^wGEE zM;M>fWa~1~u9S)BMz)sZvkg;ETE>D>L={11u2dO4duryVOSf_(mUr&}XsZvyHF*2G z>pdoob>60LJ6-1*ec!QvC-}{BYS#oT-781;=2zLmx2!1irc5pQ}{LH@WveNi{k~(!0LsB@dkGvv5!19k9_51$wIWbcEgaKRd zOU=`XoS5O!*U1(Pq9#HE*V`5wp9M})Hf&AH8E%qToO1$ybEFu(WmlMyjlI`lSeb4>%w_=zwO*xZ7>XjVF+EFZnwB!m5z7Zq z2ATkeypgIi>CuQ!_C>Y3-(bG~)}4>wF}~TjG4HpV_AKM!`a+tlvLwV_>5%jlcF@w0{*l_bJNR5NH$1n30fg;Re0U>ld{DjD!x4B@g1urV zJf!2vLV)cAvM~Oj+y>I>>9m}i4u2jG6oMk>?fkViY=5T%JMU$vQ8Y-ZtyH1tcYs z;^HCq&(XNMEmu+|;&8svl9PwC*gfLP^&Wf6;vg1I%{5=&6c6_)5|SVEv9Li_8!8#tFR+W+CYcIW5UmTYxSt zut6RNp*F8K8jXx?8%utB*foOnZ!H%PyE$y=K^y3(TX8OIH9pxcFB^zlj#hC41>jz- z#s>(l-^;amz~gx^4!;=ZA1od>^;e%$?ub$9x^;=uj2RH$uh)23SHXY{yLy@gc?a7% zd4G2&BiIM_@Mk8jhG~XPIEt3^dVeGN-s^YM*V$2#NOv`ZgS9)gp53(xYvHFd5d|d{u@8B0`L=g z^x}Rvak#JI39-tdI{z9kH@CVN;WssylG{of7%2jvtCD8)Ow`-jm}y+NIKC9TG!Lc^ z;&avJTB8b1HpKcBh9R#>d`!|a?cB`wg1L;Z6miwGjJuw`i^*PF9Q#c_`-nfqS7Iv> zh@=3eNcF>eu+=V$*~NSc#di}Dd@*6*u||Du3Y!Q_|CiVJ6c?#s0gUdxKvD#LJpxxP z|C1dySfIFtVz{-9dva|El^Q?`97b3RReUvlNwfEZ{qcl5Jw!H~99iDiC$I*TQRm0N z(`=M)`z-`lvgeoqz3itRMsc;5kF^5{$2W_;-Q__+;($qu(kUh`M}Qf9o;T1Zu0$M_ zecYL1kwM4}=5hHD`|Wvq%#%?DL<+^>)0Pe%$`wKBt6X(a2?$(-8VE;)bat%2D_Apk zIV^8`>*INwCi-1XKPBEak=#6gn4!bTrs-yoBU%2JBLX=Y?*iG z2CTnNWCONyhB65Jbi;WaU=Nk70<;5JmxV<5yO0%Z)av-mLi7|$TU)IiQst7F20x{5_DE0o9?yE~Fp);k2Y{f+uW9G@kv+be4jL^*d|IKBjaV~$CjCl>$qFUDqaWFmxOcw~ zq6JA&*1msG_fBZU&zH3>`35&Cl0GLV`I?g|*sY|Me7`9sxXr%>K{=h;cbS~W-FI{l z!e1CbA3sV;&UAoQ&+G3+M)deqtu!(N7YT_m3K m#Od~=yn(G6=fl&h8(E3cB?{zv-+;;vM_FD&u1xmTyZ;5jV>oXB literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem307.png b/doc/source/lowlevelapi/lib/NewItem307.png new file mode 100755 index 0000000000000000000000000000000000000000..7743df27b4f98d5d94e77fc6445d18a0c78dd180 GIT binary patch literal 27128 zcmbTd1z1#lw>G{J5X479R0JsrDFNwlNa=2*RY1BMh7eRjLWBY7W@w}vL`oQX29VBS z=h{HJT=4ZRM>#zg03d9;{>JKZ z$TI@~s|a~12`x|K&1oV>$}wN2lQg-6Z06GwS^pyDFr~m3bd(Zxd~Y7hhDIk>VLiOD zF6ZgMV6qVFn4iNN;t_g_KKBMseLbt91V3sIK--GHvBtJ)Vlnu2r=4B$85aDFQ0&Xw zY_G}#KTlatb68eZJytrtSUo+y{6-BwcROBB?d&~2^qEHb z_AM+dXx{(;{K312;0+UhwIQSt4UZ!NZ;D{r9(+TP9D3FD`-H~&9ss0YXtY{fo*lB@ z2LEn!Y{dePB5cJ2*Cu!l8vx$53DE!m^Mr%%YR!mR?(e;b-$fs}>#Cu~eo#`oiP#is z@2&8}EK1|tE&&lKb0g_0p?yjbl;t)#K#^**Q}?@&X{G&^3f{`&vwNE# zFpYJrp6bgq=+|bq1p}?!X#zlv!5;mUg)Dg=3kV2w@<`fpMz+}-IX?N_D(gLdq9=NH0hQ)SF4TZ1H6$x%bxN6bpMIK-_MR94aL}esxzQy?#!G zlJ?BIVD#SowXx7Etz|K(*@?Q)tAH!5zGGr4pS=NX>7H;ei=(?Dr+AUmmgGkMvuE{R zF@9$S<9AL*&N~e2s=H%tQo2^8LTU~RU0a@R%TKt9!YkCFrFY0i9ES75~(# z%O~;N##b)h&PXga)$F1U0AT%@-@tCN-es~QEZoYGCd~ zG=y=*-F{YTD&%#fTySAH)$@`pQ`OhTB7yS=e6mzL#6m1{$pbH3#i`yQv<_aMkPG`t z-bt)Iw_?h7>l>U=&4;=#I+~rBUl_+aN>g`+hN`e%{f z7{@y+lsW9h?sf;aNb}GUq{#_9#sXOT8wbB5I&St_Ag)&yGB9NCcH4<{<=KU1C5shR zhr<_)?up^2zRTZnN5e6w{{0JyFZ?*31=IbTbn2t)yyX;mzXsG3Q1QfjYD(O->)tV#3<3uhdHLGMK(E3km6u9ZUnZyFt zRIxBnF!sZO{tks0B`ko}k^3a?H2?&Nr%&GbXOz6y0k`e<$0q(yw6b z5^qlPG*Fe+q?|k~pTP8R?dwCHhcNlBkO_jBT-1e(pNtS4?5RSCGrbcZ7Uuwu41z^vKIe=-WH_Va|`tO#fgu9 zDs0IGP`m6QgC?F?de=uKqAXY02jyhnTTT@`d(ah1SHHKw`7PN@IcZDNz=>7jwMffL zS_p9!>*s`SSD{ZXybovNOJ0VRea;sAz>=*qixMaveVwywoLRkmXKQl3?FT+yHGV|C zQy=@Ry87hfE9#+JYwGt;7CgV+%v{@^ub#b62szJ-pFnvIU0jLS`7>cI=k_lz=~Z{~ zani5@^yfKGensvqMYCcOWQ)9~dIjQbsM7U>vS{~_vY&ON^AR3G(ruQRCFRNIle!I3t;?e6(yV8dv%7|B%lVS_Pm^7Wi=8qS(PEwq*8Oqu`>%b*{4+A zw$>3Ehxl^zLgQQDE<)q}@ZTHeVxHdq_UGL~vv$85n*9SPmf22r;(6WPW7LL(Dw?N^ z;}DkQJJD$5l+hQPQ$a>e6RE4={gc0xBm0KM3$M!S59T>3pEyw}rsM}H+RN`=#Gsmf z-Vd1c77~;2IdJbk9DFZ&qkmB4MWfOrZQm}mT4$~oi7ge>u;iUwGq&!1;mkI+=x18t zWKCTaN9Lej1tjJ=nP+jufthMqKv8tYc;NsplK~Ih;3X&S#Oul;^W7QvR4) z8fbHi$=$Zd^KSN8-`~$21jOz3??V?BZr8J6=F_pah8+ze8o6~c)H=_b*IRvw;xKX7E8WOcm+ekI z$Ws1q`X$e#;5MHBwyNW} zYRRd6n!&*29W{~W(>{lurB2-)dAH{5=AqzeJ(PCh(VRb;Gt>>M-6u;2daJ@HxLrCcDJPc;uw-_oHaDTygnZI5P$sGd1-bZc0<%e zX*)Rnvblwhe4X900gH8GW4wa9ZudUa+k$E38}f0yQ+u7GCmoL*-v?&fr}11y)I;RH zzdA`?TQ?gb;5*%~)H9Ar%2C2>u_Z=>x$hr0-l-*5jR_cZHn0;NsXvX9XyTa85k z!Pe=Vf^gQzVtLasSsk@N$z+;o3!3&=(LtbU5^?x#R>bAfP;i^3s|7>#W-vebDfMq^ z(ODB~v3w`?l*p8X`re@cZYo8YFR7oIG_OM%+mE)>e^MvlONUe6-VLdayVON zvdBD^bssBJ*B;dEb8-vpiTAQballcA&|1Rav=9_!Nkw8{GS%znwlzv}_%*uAh|Msx zws=ffmN+UKvEvu|jo?eQPSpO_o#*_qak!?QinvRJ)mv`*;Ff3g^$IG)D3(39E_M<*l7MRX1 zhb)BomnS_y#-D;o9eeI;+3U8OXLCVBS}N70zMD3ChX|9aa%k25$X>J1@Q^&cSEf06BL!4IFsL#*<1N-8cF3Q;)An zWAV2~RC|lW2iT)a6?!PDz`lz&b&zJEOT!0#Uv-n|WX!F#s}rJ9`aQqK%jI{OOxDJ& zFP8PItk*mo@a9T;mn~SDM3WcSKj4X~O+oNKIG*t>q5&wv2JCCzu5CR|R2v|l!wkRo zk@^@nH2f^mxew|qu%U&Jr6fl{4qtscZ#H=C5&CcU8`%M;4O}?LDrDvRq zVk$BmqAVpK$~=Z7yKPm%BRKb^Tovhk50VnnjLP(D3RFcpJvWT?IrhDTFkK=TjsaXT z8pg%4@h~Vy_%Q(&CTLDc5B*kbbUf`q^ZCALB(3T6a?rs+R_BOi+|=aDUp~hbet_jY zTtmlKA_uHLuwF$CiF6uS&;_h?sUWgu%jDOc24$Kp?4#uSwW&SEg}<)j*Rw?^V%w>Sx>HmmQd*7SW>-@*lN2F{MG=mo^mn~f_Up!Gd(is{|MCy3=%(Bn_5G=}*V3glz?zXnYgd7q?K^Szs%#pbWN*l~ z-htzXws_Th8qP4L$bO!F)1OX0b7lJWG0W~BUz{399nt@Ox`h@N9UWJ_10hv3@v|3g z7V1FwXsD{gq9`y!y}mG)M=3KtoqM>~&tLy_YnS@6=|=;+A8W5&=w=b7l@(@jOfikb ztv+5luX_BTF6YE1?&cBj8YErA4>Pi~!<9FM!@Bn^QtAC`oTVFk{fa6S?`+gw-RbLG zOge??y5Al=6sZFjsNeU|C!cNOF>ovA>~vXT1L7|TF1RMZXv+!sgYW)}IQs{P^TUt^ z>|+Ly=i4o+x+R9{LV#Kkqhj3PM3s#dx(CLJ7pM_7drEtPGq+hYn|ruEh77yUrbP(c zTmSLl_Q7(J!!Y=Mi8C$pNwihO+ykN;MB-Mv9t2Ids&4;FtZVD;%v-eo?0O>J`lYSX zZT%VJ2s0qgw|5^}gef=6or?132$H;^#fQsBNT?V;JggNq9Gj@c45S>U*>O7(jkB06pmi4&L-bLlM zR_)BAuhCs^A6PQ*C5wo_96qZaXdyMw1#s&%IJ8G69(l&|E8a`bUeVi^=iVaPxW7!< ze*N>Q%KAZu&GSu&cd|-Y>(Y)+mUJcTqYz#GXqzMNw0_uHu7(VoLf>}K;+fP#${FjT z7nO+2JQgIOCXbbtdxC`qr5^Q zO4zFVs3&WWlxrGu&sFM5#X6dMFHtqJMGhLpc5lCQdLOIJa)!R{vg_HUR-_fWV4(U{ zp1>bAulAdykdMJYioNoj8s=dgAU@g&r3Ufr<5UDCe zVnFOSR0ddh-M?ssi09O;Q(F(aEqYr%4Ea#nwJ;rK@bH#!2XewYFUDtypZ8PP?89X% zB~00o{n~v-#^34@JQYJxV>jNLg1o&BkrhAtj9=g{UoT^M7I7hni9u6HW z@SbjYX%%DHOYla?GCO6PXpIDpm;Z7Pu)KPIUr7r0>LnQw{v!e813%@|bT47?$%6~J zXO!CP%mY)SUBzYCc;<+=Yjao=bw)+WV-~iudCw&cP!J%;`SNhg0*97oXNNbB2HZpB z82=((sRC9`O1#w3TWbl(;yXjm>M`Z_DzDtvwy3hY6UY-O*BPmN3}I&?i5O__cO*n5 z`hAaTh)z(l5MBjkf{c7uUZZnK>8I*#h&UcRcV+HfN_!a|E%RGIaxUMb12-*~_=5$W z+)>E=poZq!kyay<#32GbL5M`fXgcG_-cFgH!KXamG1?A#k}#qzXF>+=q^*InNR8xu zF1t{*nza-Kl}Mzz&7htoX;sLB*sTOMxyVB|k?OSN8oR91%P2jpzG_jS-~F4TyjdNv zs%bw1Q{V<(QfsS306v@=kl+@)h;K_ca}QinOgPt!-^hn$25q zxGd?sDk&u5Wp+r(PFr;WHQ|eth3yBZCza3}-=l_9p2WEBE=a?$fsO^5oR5-^AuOwK?&fm_#cYu{^t2<^q~u zof341JJsZ2#i`l$_Kdr9-V_6zJ-4Gchly1k5vn2&Iiyq(vY#iG1@sk9XTSnNzfW=d zMpK#P%qbL17dI;RPacSKN?Bmf)4^RUU(kcD-^W{@h6n@=!2mo4H zJvY{%q+LE8m%1wasbN^XC%5PG9hV^a5>;6EJ#HXSl+OmTwdC4-QU&+q%P; z8SKawUsG6Wo13|zvA~MJyeX7s-9|>IOF1 zz-)u7ktAFnF!EJ# z!XXt0&h&diBAK|1Wav|rD*)sPp>K(@rklAoJ187R7l z@RDe^D#XUG=&&=_Jp}+%Ir#Y~2Hk%o&+pb~9rZw!U0(GWjtXGwhe2|#=)pV|fXW6B zYh-2s7ec%*AG$MCob>nduWnq`*$QH?0W~D+qibqHwRB`;l&k#R$K{(W)Li}d=eccx zfO^+!UUlSn#wW_Ye)S0q-M$?)b1_1$88ah7HSmC1;0+mTzj=n8W&MvhNm5Ll#|znpT#?L%ZV{pAwB-X6Cq z*B2(sRDDa*()6kIz_l@cIhRkLD!(ecK+T|Jkw{-u_S<~Li*YhM6N9B=kJx%GcRkp` zxlZUN;b4wp{K~;9()#Hm)kUuYBlCvoUi#SOX;&>wH+?L_o#U{^tcH9&rCDo!m~&r@ z6DmvprSlcDbdCP$5KEb%^)FU#9MQ!B&DjURYFol8*mv zgm8@nmOrTeX~h-h_7c(lRw^O?wP~tWLg(IFzrtUHu+7>#A9_xd3|KBNNoJE!9^Y3A zRL}|RpDAaht0K)x+{|OyG&+xw@~dm1AUvxIm-8Akpw=xl&Y7QoE$qJWwMTvtlB#o? zj1`v@ilPzOk9w=U#~!R@6B4C`+K3}Qj9Sf#N4U0^<(s8pvYGbjNmP; zKj^Hlf9Pr=ow_75W@AHan#ILLIB4;JeUx z;762{Z&na0S6?3K3uhipOc$xI;vIWIs(!yn$}7}1k4FETXJtfDn$X-cwdNLIJY<+6+tX1Cj~ zye4vO97|`VyWG%)0?Dy?sl=`M9v+`OlSZ9`^&^q;dVb&H*bQVkVF9G*VWOj%*z_JrTb^CffN|dJM`RGLvZ}oKY zns+jd;Wb65c30i`z%7P6JC8}ub}IKBwVT~m^LSrPDQH>c*XTz^HKrZtoi*r9R~f3m z#J zoxZt$kg}PnF0}0~%#5vT-hk`_v~1o5gEeMHy?w|jQEPK!X{mNUSb-*bDH9WIzLg6P zJdrvvf^V4eix!=BX7I1ZNo$7usK7pOb^mQRZ)?s$nVLR6V{aXQO6vOZ5Z(=?X71t_ zyyd3(-gXvi@>tTZ#lxQSD!mBo33%7;n1mHGwR`ZgsuDU8D-2$-@4IGx-ei7E$R89G z#66-h_ZlXI0Xf)EvAK)~6VtZnLu!X^d-vcot8JA+uVkmzcPyr<5qr?S3w~20v>?mN zP&dg#o3$*FCLICYuAet45+7xQpv=pO^^AMtD4ZK?9eG9DHy=ieQRlwXVG~QlFLV)2 z*gv1SDN6grNaNzN&+V02iY8YJ_7KbZRDQqBvI}EY&I-}bA^{CD)`aBhhI_MmB$e%9 zBiwzw)Z{KL)&kDOQ`p5zp{#q*P$WGia-Jk&th>gk#J44xmP;*@+%gJf(Y%lbWbiJ=Ye6J4foJ zCb%IMU~81+$9XTn`ug3m%tbxk4k3@NWH_AYMl1mh?_OJ1y5G)h1w~rE&Jk0B-vVh` zI-kwx&nMiTZL+S7r9$)axx@^9gu2`b?Jn7C_yRbR8ET6VnItDb*kw5!TEH@U_eSHq zc$4)At5*ir4I%(1$NswLpdx95h)UeC|2OKz{w2L8Sf)+1y@El75SW?=e^}rBQ^NkE z$nmdW0{5~%m?o+ZvEwpRYFL-)oS}AMdst;Nwh%oIsFAYn(Q6Vywj1{er=k0O&Iyc) zgPyE6@wSg={nP%vjDaXldr3CeP<_UGz1S7OUPHSR3v9n2Tu444A^-;Qp|VleT{_r6 zjy#Mdz@ypf!~raEaQTe>E>K#YX$u$R058Eo5(oq4dT5~k-e3db^R2-_J;OQW4a|Q^ zQ7l)G8XsP^{wV{%&Ij> z zby4skPP@czlG@+Ut^%>g?Niu8daIZL093)Au;5F75fskMdP4>Ac!WY>1I}*kt{8IG zC6#K;M^z>Oi|j`(b5(6*q`1CHB6#}7sH?{1irH;^H2RmA>ZEI|lVK`GOvOhiN|R1< zv58g9EY@bSI{1*t!6=Rl3(SVMsWeXiB*Q8k0H|fNt9j(1&Zs)r_|v~gv2SrK4&QCv z6IGSsJ`70_r2p8*ZMTl^CTod!7o_vqS^uiEda(WiDNPpD8Uwy^JcaS$-Bzbl4hmS?g4UqV`(pK}BAj6?9(*hso>GmMh_6gBq0xEI^30* z0jN0+)+&%d9jhMwC&lq!gYl0*SsUnY)`Ku?^o%a~6OeJc#l9zmw@)(Ic*DRjLeTVN z5mxN@KCdI(aZV}?yZ9OVA3>(TL+eNWrzeU(YfkF^V9fN#jUbq;^t<%dFMIQ$$I6zB z!!R8Lq%rm_m+r8|5;`$%w89$Ll;#-N*Wtc{tL)516EO(x1{0){>`0K^P^H-ZL~HP_ zISWrf8$>6?o$0BLJM$%4K!7t_-s%s5w)bak{<;VL*y6;44&d&2$L7ByPly~XZj05* znj<};LDhdCSzCFSfy<}wa^OKc+wp}JasTcJ4VI8>enVH!^}@zg%~gA$6C+u z0|JJ-rN-<7NawYOyW}@m$pw4e@T#fgDP~yLxJzdpP`7c}O8$nECUL5ZmBS=!MEO?k z8Ggdf*=bWx6v2-mB|K0q5+!DDXVD4O zQ79J3GK@Yr<2@Hfd0JDS3nG|#rh8nWCV<9Q$$W~2l#d@Lid(}UsE5CGO|>)%Z+D%! z5g~Fyq&Po=MXo1QBF!H9LmhcB!(LFE+sB}fbAxE>SbGV;m#G*7yU`>}~*R+Dbz zkk+)NB|-Hiu8A4v*v=-YG}LjWtD8=K^T0*y>i-8@cHa&MbD6cQ#a13mSXcnkS+45i z-E*r?iPLv8uehS&`pUADNeV|^Dq-AFNaN`r3R0Ghx|iyIl3TQgB@@-JQN`@ww93n& zcABO?S<9T#T1bV-ZZh#Y&mAy{H`Xjpg3DCDF}eS3H)sk4UH0DJ#AY<5I(1ASJpaDy zi}kYJr;GUq%t=Q1DeKwjHI`)0tZNmNK5$hZXQ~(SmwR6Tl7&>+)zuP-r2ERp#=N=8hB+0wWd>CsYH;A$(H?lyiCk{V!fMBSzZ-L0+uYF!kkj47R zT{NmZmY267!&?g>W)^!S86gtK z%dm9JZgx<~&U%n%9G$!Nxn#3)Kd-Aqfa$}i9^;j$iT~vxIo8j=AduoO;Fi`Q%*^b^ zcTLs5oeL&>gdIF+5Bv3{6JlY>sj#pNMR_a{uzlNF7d)BdBC3#WEwc(qj91lRpBURJ z<>sFs7iQo3lAZZQ^XmO}Bm4SE+tpz^IvmdpZx>Cq6z#L^3i5yg#+`4&cr=kyog_gQ zLHa=n2kPP+-qd=__TB|wTLLZnWz6Ahznw@c{SlCq^j>Fl_14tZ71nNfU(sOJldOxP z%jIgKIZE4` zczEUoAHTOL`1H%BYLPzQRJ*-tU%lrYRU_#7?hrYXq7%cr7>KRe33+72TL!X`eo5=Zl)?pTdlTkx{kAd(~brkl$6n819&H}HfG?^B<(Td z1*gD1>U`udNaZn=(K)5PR5Ci(7wdF-IBd5xlX(NM6bDP?tY6ysi^nx3>RH>rjyp(T z?^@UZoDPqjd7G}?-uN@uttlZ@RW6)7JSc4+ks9`GuwJAM>FmTPiS34}4kq&1nAO}x z@!Rk2SOk!!nh`_?Zcx78ESdnG+BLuK#GuyjOa+L!#q$GK}4%ltk1~F zD?W!60A+muQab5QFuIdD>;DJmjiFcIfYQ^;Z_Fyo$a{s|Kk(hmARDZ-IfkWrIyo~$ zK!7SEktmp2D}^O_?ICdAWQD^i&!74EQMvF_c^CkU6t}lpydzX4zSDol9HQCeD;KdJ z?NuOsuj0lRh<=oMQCm+`-_t=k>tAiI%lcdR5$&$cT>jMD0l7WvwCk&_quxmKUNt3E zMA?-V8v`h-gc1&JYyeeZr##fky@m*dZETfM_g_8U3!w+XF19g9(QeOyWf1(wzAJt7 zX%AXAb+G8PW~n@w+R-~_I^Uzu9~wea*AFwYc|*j$r4VNRB+tS=@l2&ds*r^vFrH#& zOvxonYRC`?e{oQ0Q-^&|=d_$nt>2;YuUhWNyAjLQ>^sge)0ICz2olDepK~Ml$I$i0 zMCT!7b8d+7c0c#0V;IrsbHPiGq|lC#1FWFW+uI;_)MoP(|Da^l3xm*3n1t^N>Uz5L zRdN>Y@qVm(b09ojY?$H@$peQxK@hVO@F~~@v06Gge$BRLTNpH}$!iz*)w5H6Ww?H* z5jPd-i|TC+q3k(qQZ0JLC)1=OzGwvuI)aSdT79A0bw^9;S{rw6YbM=S{Fht5wf*M_ z6vN#SXOHcN%Kg2AOD{Ry#+2EoRbK2}7z!vSPJ`s6xyFKv=w_wOXUlZHioFH#P1t=Wsv+ua1|Rc*V-$bPCU!CvVW#R;=8AxjqlXK#L7Pu z79v~JIQs5c1cH>PgSFgHU4FmY+r~gh?r130QJ6Ck{}DS)Mt+R<#6%vG_I^W=Ni2`` zMsWB)Bm-_v!JoUvy_-u&q5AdSr|X;pJ$k;|q$EY{BthCoYdVQ5FbSU{}2)xat5 z4c{-KZdZ&zz6%dl2`NCKvYEPX1@Od}q8jidz%Y4;FDhC^l#hrFdQTH|Lp$=gC^67d!@h*Q9Ju)lRKY3Mmi}vsVe7@MeLKF!EfX-h+G*i&BQSkJ(DM zU{zx__76qWU7xQ65n{{RV9vy(6q%`DuFt46ZQoaEqx$t`YW1PPxPiF0VRI+*XhuWB zwOCuUoP#4$yr)yTC5Ojvtg}phS}+y;5Yr*$)A_`dT*Ro-TOZFdu9Nx4sUABYmq=Ck z1V@+iy{bFSvxSKR6YlgTDr<6Ra|aVbqk%ylBkQmH8Yk3zF99FK6O$W&qee5h=U?!u zkkETBaXo@B4@v7&Zs(NA#mW(FYr=|Bn``Avp6zS(FDg7f7(qcU*|OjoDYC3)yfMwrE2}(%gq-@>1!SLMC#Swr((|XzyG55uUKTl0t8uXb~18B zDK-<*;Y5YI&V%eQE!J#}65LGlC$lC3$~~{v2UEVr;6uhB67w;oYW^9~vd>D*6y2~W zx|92_uh}aoY7kWuY#A_+!(4Ap_mnbK4s%W$zrLC4Zhxnj@be`~L#5hW!(1<`KT$Y8 z*miwaL*>?tP0tVfj-^}dgpw}2zaGG|;ZJgCOWoN-cb@G-`^PIRv`ap8^{plYKys|e z$v87M1`r!SCfL z|GCW^j$3=y0yt@`9W=3z>}%hZG#%-K(&ZctP5adWTZc3t;n5I6&NxtV z;MWI+64`=X!u@~o^Ogt)4uBPY$@hj8tN?9?2jqR;!%a*0>b+E6j6LiSE<(TIxy}29LS;bUE)rb;jnU&Lf{*r@=f6%UMXaQg zqzc*89SG|@n)DX5na-R7Mbv&mwZfn4#2>oTH@+2-WnAg5taU%GmyNJU$|Otkeedq7 zXPU8vx0-rNDx}YC_0Q{QxBV&^sr-RFtcp<0bISToA4t(JR6V!9_Gi4Q+cl>6Bo%tF zBdQ(xNkMd|SYQ8b^XR?I9os;a&{kX$soCIin#HZV->TTnNhhS(OFLJyDcJL`SN2W@1OuI@ z<@WgYIlDG5+#~;qx~2tDRfN|@q|JJU3ZW%P!hf*;3lSQqZZG4f@Z9aVlZ7R-J74N+ zy$7FWau$(;rl6Gag@Wn5A$C#{%eUI!zSvHtKHjd!CG;zY7Q$fGw{8Hu>E$?SI~zDu zM@aZRViGcDC+m+-7U=}}-857Uahf%65qK0nOV?*9$EA-Up>2m&SbuxA$;*J)$dxCb zvo(s$iGxV&AHTQC`sYQ1+hL4$NZjTvT9}k{v3%VoAXSI7_S~kr=6MC~t4jVQS3X06 zso_lDbLJVOyz&A~l#0q-J{O+8YCFA&hWwh(=>@akcI;S^XZVvS-d6nx`$C!Pqp6$f zHWVqFnnO0?23$w-NSyM$@=nW>8Jm@v*EAMZkoY^moQYnbs^)B^o2abE>(G0T3Ar;D zQb1C@y~hUaLi<8y#cC}}-L%e^hI;K{SQaw@E?>yg zz=FiiX=m#&wq3uY1AQYes$hq?kfI*@oX}MDH5UlyvXXIhHJ40jGeuU!nBfZ*vLrW= z{kuchqv*j$rtAm9JZl74!t%Si+ZlKbDQ(hD=GeeVaDzTsn12`VxbmmBJ5L`s-#G&f zSLWs>mHD!(iDVvw+Bkm&d~^XpgD^;!LyIIuYYW|AiCi4;xE51Z%{i8;rBE+#DHA4; ze8(k*LM>^W>mFwG>~4Dwu3!aN2hM5c)HZDP3CzZN+!L3Slw{>?+V6i}X(oTDeJF_0 z%mKAhi2>1b+kR1PAOH%s3er)Ky%5N8jOu3$^xEk!PQZQgznlapu@&PMfu20`-S(Ny zA`-h$Lz^{#9n{KJ!*(v!bN4(-kX(R`Y`sP|f0t$LXYc^g-WvQ6rIgjw|#R?{Q?>d@HFJFG2wp|MS`9ZMZwx@s5Mmu(Q1 z&)wAQ&t~v7qr2?cho6Qzc2P+F#K|Y{bvuk**~jTITp*(4h@&c%DqYIsOg82jK8`UIVumWjiM{Ajp-BjBU1Pb-+4+!F>$<7B7TR)o1_?y2g-N`+=W zzO`P|EqMkif@{oRKPN)aP#mn$qzsxp6rB{Ble25pW&Wfm<>7Em^4o8W6X4Y^v_>lm z-l*saDv_Gay2rb{%&J?pTRwhE2Z2PAb^oR>F2DRFgB5a^@}{f`=kZD_vQn4r8Ju2pe9m)D>9Ood*3B&<-2g2mi9)Kjo#s@Dp8i?TNa?<`>kF#g z)Dd@TX&3I|clM&ASYuoAyv}b+d5C%dc&WGL_`PNnROBe#+}zL?O+P_xQfmE{PQ+D6SC1%A2C^SBM2r^GLO&ddZr4v(9a&D7xHKsi9g`bbf{C0 zjx!+k1SoL)$LjVL+V5-SI6bpn`rdYOscVWTwN-zY)Nnz|1z18Tp|uTE-<9=}7!>0< zv|j*&awiQ@`;DJ(pSArxMWyETPX~!vk2Xgvk(ges>H7yLW)vq*nnGe&&sL~bm`eUF z(b)PxH&)eU5tS$hzUmP<0~-J2>b-Av=kQFrD1;<2z(i@OQyPc)DC8Di`#xC%m*I+X z599XhgkhmVj|*S){ujy_1;rW?s(NSwN1mQz2UnzLxR?%su&a)VE zDV73#jz4yiuNKT7`YJ^vc}1=4PEnc-`HXbj(638zUnY)F?&ghY#rX>KrX~+h$@c|5 z`DT?PZWR#R@KI^?e`hcLOL;ezNlP{2EF1JlA6!tkedpC={ zk|n#diI`?>W|}=eZa5=u(e;ZYN-WO)1Ldliyt?{)HD&p-{6-qwuKt0Tuxe75)YY|Y zX}}px?Khl(kig|xS7iL67mE2-=FeHR;TM+M4q7r>(x}&UNE?aQAz&wzqxQsKU+b96XiUJw(3;JRAWo+ zGcjBF{AQ`^aZ04QF(jHDD0iGa@?}WE5)^6-NGmOzF|&Y7u= znVwtCKz4d|$yX;h2tR5aBnS(to}XfC&JUmt$4t^l0(!r-=$3HQIARgF%i5Zlr~c)Uw9wM zFSi)v6n3($xvx@b*-5u}fXb$@uuqFF>9YI{p=nnhYV~rP>twx1;Ko)f#-;u^r%7VO zux2?iolGvCn`v!GBXO&{+o=$ts8y>zp5H6MEOB1bi@ZhEcyPg;xA|l`g*_f-goAb0 zWQ{)O?C!*j>dk3yQjPPU4^TY&Mm=2Jqp`aJ-2#NttIvWEl3y0=z#byPekJLNljpo2 zE@e_eHdh7Xl4hQN>B-#!4s>!_G_jlP^6IMt+CJI(;s;G*16m1A-^eK`WAo!~5WU#R zClZgp_ASeH86W)gsE@efoeuBEA#%d zmOlOJgaMKWo$lSHlg!)!davT|(&>CNQA*GZ+!jont5?2n`~LoE+S_0#+ zC7y{X6-V!$mv&kdz%J!;(@xr%Ec+7q_TEzhC;|IjN0HWiid3_nf%}S2V(whpKDNhy zFPYKl70$m1xGwjSpK56~Gva`UivBeGqgba8zr(vIOuC-AsG%i=P?DV0( ze}Z%CYr5Jq*TxgTLl7LsO$3R9|Beu_-VC5=La3TFIitgR-YG0#21<<@MvAl}4uzEDUtA~{So3X^w*bl?`L7|8g_zuo`xfU5K7hd~iS;ZW&ZpO_Q zD_X4%Z&V)cb|LS3=CiqQaGLt6Cu+oiclfR)P8FQKWak*BgF9u)G3r0SS{HLp;4pc> zQkGV2JFa?*`oZc?-4+Ge$OBEeK3(U|dJY=82_0E>7+6e)R*~?Lm;9-n`+)c*YvW|` zpJ`QBg}*q$T_3V%5>m{EWa~50m$}-oCu|xrW`p{WGP5eu%A?u_|LAxkBWs@YX+?#9b!fkQN@S6$u)%%u&erL z_K6uB-zb!$y&;upfH@xiB}zz5Cs_H!GAh;odisNdotcC;6Z;8KQu3iXk{H8{2>%DZ@p%CiaHCYZcV%{1l|gNiHHC#!jEFevk1sQkhiK zL&ULXF{OG2rutu~E`}_mz%)$4mCSr^=5B5MIUmikmN9WPd_@FaB00FEsFHq~npx zsh$Z7=*odmrQ6kyw6as$H#s)rYel)`pHAh)-Q%2uP-nc~THrC@o+KphOZyfWs<+(P zrz7q%c~eN!+~}X$>>XguVE)ha#dTv)Z~j=H(RrD&*V)YZ7Au{HoXR#xP(Y?QoGsy7 zGhB(u31B;B%xxOAtCPT)aNM&N!#7Ax(Y+`Vl$&}?H zIV!(6SlFE5ZrKW`oPsSvEg!wUTD=7a6UnbPdpLLSGQbhrPnsIX@#FfOn+>45I#dnn zsQdQSZbkE(Uk3NCjYImJ^}0``m!pu`Yvs#;e z(w*+n{BdgwPE(O7zu&KfO3{)OXMtA0ASdSrYZV+qP}|(E`lD?+eO`16izD>Naa$?G z1Ibl*afG+)J*C~UX2}nKe1<-3zO52u5n*xN7yKjW4te8r+Pzalkq_I`AAMG_c;n9M3J;aSb+&C((t=rk{4?JMS?~N)<^*s7@SO{Yim58qY8J*nZ*e+zHvA z$T$lq^BAtwt(ourFs;NYkYecvXUxEi$5}h~KegR8`(s>Ac3z)>-$_PKw>#)w z8k+W)RetWip(b=~}E1RV9+T4cA~6XOq_q5`uAjI!zbWm)9E} zr=j$o6J}BU*0uR3`RZU>Sn~0@>)IO2nYU}eTMN7u-Bakjn%eeC6|P*t=B%sObO$xsz>uxvl^{p4oxpIFHK!I{A9J}#*mB9 zqdyAeqT%ErRfG+gyCAf32ck03IBGXnw{4zvM~s~oXyXQ|f)rz<`g?47)_P_-W`=t0 zPnO`k+L2REKYPx#1?AKQgikxpVDJw-37J&79n8c$rO3ACbR>)a>7V!b1U>nvx7 zV!74TV!2~8{%OrrBGP3h%7dnFzH)x?{9Q$L@P-Bthil(9ncvrFscGj~gvc*h&?-|N zC^@UkkGySNN5=nY^INfl@4=)_LbCBMC6m*N|5Mj@$2FC$T}KgdU=&AX7!`;e0Rg4A zB#0s^0!oY0A{L}bkS>q}m0=K3qS6Ecp@)uwh}4KQAwYmoMT&$Zgh&km5>np7%y-{= z-*4{x&-vx-v-eZ>de&MjJl!duJ5i~cq-)%XG5xXExw~oQo6Uu*ztGUavwLXh)T}!R zf|81R%;Jj^e#0k@<%C}0bTc7_$HPd)U+r>eO;+*=Tk^vCJiBHN_3K=$4LIt4PP1}} z1$1B+Fn=K$&t5j4J!N_6+FtzS-wVRvnk}X))uFS;TAB{tcfRlWsX07D{ERxpOnP?k zGl6)-!BnoN`F(AbOALYRJFRP0I2 z>tB~u2{nDqt+|K=%xj_GUdd8FPam-@*DBoLEHT_ZA+rNB(>iwSvmDwoUZB4ud3C{h z0>9lHS=SBskeLm#`Ll&}*?)zs}#kWiTD7S*FWOS&ufa!p@=eoLbuNMx>FMt}8@Yh?;QksGv)c zy3&LEz35G7Rb&0Fd8??6g6Ivz5GIY2Wm;-Pis*bMEzQ8qA*& zF4}fnKYVPvWO%r`AlV3e>x7ri(D%q|Um-PzTB|>cppX#Vs!#Vx6ZH`WgEy#BQHY#{ zFy~l?O&Ri`%Mwf*vb+b)o|P?#A!&7BW)W`8=;HEMFJE@X$58kKZ>}J@&)IrA?DirW z6&W;&4l4HZ(wgxmIE2knQ@-8>Z+PM65}jC(_NQLv9oRRv3vn9K4mUCcbPu+68B4)e^G z$n!b0r)+cBdeJ-J!GMYp*8v?yHg45J2qP)`s%0{5coY)>K|e@0bG zr!pBZQFUF>XD*v@w+6*6?<}()sPhKBI0ZMA-#7jT7X9P)GUF7WWy-NDvTv8FU(u?6 zVV-!Mn0JQ#qbvpets6J~wy_Ob+{U#Ny}ZoupITc3VDLV5;govcPTg7O=9M%9pVCA)PWe=im*C!kVN{LRK;NWHhi4?Fp4}EBLOASoQOhp)ZpIv)eoUQ(Tab#qqbsaV~=m6#;z@@3H8| z7Wk+}1{Ey&c$>FE*A7^ReLG7zBKVr-CCB)_4RqD}<2W_d&>xb|I^R_=-rux}f=S*e z&61US_?>34WaJiqk8hZ6QtBBKRF(tV7_)otH7)i`I3l4X=WHqxh7(;Z#6kH;rv>Ml zfJ?hrysO~&FxTxxev-%5AEGHimZanm!1W0@Vp8uo-FE|4+u-@(Z97-OMT2cjMX*bz z$eXR9Ed$EX(Hn>{@SwkKSB1$ENx(3BAMZp!U#BbKWN916FY^2X;(G1xI^#jAf_5ob zCOEzRijQDM1O2^-G4t6}v;fQ{V#1yDp-{{4CE4)9l>YvG&UFv3S(K=WI7Fc??>kIX zu_<~NvcflfJc}RJ#A>ljG#RjJ}gGLzUs zTvp8{7dF~kjOUF7z0=X%0p@TV0Z&;y-|AlZ8U+Uk*px(AVh)sE|;7d z{gscaFARCWj>lcn-p2U>gmHp|n%tw6G4sMo8e8g?s6(omh&m6Y zu^`Hx5a>*z-SFLkCn^VpXXL8_uAuNmPO2C4VE}sa$Nit|{8@tvk2>~0^xWcU{hd!P z>m!&-F`^a_nMAbUi2V9$i04l9b0Kdb+)_mI>85Db+Ee^B!F@1%tqJ&7UtyHWrFplh zoZ3XK`L9z<92t=XN1*NKAuS|kd7#wqj^a47GdwhnuJcA!#zj^)j-$1)>Ol`(S@qRd zv`UYUW(S_`Vf*@dX2x%o*k6&`wBQP0FrGgj*b+YfF*S@eShD;mCnb4H{wpy6#rkDj z)NaR{Lo;SxN!a%Zh~>{)*Ge;WyPdLztisQS39$#=yLJv;Wt6EACiv2f^Il&7=qCGe4Ta?5NHPU>c zReM}8+`IanV^8?G+P*PolN#BxP{+MK`1B~1ko2h9Mjhn0lY1GW&+7aqKVNYhqE3he z6GeND88* z!~t`6fwu}%bfDpUc<|+}t2ut-_qu-$!qquVzr+e8FP46*7SA4f#j2B3_d-e&{KUoQ z84Tlx078aic^LCY$|4;-M#xLU5h^8YHM=m*-7xCPt%31$`%In&ns>QEA%aE#!B-)_3Xl?)6j~U;#+t-g*KiA z?ux|^IXpd?ClOID=^Nxg*~~nZ5D0dp<0GI9xqEsFRr>QhQ6zj`YFs7t+vUjGpZqIB zS6X)C_)cH83}79ptL&r!dIH>~UD7CJmvNa~h$&6$k8-06qduAz73%k5*>53CR72ue z`qYvh`U3x~|2vVppS$}-;oBuH15W@bb7l?5(GM0MKp0jP#$5QIcbX7rJ@?Us{^&9L zIH+==HtTqcbQ0C(r`0>cNB!wq{%=Ow*pLgUj51!EJNzKDMid9*?j1344d)TUm9bx! zSPwyu`jkQzdsX)U$&aCv=BRIEp{R-ov20+cEqr007A;DPjERC#qQ!)8wTf9ec+rnb)MT$%QjOAngBd)I3JgwFpd*Y# ztv>ueaDe>(6~AkOzjF+j#1$ZQDoEZ;YnFm5P($@gqvks6P-Dm+EQF{AWm*NOd~A3A zhnBxIr_l@_wWKoSXVm3gV*_PWr`d`Drb9frk7}x-E>US@F7R^Y z*(;1xO33h)D+@Qnrbd4(&ILl*$>cBGx=D=?eb6IMKftXbq&8JX#XcX$Z`c@H=on=! zdIvtdL1%2# zSl|wb+Rli{gFx}Je@Y)qk2Mlr+DD9PR4>m_aIIsB5+HXimstzCwiQXcOXWQ<+WlWw zNW97MDCT%rlv2S3FBhe8s|Jn25PX8?=tmqvuvOp*LF<4zK#c^sk6Sg=5Ou-B=d|xQ zwq9O)on)$VWGL*Eohh>8D-65o`D5`qPJMS^WIIQ8e`Y@^ zYuIzVE#>#Cu=?f8umlvPOR!1Nk@0c96aH&6K3#$TB6Z+RgbC~*$aIpN+79hr*L@vi z$@Zwu(|F1Is_Lc9CMV%KD&I)CvF^BiT=PWK-skRRy(qaB6V`J%w-{Q zm?ls8SwZq$@8`Wme%l*8l6mQAWxf9P=5B3wD zTAY||xz~c>=4jgs$=i+ROcs}JUba6Xy%*AERz!YUXdj||VM(5Mk^f8R>Q7OZkLq8_ zdSN`~X4=JunXR0LYq@o)cZ}vM7X`E^(qa1N_l+tR>Re+&I#qWSneLknZ*iz{3XgeX zn!uSgiVSfKNmaNy>W##wmsV|TsmNm3Ti}EjlfstIhJJV5*qF_d#~PVS4_CpYl4Q)m z%$POTflB?sS6>OOn4p((m?!D=il+(}oHiPn3vmoV^rw{v#gQ)76oluytvEXG#!Vab zz6$J*x679WBcOcE9Z>xnC9$%1k5Bc82a$Kr^;VKw-xglCaO#borRhhhot#gZdgj&^ zlciykK&&6N0Ncfc;18zACI~Kses5&-jk+o{!WK{U@_#CNQfp@CUS~l+ZFSoK>nrty z&TIzc9!7^-ZEt>WE|D4dd^!-4{oxvtXl~kmH+kbCsd5*At9?|@2lf4|LBSf9g?X^P zF&!43X^~~oMkyg)8qzfQG|fG=!$uuyj{R{}J zYzy_+z+*L3)6)EJHTZ82?sB$8+Nm6mDLsw&cKCzt+BK+@x97EUlIlL`!IvtPFMm?l z=I@Od(!9kpU-?p@&MP`5C_bl|bVdw2A$aLOR><+S3w)fbEJEQUkEOjKMt%Oak5u#? zzZ0a$AJIvsGRX}ITK?DlJ1Bk@BnbdTD9%QW$WF~&w6#}2Cd348^X7be>euCeytG+E zdUyRXW$wyPo{jE}i+1(}Y$ePC_%BJ>-8Ns2hWCE%fxu(e1<9)NBcI>ZeA4(*?vin- zvcAB3rF<8R|04>;`gLLMT6Ki}FfJ!E?0iwr4y{srWU-o->~Yb3Q2&W-VDkF!r{P9Z zPxZ(@xfX3jCEPk#{iOVLU?T{hk9igJpyjo1mcyBvgyLqiVW-2s)8CKYymok5|HX@} zKETofT$#fN*BhUzr`;}%is>Hy_1&)C&^O`6J`opJ*AC9+Nie_{t%6z5%id+$h|q(O z;wF`ejl<*`(+7JF7UzxB=-ZUTq?Y%vBx>bX&*nV=0y;2n#!PwLJBaJ?dFi92C3V$I zX{H%#2DIjwN!BY#FnZ;ev4_+bp2e|CuXMpTvY)6ZHSB&&mdJd!m3H;ZQ5g(3DO?}; zL!)$qneyXq;K5GU)-&f|){Rh$3YhidWOf!!?5b8nGw+wap#y;P?c?p>v0J`VT3zXz zb=@)rEho2_VC&9_zb*@jkP^#~9ATZG-`~+zuuIjh-ZL@cPYdf^jcsC8&@R6ne$D{> z4IuDckh@s7Z7)Qc=vT3C%MQ@2{1dF1!OLN>bEU?OkB=cvfA`p-2kLQuCJCjtXW!CG zxJ_mox=70H4tQ{rpW+1x#TagAARqt1&>SLEcS(aLBX1BE-vY>lmx4cuETM{*dq_wz zw3m?8{B1EH4L$>Y%=E)`oE~yL0hIU1$+(F6EXJXXI5$i76UGobrHMPkNddfu><_O` z-z@tPm~kfg>?f6q>V}SR%r>Dum^rAVBl>JoV^LOPq%`K9$8@8iXwOE z8O+$Sg0>n9NOq!qj=J0%F65X*tTfV458hyjSx*ClG6pyC|9=&5aS6O%;7*##5Oho~ z_~3Ss`!SbU(=hpDADli-M)DsDs?@Rdk7+r}e#^>3M)ddA={v+g`HINE-1_lO-EQ3S z8^?x&|EFC2yDXRfXlx_5D}|-&&)+>j{0eyHxZ7HCj*;xFz7i6$EomCP%l}mb^0DwI zD8|w+nX>ZMMge4;-2vC77i!K?gOC)q>OB+Ezx~Gln)D`Uug7O0UM8~*cQQ!8kDRZb zy-3%&pXB9`+4E1oumidpcf-ZhW^flG9f&kf*AFl^1f0tSnh33vI6;@>*Fzbp)$ZZ;}TTvFbI@}RH^pes=a(4!?A7@Y*5MyLK^$Gd|UmD-{eZ5ra7 z49F}MVDFY3V6*Tz8y9F~{J$ddZ`)_I9zT00;gS`3t#G7m3+TX$iO?PojAmIsM|pFB z|Hl}+8@{OYo=k4QIqJ8psLyf*K!?|}<453~QiBRxj(e%!-@oKvJhx{O;4;P9fb`L# z_Ra0?oi5UyE3@qMKsKF%@3;J?r#?jh4U%>Bw83|~4h~>|all!^-pl#v|I00ZTM1RwtNG5q1sA+;l3IoB0ou{KGt5;uJsw!c)4IVIF0=BwP0H3HUe{OKvsb6MMk9!JzyNuY4aZ<8Kdi96&u|+T5`u zF-R&wX+TtbEE8aDr6TlSC47?Gl7#Df@}f;;)^-tjaRzgQ1<`7 zZoByuuhMJhIMkGumX;#G2wh<;fMTIcx^Y+#Ro$BQ$CwLX4{{_*pXrJjXqO`bu<{iE z0?CPu-Bn#DTlYh^VQJ@|&bqrm#niXvO;;o&H&m$Kof@M?+L9sCfBiRw|G0qtMbCu4 zn#@)|a++yG@JLCg2WXg+Dvf|pJIy*vaCMGaF1mrQ8NhRA2T+u>zdnA^m)t?O1_&8y zfn}K&2P!BM%u50l)GGhTKmmwh^F$^v2ksy%>;_1juLnz=%>neeq@#W3#_7}vw7UU7 zCHMaNUMVoS5<|0(RTyfb(+1r7LQ<0N5&Kj0yS&O7K-${(SfvZN97iD=xNcneKE(8e z)(PT&TB|JErw>Ps@aNCfI_!Y1tB3&)JOxJD3CL<%Vt>-d-X+ZBq0iCM_t}lmPI@qS zFzb`BuSVSFlsu$s`N!QPPiGJp2bh!DZ`w9|YL-z9&Zb46XS!L?fViUc_nM9;LdX3E zbM-nwC-(%q8taU!e?w1;uV!k(Hs1cbqRm?Pz4?HY&&xRw3A%~jpewEK>sx?#G?+O5 zx^^jrRj_|BHKLkL8FaNpE7|luM^|VW>%I$7rm(EiE0de3^+E!vC$N!GJ_AEYwXU3485X}jy1 z?28ktdtX?&1qr_V`pMoC_a;84-S?f(p6pxLoWK_j)Z`M=N`!6F2w-h$eOWg??_^2} zg2v_-)Lr;ml^Z!JcGU~87{i$VUPF1+wg(WWY;s|=l~pc{Y}GRntcI}c{9dl~_B`u;k_%uDDUm@B=)JuW z9ds{X?Llx4GV5aStWi&^@Myr(58A_~J3J?}%rwZn_a7+uWxBqa`qlzaM^?G zgZRJx8TrBJ^d$|j3Jvyy;f zK5?u7J@}`2rs8=4Ky}18*5GF116`w%tM(BWl%5i59l|_JMi}kdrBU_MBYP)2O^AMR zL!DILG;FQIx!r*KhDGpLVA27x+W(cQ<6OaX`d#qXWPn%KtgB3$*A>jh6ZTS#EEvgU zC^#!G?*wlN8-9xYCcTt)(Cp970RDQisU-H+3~i3~hKg+Je4fAR0irdVJ^j}A$9mNzhL(#d)(yHJ`M@~6@C`RI|tcw9|T|2>-{#Seyn*!y`v`2bl>i6tmsRaql zRz*e3&jHXsqp``s_O;Y5T;3?V(--n%wUEiU{-8mD4rgx_!wgVDaC@Zz>wq1Suu(HCPIPMo2jm8y0vYGN;ozaatywE>zu_|&P?d@{WBQKwq9VUU zO36;^0o}u7=)!IA#`W%qC2R5hFxoJq0dopjc>+&9&l!4iPbYDmV$|U>Gi}>jWCzV5bS+`rxLWx?e(j<~})BU?mFZPplf! zatZzw{s5%D5&`BL#{#I7Vd(;p%;tvY=yq4P6u3D;>moYu(3!5nql>RTO$f#&dN=2h z$$Uob{Zo`4w!W((EOCllB>7XH+W91n3lzxROQMo9G>xRuXHNN^L=y^R~8Y; w^*m8utdH#WIRU{d43?!NBT$Qnd7>@w+^P2IjW80xivnFTwLD*Ha`Vam01C7hh5!Hn literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem308.png b/doc/source/lowlevelapi/lib/NewItem308.png new file mode 100755 index 0000000000000000000000000000000000000000..d7480fbf1a70ecb66217592412afe39734def9c9 GIT binary patch literal 44203 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 a$wK{p75`fMzULpJUmYz&&0>w);r|1=+_n(_ literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem309.png b/doc/source/lowlevelapi/lib/NewItem309.png new file mode 100755 index 0000000000000000000000000000000000000000..a007160cb2593e19e151938bd5724b35dbeb6f4e GIT binary patch literal 94550 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 literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem312.png b/doc/source/lowlevelapi/lib/NewItem312.png new file mode 100755 index 0000000000000000000000000000000000000000..867d4251809a8b0bb3e9895fe0bc5753c98b4c16 GIT binary patch literal 44941 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

c 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 literal 0 HcmV?d00001 diff --git a/doc/source/lowlevelapi/lib/NewItem313.png b/doc/source/lowlevelapi/lib/NewItem313.png new file mode 100755 index 0000000000000000000000000000000000000000..cc1e2103e03ac889064f57db17c4421806912a7f GIT binary patch literal 8196 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 bool: assert succ and succ_two and succ_three and succ_four +@pytest.mark.ado_test +def test_tablevaluefilter_deprecated() -> bool: + a = ro.tablevaluefilterREST() + a.set_filter(value=["specific", ["a", "b"]]) + succ = a.get_filter_value()[0] == "specific" + a.set_filter(filter_str="A|i_tags|cont|test;") + succ_two = "i_tags|cont|" in a.get_filter() + assert succ and succ_two + + @pytest.mark.ado_test def test_tablevaluefilter() -> bool: a = ro.tablevaluefilterREST() @@ -1293,110 +1303,110 @@ def test_tablevaluefilter() -> bool: @pytest.mark.ado_test def test_tablevaluefilter_filter() -> bool: a = ro.tablevaluefilterREST() - a.get_filter() - a.set_filter() + a.get_filter_value() + a.set_filter_value() succ = False try: - a.set_filter(value="a") + a.set_filter_value(value="a") except ValueError as e: succ = "input should be a list" in str(e) succ_two = False try: - a.set_filter(value=[]) + a.set_filter_value(value=[]) except ValueError as e: succ_two = "list input is too short" in str(e) succ_three = False try: - a.set_filter(value=["range", 1]) + a.set_filter_value(value=["range", 1]) except ValueError as e: succ_three = "input should contain 3 elements" in str(e) succ_four = False try: - a.set_filter(value=["range", 1, 2]) + a.set_filter_value(value=["range", 1, 2]) except ValueError as e: succ_four = "all input elements should be strings" in str(e) - a.set_filter(value=["range", "a", "b"]) - succ_five = a.get_filter()[0] == "range" + a.set_filter_value(value=["range", "a", "b"]) + succ_five = a.get_filter_value()[0] == "range" succ_six = False try: - a.set_filter(value=["specific", "a", "b"]) + a.set_filter_value(value=["specific", "a", "b"]) except ValueError as e: succ_six = "input should contain 2 elements" in str(e) succ_seven = False try: - a.set_filter(value=["specific", "a"]) + a.set_filter_value(value=["specific", "a"]) except ValueError as e: succ_seven = "second input should be a list" in str(e) succ_eight = False try: - a.set_filter(value=["specific", [1, 2]]) + a.set_filter_value(value=["specific", [1, 2]]) except ValueError as e: succ_eight = "specific value(s) should be string" in str(e) - a.set_filter(value=["specific", ["a", "b"]]) - succ_nine = a.get_filter()[0] == "specific" + a.set_filter_value(value=["specific", ["a", "b"]]) + succ_nine = a.get_filter_value()[0] == "specific" succ_ten = False try: - a.set_filter(value=["top_percentage", "a", "b"]) + a.set_filter_value(value=["top_percentage", "a", "b"]) except ValueError as e: succ_ten = "first input is not among the acceptable values" in str(e) succ_eleven = False try: - a.set_filter(value=["top_percent", "a", "b"]) + a.set_filter_value(value=["top_percent", "a", "b"]) except ValueError as e: succ_eleven = "input should contain 2 elements" in str(e) succ_twelve = False try: - a.set_filter(value=["top_percent", "a"]) + a.set_filter_value(value=["top_percent", "a"]) except ValueError as e: succ_twelve = "second input should be a float" in str(e) succ_thirteen = False try: - a.set_filter(value=["top_percent", 110]) + a.set_filter_value(value=["top_percent", 110]) except ValueError as e: succ_thirteen = "percentage should be in the (0,100) range" in str(e) - a.set_filter(value=["top_percent", 10]) - succ_fourteen = a.get_filter()[0] == "top_percent" + a.set_filter_value(value=["top_percent", 10]) + succ_fourteen = a.get_filter_value()[0] == "top_percent" succ_fifteen = False try: - a.set_filter(value=["top_count", 10, 10]) + a.set_filter_value(value=["top_count", 10, 10]) except ValueError as e: succ_fifteen = "input should contain 2 elements" in str(e) succ_sixteen = False try: - a.set_filter(value=["top_count", "a"]) + a.set_filter_value(value=["top_count", "a"]) except ValueError as e: succ_sixteen = "second input should be an int" in str(e) - a.set_filter(value=["top_count", 3]) - succ_seventeen = a.get_filter()[0] == "top_count" + a.set_filter_value(value=["top_count", 3]) + succ_seventeen = a.get_filter_value()[0] == "top_count" succ_eighteen = False try: - a.set_filter(value=["bot_percent", 3, 3]) + a.set_filter_value(value=["bot_percent", 3, 3]) except ValueError as e: succ_eighteen = "input should contain 2 elements" in str(e) succ_nineteen = False try: - a.set_filter(value=["bot_percent", "a"]) + a.set_filter_value(value=["bot_percent", "a"]) except ValueError as e: succ_nineteen = "the second input should be a float" in str(e) succ_twenty = False try: - a.set_filter(value=["bot_percent", 110]) + a.set_filter_value(value=["bot_percent", 110]) except ValueError as e: succ_twenty = "percentage should be in the (0,100) range" in str(e) - a.set_filter(value=["bot_percent", 10]) - succ_twentyone = a.get_filter()[0] == "bot_percent" + a.set_filter_value(value=["bot_percent", 10]) + succ_twentyone = a.get_filter_value()[0] == "bot_percent" succ_twentytwo = False try: - a.set_filter(value=["bot_count", 1, 1]) + a.set_filter_value(value=["bot_count", 1, 1]) except ValueError as e: succ_twentytwo = "input should contain 2 elements" in str(e) succ_twentythree = False try: - a.set_filter(value=["bot_count", "a"]) + a.set_filter_value(value=["bot_count", "a"]) except ValueError as e: succ_twentythree = "second input should be an int" in str(e) - a.set_filter(value=["bot_count", 3]) - succ_twentyfour = a.get_filter()[0] == "bot_count" + a.set_filter_value(value=["bot_count", 3]) + succ_twentyfour = a.get_filter_value()[0] == "bot_count" succ_a = succ + succ_two + succ_three + succ_four + succ_five + succ_six succ_b = succ_seven + succ_eight + succ_nine + succ_ten + succ_eleven succ_c = succ_twelve + succ_thirteen + succ_fourteen + succ_fifteen @@ -1410,17 +1420,17 @@ def test_tablevaluefilter_filter() -> bool: def test_tablevaluefilter_filterparams() -> bool: a = ro.tablevaluefilterREST() a.params = '{"filter": "specific"}' - succ_one = a.get_filter() == ["specific", ["*"]] + succ_one = a.get_filter_value() == ["specific", ["*"]] a.params = '{"filter": "range"}' - succ_two = a.get_filter() == ["range", "", ""] + succ_two = a.get_filter_value() == ["range", "", ""] a.params = '{"filter": "top_percent"}' - succ_three = a.get_filter() == ["top_percent", 10.0] + succ_three = a.get_filter_value() == ["top_percent", 10.0] a.params = '{"filter": "top_count"}' - succ_four = a.get_filter() == ["top_count", 10] + succ_four = a.get_filter_value() == ["top_count", 10] a.params = '{"filter": "bot_percent"}' - succ_five = a.get_filter() == ["bot_percent", 10.0] + succ_five = a.get_filter_value() == ["bot_percent", 10.0] a.params = '{"filter": "bot_count"}' - succ_six = a.get_filter() == ["bot_count", 10] + succ_six = a.get_filter_value() == ["bot_count", 10] assert succ_one and succ_two and succ_three and succ_four and succ_five and succ_six From 970ccf08ba1dc212d38f6d10c528a63fe8376983 Mon Sep 17 00:00:00 2001 From: Randy Frank <89219420+randallfrank@users.noreply.github.com> Date: Thu, 28 Dec 2023 13:58:00 -0500 Subject: [PATCH 12/18] Feat/new user template (#82) --- .../core/utils/report_objects.py | 56 +++++++++++++++++++ tests/test_report_objects.py | 11 ++++ 2 files changed, 67 insertions(+) diff --git a/src/ansys/dynamicreporting/core/utils/report_objects.py b/src/ansys/dynamicreporting/core/utils/report_objects.py index cbbd3dae..84f47086 100644 --- a/src/ansys/dynamicreporting/core/utils/report_objects.py +++ b/src/ansys/dynamicreporting/core/utils/report_objects.py @@ -3379,3 +3379,59 @@ def filter_numeric_step(self, value): props = self.get_property() props["filter_numeric_step"] = value self.set_property(props) + + +class userdefinedREST(LayoutREST): + """ + Representation of the User Defined Layout Template. + + This layout inserts a tagged div into the HTML output. This div can be easily found + via Javascript and can host user-supplied HTML content. + """ + + @property + def interactive_only(self) -> int: + """ + "Controls if the template is rendered in 'export' situations (e.g. PDF, PPTX and + offline HTML). + + If non-zero (the default), this template will not be rendered in such + situations. Note: Children are always rendered. + """ + return self.get_property().get("interactive_only") + + @interactive_only.setter + def interactive_only(self, value: int) -> None: + props = self.get_property() + props["interactive_only"] = value + self.set_property(props) + + @property + def before_children(self) -> int: + """ + Controls if the user-defined div is rendered before or after any children. + + If zero (the default), the div comes after the children. + """ + return self.get_property().get("before_children") + + @before_children.setter + def before_children(self, value: int) -> None: + props = self.get_property() + props["before_children"] = value + self.set_property(props) + + @property + def userdef_name(self) -> str: + """ + The value of the adr_userdefined_template attribute on the user-defined div. + + For example:

+ """ + return self.get_property().get("userdef_name") + + @userdef_name.setter + def userdef_name(self, value: str) -> None: + props = self.get_property() + props["userdef_name"] = value + self.set_property(props) diff --git a/tests/test_report_objects.py b/tests/test_report_objects.py index 2710b553..f61fa17c 100755 --- a/tests/test_report_objects.py +++ b/tests/test_report_objects.py @@ -1725,6 +1725,17 @@ def test_datafilter() -> bool: assert a.filter_single_dropdown == "g" +@pytest.mark.ado_test +def test_userdefined() -> bool: + a = ro.userdefinedREST() + a.interactive_only = 1 + assert a.interactive_only == 1 + a.before_children = 1 + assert a.before_children == 1 + a.userdef_name = "Hello" + assert a.userdef_name == "Hello" + + @pytest.mark.ado_test def test_unit_template() -> bool: a = ro.Template() From 6f4295c135f71f2e120cacaf5c3d21291a9a26f1 Mon Sep 17 00:00:00 2001 From: Randy Frank <89219420+randallfrank@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:25:43 -0500 Subject: [PATCH 13/18] Add docs for userdefined layout (#83) --- codegen/all_test_prop.xml | 140 ++++++++++++++++++++- codegen/pyadritem.txt | 2 +- doc/source/lowlevelapi/TemplateObjects.rst | 92 ++++++++++---- 3 files changed, 210 insertions(+), 24 deletions(-) diff --git a/codegen/all_test_prop.xml b/codegen/all_test_prop.xml index 79543b5d..f809849b 100644 --- a/codegen/all_test_prop.xml +++ b/codegen/all_test_prop.xml @@ -1 +1,139 @@ -Animation [0=none,1=controls,2=autoplay,3=controls+autoplay]Maximum video width in pixels[0=as movie (default,1=as image]Table [scientific,sigfigsX,floatdotX,str,date_XY]'format for column labels [scientific,sigfigsX,floatdotX,str,date_XY]''[column A,column B]''format for row labels [scientific,sigfigsX,floatdotX,str,date_XY]''[row 1,row 2]'[table,bar,line,pie]No options[#rrggbb,#rgb,@rowname/number] hexadecimal digits: #8b783f[circle,square,cross,x,triangle,star,diamond,hash,plus,times] -open -dot[Value={{v/x}},Position={{v/y}}]The marker size in pointsThe opacity of the line marker. Default: 1.0Apply a linear transform to marker sizes [M,B] = Mx+B. Example: [1.,0.]Scalar value or name of a row with size of error bars in Y axis units. May be a list.[none,solid,dot,dash,longdash,dashdot,longdashdot]The line width in pixels1=stack the bar chartsThe row number(s)/name(s) to use as the X axis values. Example: [2,Distance]The row number(s)/name(s) to use as the Y axis values. Example: [0,Pressure]The name of the color palette to use with line_color row data. '-'=invert. Example: HotPosition the colorbar center relative to plot bounds (0,1). Example (on left): [-0.2,0.5]Minimum and maximum line_color values, mapped to palette extremes. Example: [0,100]Show/hide the colorbar with the values 1/0. Example: 1String draw to the right of the colorbar as a title. Default: noneChart width in pixelsChart height in pixelsSet to 0 to hide the legend. Default: 1Position the legend relative to plot bounds (0,1). Example (on right): [1.2,0.5]Set to 1 to display a border around the legend. Default: 0Set to 1 to show the plot border. Default: 0Adjust plot margin sizes in pixels: [left,top,right,bottom] Example: [default, default, 5, default]The title of the plot[linear,log][linear,log]The range for the x axis. Example: [0., 10.]The range for the y axis. Example: [0., 10.]Format for the x axis tick labels. Example: floatdot2Format for the y axis tick labels. Example: floatdot2A title for the x axisA title for the y axisleft, center or right. By default, there will be no justification.The string to be displayed for a NaN value. Default: NaNAllow column sorting from headers: [none, all, data] Default: allThe title of the table'Alignment of data values in each column [left,right,center,justify]''Visibility of table value search field. Default: 0''Number of rows visible per page. Default: 0 (all)''Options for the number of rows per page menu. Default: [10, 25, 50, 100, -1]''Control visibility of horizontal scrollbar. Default: 1''Control visibility and height of vertical scrollbar. Height in points Default: 0''Control visibility of table borders. Default: 1''Control compactness of table. Default: 0''Control wrapping of content to the next line inside a table cell. Default: 0''Enable/disable default column labels. Default: 1''Specify conditional formatting rules for table cell formatting.'Image Image height in pixels[1=open in current page,2=open in new tab,3=image item details]Image width in pixelsScene 3D rendering panel height in pixels3D rendering panel width in pixelsSlider Image height in pixelsImage width in pixels[1=open in current page,2=open in new tab,3=image item details]String (macro displayed under imageA list of the initial values for each sliderNone=hide nodes, 1=show nodes, list. Example: [none, 1]1=Show value column 0=Hide value column. Default: 1Slider caption justification: center, left, right, justify. Default is leftA list of the caption strings (macros for each sliderWidth of the slider caption column in percent. Default is 30. 0 removes the column. 1=Show image controls like pan, zoom, etc. when image comparison is enabled. 0=Hide image controls. Default: 01=Show copy of image with sliders for comparison. 0=Disable comparison. Default: 01=Enable deep image display. 0=Disable deep image display. Note: image_comparison must also be enabled. Default: 01=Enable RGB differences. 0=Disable. Note: image_comparison must also be enabled. Default: 0A list of tag values that should be used for the common sliders when image comparison is enabled. Example: [timestep, variable]Width of the common slider caption column in percent. Default is 20. 0 removes the column.Common slider caption justification: center, left, right, justify. Default is leftA list of initial values for each slider, for each section in an image comparison layout. Eg: [[3.8,PRESSURE_Relative],[1.4,PRESSURE_Relative]]List of initial values to define the palette preset which is applied after the image has loaded. One list for each section in a deep image comparison layout. Must be of the form: [[max,min,palette,invert,hide,bg],[..section 2 here..]]. 'max' and 'min' must be numbers (float/int). 'palette' name must match exactly. 'invert' and 'hide' must be true or false. 'bg' must be any value between 0 and 1. Eg: [[30,-30,autumn,false,true,0.4],[50,-50,autumn,false,true,0.7]]List of initial values to use as presets for the variable dropdown in each section of a deep image comparison layout. Variable names must match exactly and are case sensitive. Eg: [PRESSURE_Relative,PRESSURE_Relative]List of initial values to use as presets for the view dropdown in each section of a deep image comparison layout. Allowed values are 'this', 'this-other', 'other-this', 'abs'. For example, for the left image, these would correspond to 'Left', 'Left-Right image', 'Right-Left image', 'Abs(Right-Left image)' respectively. Names must match exactly and are case sensitive. Eg: [this-other,this]Select a tag to manipulate via X axis click and dragNumber of cycles through the tag images for a image width drag. Default: 1.0Clamp the images to the min/max instead of wrapping during a drag. Default: 0Select a tag to manipulate via Y axis click and dragNumber of cycles through the tag images for a image height drag. Default: 1.0Clamp the images to the min/max instead of wrapping during a drag. Default: 0String String justification: center, left, right, justify. Default is centerTree left, center or right. By default, there will be no justification.True/False display values: True#False[date_XY][scientific,sigfigsX,floatdotX]Display of GUID referenced items: [link,inline]Tree node expansion: [expanded,collapsed]'Control visibility of tree borders. Default: 1''Control compactness of tree. Default: 0'Set to 1 to enable global tree toggling. Default: 0'Specify conditional formatting rules for tree value formatting.'Table of Contents Flag TOC items: 0=none, 1=this layout, 2=data itemsSet the inset level for TOC Items. Default: 0Flag figures: 0=none, 1=this layout, 2=data itemsFlag tables: 0=none, 1=this layout, 2=data itemsSet the name for the item, figure, table. Default: layout or item nameTemplates Applies to justification of all items in a report. Can be left, center or right. By default, there will be no justification.Set to 1 to render the item as a link. Default: 0Set to 1 to enable toggling. Default: 01 sets hint not to pagebreak in the template. Default: 0Size of the left margin in points. Default: -1=layout defaultSize of the right margin in points. Default: -1=layout defaultSize of the top margin in points. Default: -1=layout defaultSize of the bottom margin in points. Default: -1=layout defaultIf 1, start the template with a line break. Set to zero to remove the line. Default: 1If set to 1 and there are fewer items than the number of columns, reduce the number of columns to match the item count. Default: 0 0=display as tabs (default), 1=display tab content inline1=link, replace page, 2=link, new page, 3=button, inline (default), 4=button, inline w/imageThe default is the name of the target reportThe name of the input pptx file item or a filter query to find the item.The name to save the output pptx file as.Option to use all slides from the input pptx. Can be 1 or 0. Default is 0.The positional index of the slide in the input pptx to use as source in the output pptx.Debugging Set to 1 to embed item property and context information with each data item.Set to 1 to embed timing information for each template: search, sort, total time. \ No newline at end of file + + Animation [0=none,1=controls,2=autoplay,3=controls+autoplay] + Maximum video width in pixels + [0=as movie (default,1=as image] + + Table [scientific,sigfigsX,floatdotX,str,date_XY] + 'format for column labels [scientific,sigfigsX,floatdotX,str,date_XY]' + '[column A,column B]' + 'format for row labels [scientific,sigfigsX,floatdotX,str,date_XY]' + '[row 1,row 2]' + [table,bar,line,pie,heatmap,parallel,sankey] + No options + [#rrggbb,#rgb,@rowname/number] hexadecimal digits: #8b783f + [circle,square,cross,x,triangle,star,diamond,hash,plus,times] -open -dot + [Value={{v/x}},Position={{v/y}}] + The marker size in points + The opacity of the line marker. Default: 1.0 + Apply a linear transform to marker sizes [M,B] = Mx+B. Example: [1.,0.] + Scalar value or name of a row with size of error bars in Y axis units. May be a list. + [none,solid,dot,dash,longdash,dashdot,longdashdot] + The line width in pixels + 1=stack the bar charts + The row number(s)/name(s) to use as the X axis values. Example: [2,Distance] + The row number(s)/name(s) to use as the Y axis values. Example: [0,Pressure] + The name of the color palette to use with line_color row data. '-'=invert. Example: Hot + Position the colorbar center relative to plot bounds (0,1). Example (on left): [-0.2,0.5] + Minimum and maximum line_color values, mapped to palette extremes. Example: [0,100] + Show/hide the colorbar with the values 1/0. Example: 1 + String draw to the right of the colorbar as a title. Default: none + Chart width in pixels + Chart height in pixels + Set to 0 to hide the legend. Default: 1 + Position the legend relative to plot bounds (0,1). Example (on right): [1.2,0.5] + Set to 1 to display a border around the legend. Default: 0 + Set to 1 to show the plot border. Default: 0 + Adjust plot margin sizes in pixels: [left,top,right,bottom] Example: [default, default, 5, default] + The title of the plot + [linear,log] + [linear,log] + The range for the x axis. Example: [0., 10.] + The range for the y axis. Example: [0., 10.] + Format for the x axis tick labels. Example: floatdot2 + Format for the y axis tick labels. Example: floatdot2 + A title for the x axis + A title for the y axis + left, center or right. By default, there will be no justification. + The string to be displayed for a NaN value. Default: NaN + Allow column sorting from headers: [none, all, data] Default: all + The title of the table + 'Alignment of data values in each column [left,right,center,justify]' + 'Visibility of table value search field. Default: 0' + 'Number of rows visible per page. Default: 0 (all)' + 'Options for the number of rows per page menu. Default: [10, 25, 50, 100, -1]' + 'Control visibility of horizontal scrollbar. Default: 1' + 'Control visibility and height of vertical scrollbar. Height in points Default: 0' + 'Control visibility of table borders. Default: 1' + 'Control compactness of table. Default: 0' + 'Control wrapping of content to the next line inside a table cell. Default: 0' + 'Enable/disable default column labels. Default: 1' + 'Specify conditional formatting rules for table cell formatting.' + 'Scalar value or array of values used as column (category) minimum(s).' + 'Scalar value or array of values used as column (category) maximum(s).' + + Image Image height in pixels + [1=open in current page,2=open in new tab,3=image item details] + Image width in pixels + + Scene 3D rendering panel height in pixels + 3D rendering panel width in pixels + + Slider Image height in pixels + Image width in pixels + [1=open in current page,2=open in new tab,3=image item details] + String (macro displayed under image + A list of the initial values for each slider + None=hide nodes, 1=show nodes, list. Example: [none, 1] + 1=Show value column 0=Hide value column. Default: 1 + Slider caption justification: center, left, right, justify. Default is left + A list of the caption strings (macros for each slider + Width of the slider caption column in percent. Default is 30. 0 removes the column. + 1=Show image controls like pan, zoom, etc. when image comparison is enabled. 0=Hide image controls. Default: 0 + 1=Show copy of image with sliders for comparison. 0=Disable comparison. Default: 0 + 1=Enable deep image display. 0=Disable deep image display. Note: image_comparison must also be enabled. Default: 0 + 1=Enable RGB differences. 0=Disable. Note: image_comparison must also be enabled. Default: 0 + A list of tag values that should be used for the common sliders when image comparison is enabled. Example: [timestep, variable] + Width of the common slider caption column in percent. Default is 20. 0 removes the column. + Common slider caption justification: center, left, right, justify. Default is left + A list of initial values for each slider, for each section in an image comparison layout. Eg: [[3.8,PRESSURE_Relative],[1.4,PRESSURE_Relative]] + List of initial values to define the palette preset which is applied after the image has loaded. One list for each section in a deep image comparison layout. Must be of the form: [[max,min,palette,invert,hide,bg],[..section 2 here..]]. 'max' and 'min' must be numbers (float/int). 'palette' name must match exactly. 'invert' and 'hide' must be true or false. 'bg' must be any value between 0 and 1. Eg: [[30,-30,autumn,false,true,0.4],[50,-50,autumn,false,true,0.7]] + List of initial values to use as presets for the variable dropdown in each section of a deep image comparison layout. Variable names must match exactly and are case sensitive. Eg: [PRESSURE_Relative,PRESSURE_Relative] + List of initial values to use as presets for the view dropdown in each section of a deep image comparison layout. Allowed values are 'this', 'this-other', 'other-this', 'abs'. For example, for the left image, these would correspond to 'Left', 'Left-Right image', 'Right-Left image', 'Abs(Right-Left image)' respectively. Names must match exactly and are case sensitive. Eg: [this-other,this] + Select a tag to manipulate via X axis click and drag + Number of cycles through the tag images for a image width drag. Default: 1.0 + Clamp the images to the min/max instead of wrapping during a drag. Default: 0 + Select a tag to manipulate via Y axis click and drag + Number of cycles through the tag images for a image height drag. Default: 1.0 + Clamp the images to the min/max instead of wrapping during a drag. Default: 0 + + String String justification: center, left, right, justify. Default is center + + Tree left, center or right. By default, there will be no justification. + True/False display values: True#False + [date_XY] + [scientific,sigfigsX,floatdotX] + Display of GUID referenced items: [link,inline] + Tree node expansion: [expanded,collapsed] + 'Control visibility of tree borders. Default: 1' + 'Control compactness of tree. Default: 0' + Set to 1 to enable global tree toggling. Default: 0 + 'Specify conditional formatting rules for tree value formatting.' + + Table of Contents Flag TOC items: 0=none, 1=this layout, 2=data items + Set the inset level for TOC Items. Default: 0 + Flag figures: 0=none, 1=this layout, 2=data items + Flag tables: 0=none, 1=this layout, 2=data items + Set the name for the item, figure, table. Default: layout or item name + + Templates Applies to justification of all items in a report. Can be left, center or right. By default, there will be no justification. + Set to 1 to render the item as a link. Default: 0 + Set to 1 to enable toggling. Default: 0 + 1 sets hint not to pagebreak in the template. Default: 0 + Size of the left margin in points. Default: -1=layout default + Size of the right margin in points. Default: -1=layout default + Size of the top margin in points. Default: -1=layout default + Size of the bottom margin in points. Default: -1=layout default + If 1, start the template with a line break. Set to zero to remove the line. Default: 1 + If set to 1 and there are fewer items than the number of columns, reduce the number of columns to match the item count. Default: 0 + 0=display as tabs (default), 1=display tab content inline + 1=link, replace page, 2=link, new page, 3=button, inline (default), 4=button, inline w/image + The default is the name of the target report + The name of the input pptx file item or a filter query to find the item. + The name to save the output pptx file as. + Option to use all slides from the input pptx. Can be 1 or 0. Default is 0. + The positional index of the slide in the input pptx to use as source in the output pptx. + + Debugging Set to 1 to embed item property and context information with each data item. + Set to 1 to embed timing information for each template: search, sort, total time. + + \ No newline at end of file diff --git a/codegen/pyadritem.txt b/codegen/pyadritem.txt index 890bf488..a7acd0c9 100644 --- a/codegen/pyadritem.txt +++ b/codegen/pyadritem.txt @@ -95,7 +95,7 @@ class Item: self.item_image = None """Image object (Image and PNG binary files)""" self.item_scene = None - """3D scene (AVZ, PLY, SCDOC, and STL files)""" + """3D scene (AVZ, PLY, SCDOC, GLB, and STL files)""" # Attributes for the table items self.table_attr = table_attr self.item_table = None diff --git a/doc/source/lowlevelapi/TemplateObjects.rst b/doc/source/lowlevelapi/TemplateObjects.rst index b74d3db1..58bb264c 100755 --- a/doc/source/lowlevelapi/TemplateObjects.rst +++ b/doc/source/lowlevelapi/TemplateObjects.rst @@ -3,28 +3,29 @@ Template Objects ================ -.. _here: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?LayoutTemplates.html -.. _link: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?QueryExpressions.html -.. _Columns: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Columns.html -.. _Panel: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Panel.html -.. _Boxes: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Boxes.html -.. _Tabs: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Tabs.html -.. _Carousel: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Carousel.html -.. _Slider: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Slider.html -.. _Page Footer: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?PageFooter.html -.. _Page Header: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?PageHeader.html -.. _Iterator: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?Iterator.html -.. _Tag to Properties: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TagProperties.html -.. _Table of Contents: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableofContents.html -.. _Link Report: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?LinkReport.html -.. _Table Merge: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableMerge.html -.. _Table Reduction: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableReduction.html -.. _Table Row/Column Filter: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableRowColumnFilter.html -.. _Table Value Filter: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableValueFilter.html -.. _Table Row/Column Sort: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TableRowColumnSort.html -.. _SQL Query: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?SQLQuery.html -.. _Tree Merge: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?TreeMerge.html -.. _Generator templates: https://nexusdemo.ensight.com/docs/en/html/Nexus.html?GeneratorTemplates.html +.. _here: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/LayoutTemplates.html +.. _link: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/QueryExpressions.html +.. _Columns: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Columns.html +.. _Panel: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Panel.html +.. _Boxes: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Boxes.html +.. _Tabs: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Tabs.html +.. _Carousel: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Carousel.html +.. _Slider: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Slider.html +.. _Page Footer: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/PageFooter.html +.. _Page Header: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/PageHeader.html +.. _Iterator: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Iterator.html +.. _Tag to Properties: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TagProperties.html +.. _Table of Contents: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TableofContents.html +.. _Link Report: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/LinkedReport.html +.. _Table Merge: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TableMerge.html +.. _Table Reduction: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TableReduction.html +.. _Table Row/Column Filter: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TableRowColumnFilter.html +.. _Table Value Filter: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TableValueFilter.html +.. _Table Row/Column Sort: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TableRowColumnSort.html +.. _SQL Query: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/SQLQuery.html +.. _Tree Merge: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/TreeMerge.html +.. _Userdefined: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/Userdefined.html +.. _Generator templates: https://s3.amazonaws.com/www3.ensight.com/nexus_docs/nexus_sphinx/is/GeneratorTemplates.html @@ -296,6 +297,9 @@ toc `Table of Contents`_ :ref:`report_objects.tocRE reportlink `Link Report`_ :ref:`report_objects.reportlinkREST() ` + +userdefined `Userdefined`_ :ref:`report_objects.userdefinedREST() + ` ======================= ============================= ======================================== ======================= ============================= ======================================== @@ -824,6 +828,50 @@ None Set the guid of the linked report. It takes as input a valid guid. If you want to set to link to no report, set the input to None +.. _userdefinedREST: + +userdefinedREST object +^^^^^^^^^^^^^^^^^^^^^^ + +Inherits from TemplateREST, LayoutREST + +Class that corresponds to the `Userdefined`_ Layout +template type. This template inserts a named div into the HTML output. +This div can be filled with any HTML the user would like. By default, +the HTML content will be filled in with the ``TemplateREST.set_html()`` +content (if any). This content may be placed before or after any +child item/layout content. + +Specific properties include: + +**template.interactive_only: int** + +If this property is set to a non-zero value (the default), then the +div will not be included when ADR is outputting PDF, PowerPoint or +Offline HTML. If set to zero, it will be included in PDF and Offline +HTML output. + +**template.before_children: int** + +If this property is set to zero (the default), then any child content +is placed in the report before the div. If set to a non-zero value, the +children will be placed in the report after the div. + +**template.userdef_name: str** + +This property is used to specify the value of the div ``adr_userdefined_template`` +attribute. The default value is ``unspecified``. + +For example, if this property is set to ``"Hello"`` and the HTML is set +to ``

Example

`` the generated div will look like this: + +.. code-block:: html + +
+

Example

+
+ + .. _tablemergeREST: tablemergeREST object From 65599eaf6069740aa1145ebe5eef0ba43e3fe64d Mon Sep 17 00:00:00 2001 From: Marina Galvagni <96880748+margalva@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:09:47 -0500 Subject: [PATCH 14/18] Doc/add plot types (#84) --- doc/source/_static/bar_plot.png | Bin 0 -> 9105 bytes doc/source/_static/heatmap.png | Bin 0 -> 9047 bytes doc/source/_static/line_plot.png | Bin 0 -> 21115 bytes doc/source/_static/parallel_coord.png | Bin 0 -> 28445 bytes doc/source/_static/pie_plot.png | Bin 0 -> 13051 bytes doc/source/_static/sankey.png | Bin 0 -> 6081 bytes doc/source/_static/simpletable.png | Bin 0 -> 8025 bytes .../examples_source/00-basic/02-plottype.py | 218 ++++++++++++++++++ 8 files changed, 218 insertions(+) create mode 100755 doc/source/_static/bar_plot.png create mode 100755 doc/source/_static/heatmap.png create mode 100755 doc/source/_static/line_plot.png create mode 100755 doc/source/_static/parallel_coord.png create mode 100755 doc/source/_static/pie_plot.png create mode 100755 doc/source/_static/sankey.png create mode 100755 doc/source/_static/simpletable.png create mode 100755 doc/source/examples_source/00-basic/02-plottype.py diff --git a/doc/source/_static/bar_plot.png b/doc/source/_static/bar_plot.png new file mode 100755 index 0000000000000000000000000000000000000000..418ea0327e030523832b4aafd50a3ce155059381 GIT binary patch literal 9105 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 literal 0 HcmV?d00001 diff --git a/doc/source/_static/heatmap.png b/doc/source/_static/heatmap.png new file mode 100755 index 0000000000000000000000000000000000000000..0bcb6561afc6a9e4cb537d722f0bf1392cfaf6ec GIT binary patch literal 9047 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

*tM9}&h5OP+4CSL&SbsYOyR2DR)Nstaj2iYB@ zy{E$cDwPcVMw}2n?tw8Wkb9hf%RBX|uUO9b3xDXs^Wwctz6!=7cAwkK%r+?Z;;mEq zIy-~I{X5C$Te6NX+Nb4ypJ<7E-tXO0+pltTmg7S_D*8hke4ldSQ8z^(Y4_}mnstNs zXup&c@Zw2vdbVlz@6$y)%VXK2E`U!h3H04LLFFtJ7^1AE!2T{%gd29Bujb0zR0tIPjWL5(4RF(35*niA!Us zpSB~o30mKf06!Ym--bi+ZHIaztV;+aulY2$%C>VFdYsjbli|w5hc))QTI?)GXN(p4 zYA1L){mwp|?0+fBYuaT>4EjCxQR?j=d)Me!1Y=8xS5(CD?9-V|hhO@`+J7vr@vn+V zNgd-jgwNSe%{sh)c@NxYaN6ydx+J7^-E*kzy*Mffhn#BZsD7c=RKO1QQZO#yp!EjV zR#dZcbUJ=U`Q7Ool6HAA$j{9zg208W53CN{MX} zNB)!sNhG9S%1|u{@D%Y@NFvQBlOHMrvgao~3WP-rjFbuDW=WO%+dzVaqM~@NU!wy> z*V#7>UyEI`v{t^L%1*gpw=d4V9dnpZ1zO#CSwPgM3)9>U7(AFzZm#yTQ2jn{VQ<&!mwq&tuo+I@LC&_^oW5g5HttB$!E!UcDcCc zBT)A;JnI!=ZF1m^)CG=DUA5DnU$Be2yuFsdY|!)~J~5(2*er+xt4a2&zehYuwSLsh zZ%c=(v_;>-39esJTYa~S*9bt7*yDZIz)Mhsi1J?tIMC~6b7y-`+-p&r(a;n}`Q$_) zXhi}7`QGlBfr@8sj28>uXfCK^KBk-jmkpJs_Z_wcj YOvGM+dSqnDN7Qq2j}#x4N*f3L4{W}%nE(I) literal 0 HcmV?d00001 diff --git a/doc/source/_static/pie_plot.png b/doc/source/_static/pie_plot.png new file mode 100755 index 0000000000000000000000000000000000000000..167b71d47329a54a872adfd687f5778d3af16039 GIT binary patch literal 13051 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 literal 0 HcmV?d00001 diff --git a/doc/source/_static/sankey.png b/doc/source/_static/sankey.png new file mode 100755 index 0000000000000000000000000000000000000000..54809ab90c4dc7aabef84bf8f23d2dee300a77dd GIT binary patch literal 6081 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 Date: Wed, 3 Jan 2024 17:28:17 -0500 Subject: [PATCH 15/18] in the delete method, add support for deleting Report objects (#85) --- src/ansys/dynamicreporting/core/adr_report.py | 2 +- src/ansys/dynamicreporting/core/adr_service.py | 15 ++++++++++++--- tests/test_service.py | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/ansys/dynamicreporting/core/adr_report.py b/src/ansys/dynamicreporting/core/adr_report.py index 3fd1a9ab..f064486e 100644 --- a/src/ansys/dynamicreporting/core/adr_report.py +++ b/src/ansys/dynamicreporting/core/adr_report.py @@ -239,7 +239,7 @@ def export_pdf( if self.service.serverobj is None: # pragma: no cover self.service.logger.error("No connection to any server") return "" - try: + try: # pragma: no cover if query is None: query = {} self.service.serverobj.export_report_as_pdf( diff --git a/src/ansys/dynamicreporting/core/adr_service.py b/src/ansys/dynamicreporting/core/adr_service.py index 558a1e58..4688e1c1 100755 --- a/src/ansys/dynamicreporting/core/adr_service.py +++ b/src/ansys/dynamicreporting/core/adr_service.py @@ -793,10 +793,11 @@ def delete(self, items: list) -> None: ---------- items : list List of objects to delete. The objects can be of one of these types: - ``"Item"``, ``"Session"``, or ``Dataset``. + ``"Item"``, ``Report``, ``"Session"`` or ``Dataset``. .. note:: Deleting a session or a dataset also deletes all items - associated with the session or dataset. + associated with the session or dataset. Deleting a Report also + deletes all its children. Examples -------- @@ -807,13 +808,21 @@ def delete(self, items: list) -> None: adr_service.connect(url='http://localhost:8020') all_items = adr_service.query(type='Item') adr_service.delete(all_items) + my_report = adr_service.get_report(report_name='My Report') + adr_service.delete([my_report]) """ if type(items) is not list: self.logger.error("Error: passed argument is not a list") raise TypeError items_to_delete = [x.item for x in items if type(x) is Item] + reports_to_delete = [x for x in items if type(x) is Report] + if reports_to_delete: + self.logger.warning( + "Warning: Report deletion will result in deletion of " "all its children templates" + ) + items_to_delete.extend([x.report for x in reports_to_delete]) # Check the input - not_items = [x for x in items if type(x) is not Item] + not_items = [x for x in items if (type(x) is not Item) and (type(x) is not Report)] if not_items: # pragma: no cover session = [x for x in not_items if type(x) is report_objects.SessionREST] if session: diff --git a/tests/test_service.py b/tests/test_service.py index 37a34cd3..d9dd2f83 100755 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -286,6 +286,23 @@ def test_delete_item(adr_service_query) -> bool: assert len(newly_items) == 0 +@pytest.mark.ado_test +def test_delete_report(adr_service_query) -> bool: + server = adr_service_query.serverobj + old_reports = adr_service_query.get_list_reports() + test_report_name = "To Delete" + top_report = server.create_template( + name=test_report_name, parent=None, report_type="Layout:panel" + ) + top_report.params = '{"HTML": "Hello!!"}' + server.put_objects(top_report) + test_report = adr_service_query.get_report(test_report_name) + adr_service_query.delete([test_report]) + new_reports = adr_service_query.get_list_reports() + adr_service_query.stop() + assert len(old_reports) == len(new_reports) + + def test_vis_report(adr_service_query) -> bool: success = False try: From 3134fd30fab92674ca679c857a22c488189cb53b Mon Sep 17 00:00:00 2001 From: Randy Frank <89219420+randallfrank@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:49:12 -0500 Subject: [PATCH 16/18] Ensure that three.js is downloaded for offline HTML (#87) --- .../core/utils/report_download_html.py | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/src/ansys/dynamicreporting/core/utils/report_download_html.py b/src/ansys/dynamicreporting/core/utils/report_download_html.py index 1d0d3d21..f0ca8a27 100644 --- a/src/ansys/dynamicreporting/core/utils/report_download_html.py +++ b/src/ansys/dynamicreporting/core/utils/report_download_html.py @@ -154,7 +154,7 @@ def _download_special_files(self): # Additional files to be mapped to the media directory images = ["menu_20_gray.png", "menu_20_white.png", "nexus_front_page.png", "nexus_logo.png"] - self._download_static_files(images, "/static/website/images/", "media", "image") + self._download_static_files(images, "/static/website/images/", "media", "nexus images") # The old Ansys Nexus WebGL viewer images = [ @@ -169,7 +169,7 @@ def _download_special_files(self): "open.png", "Point.cur", ] - self._download_static_files(images, "/static/website/images/", "media", "viewer image") + self._download_static_files(images, "/static/website/images/", "media", "viewer images I") # The new Ansys Nexus WebGL viewer images = [ @@ -187,14 +187,16 @@ def _download_special_files(self): "play.png", ] self._download_static_files( - images, "/ansys/nexus/images/", "ansys/nexus/images/", "viewer image" + images, "/ansys/nexus/images/", "ansys/nexus/images/", "viewer images II" ) images = ["js-inflate.js", "js-unzip.js", "jquery.min.js"] self._download_static_files( - images, "/ansys/nexus/utils/", "ansys/nexus/utils/", "viewer image" + images, "/ansys/nexus/utils/", "ansys/nexus/utils/", "viewer javascript support" ) images = ["ANSYSViewer_min.js", "viewer-loader.js"] - self._download_static_files(images, "/ansys/nexus/", "ansys/nexus/", "viewer image") + self._download_static_files( + images, "/ansys/nexus/", "ansys/nexus/", "ansys-nexus-viewer js" + ) images = [ "jquery.contextMenu.min.css", "jquery.contextMenu.min.js", @@ -204,7 +206,37 @@ def _download_special_files(self): images, "/ansys/nexus/novnc/vendor/jQuery-contextMenu/", "ansys/nexus/novnc/vendor/jQuery-contextMenu", - "viewer image", + "ansys-nexus-viewer vnc js", + ) + + image = [ + "ArcballControls.js", + "DRACOLoader.js", + "GLTFLoader.js", + "OrbitControls.js", + "three.js", + ] + self._download_static_files( + image, "/ansys/nexus/threejs/", "ansys/nexus/threejs", "threejs core" + ) + + image = [ + "draco_decoder.js", + "draco_decoder.wasm", + "draco_encoder.js", + "draco_wasm_wrapper.js", + ] + self._download_static_files( + image, + "/ansys/nexus/threejs/libs/draco/", + "ansys/nexus/threejs/libs/draco", + "threejs draco", + ) + self._download_static_files( + image, + "/ansys/nexus/threejs/libs/draco/gltf/", + "ansys/nexus/threejs/libs/draco/gltf", + "threejs draco gltf", ) # Fonts @@ -215,7 +247,7 @@ def _download_special_files(self): "fa-solid-900.woff", "fa-solid-900.woff2", ] - self._download_static_files(fonts, "/static/website/webfonts/", "webfonts", "font") + self._download_static_files(fonts, "/static/website/webfonts/", "webfonts", "fonts") @staticmethod def _fix_viewer_component_paths(filename, data): @@ -422,6 +454,7 @@ def _download(self): self._make_dir([self._directory, "webfonts"]) self._make_dir([self._directory, "ansys", "nexus", "images"]) self._make_dir([self._directory, "ansys", "nexus", "utils"]) + self._make_dir([self._directory, "ansys", "nexus", "threejs", "libs", "draco", "gltf"]) self._make_dir([self._directory, "ansys", "nexus", "novnc", "vendor", "jQuery-contextMenu"]) # get the webpage html source From 509228a7c305f5f186e72edc9da2267bb27979b4 Mon Sep 17 00:00:00 2001 From: Mario Ostieri <107915956+mariostieriansys@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:07:01 +0000 Subject: [PATCH 17/18] Mostieri/nexus ansys versioning (#86) --- src/ansys/dynamicreporting/core/adr_report.py | 1 + .../dynamicreporting/core/adr_service.py | 9 +- .../core/utils/report_download_html.py | 110 +++++++++++++----- .../core/utils/report_remote_server.py | 27 ++++- 4 files changed, 114 insertions(+), 33 deletions(-) diff --git a/src/ansys/dynamicreporting/core/adr_report.py b/src/ansys/dynamicreporting/core/adr_report.py index f064486e..f2c0e032 100644 --- a/src/ansys/dynamicreporting/core/adr_report.py +++ b/src/ansys/dynamicreporting/core/adr_report.py @@ -310,6 +310,7 @@ def export_html( query=query, filename=filename, no_inline_files=no_inline_files, + ansys_version=self.service._ansys_version, ) success = True except Exception as e: # pragma: no cover diff --git a/src/ansys/dynamicreporting/core/adr_service.py b/src/ansys/dynamicreporting/core/adr_service.py index 4688e1c1..67875aef 100755 --- a/src/ansys/dynamicreporting/core/adr_service.py +++ b/src/ansys/dynamicreporting/core/adr_service.py @@ -310,7 +310,9 @@ def connect( if self._url is not None: # pragma: no cover self.logger.warning("Already connected to a dynamic reporting service.\n") return - self.serverobj = report_remote_server.Server(url=url, username=username, password=password) + self.serverobj = report_remote_server.Server( + url=url, username=username, password=password, ansys_version=self._ansys_version + ) try: self.serverobj.validate() except Exception: @@ -471,7 +473,10 @@ def start( self.logger.error(f"Service started on port {self._port}") raise StartingServiceError self.serverobj = report_remote_server.Server( - url=f"http://127.0.0.1:{self._port}", username=username, password=password + url=f"http://127.0.0.1:{self._port}", + username=username, + password=password, + ansys_version=self._ansys_version, ) else: # pragma: no cover diff --git a/src/ansys/dynamicreporting/core/utils/report_download_html.py b/src/ansys/dynamicreporting/core/utils/report_download_html.py index f0ca8a27..9b6bdca3 100644 --- a/src/ansys/dynamicreporting/core/utils/report_download_html.py +++ b/src/ansys/dynamicreporting/core/utils/report_download_html.py @@ -1,6 +1,9 @@ import base64 import os import os.path +import pathlib +import platform +import re from typing import Optional import urllib.parse @@ -8,11 +11,18 @@ # TODO: # Improve MathJax download +ANSYS_VERSION_FALLBACK = "242" class ReportDownloadHTML: def __init__( - self, url=None, directory=None, debug=False, filename="index.html", no_inline_files=False + self, + url=None, + directory=None, + debug=False, + filename="index.html", + no_inline_files=False, + ansys_version=None, ): # Make sure that the print query has been specified. Set it to html if not set if url: @@ -25,7 +35,11 @@ def __init__( query = "print=html" parsed._replace(query=query) url = urllib.parse.urlunparse(parsed) - + self._ansys_version = str(ANSYS_VERSION_FALLBACK) + if ansys_version: + self._ansys_version = str(ansys_version) + if int(self._ansys_version) < 242: + self._ansys_version = "" self._url = url self._directory = directory self._filename = filename @@ -73,7 +87,7 @@ def _replace_files(self, text: str, inline: bool = False, size_check: bool = Fal current = 0 while True: try: - idx1 = text.index("/static/ansys/", current) + idx1 = text.index(f"/static/ansys{self._ansys_version}/", current) except ValueError: try: idx1 = text.index("/static/", current) @@ -82,7 +96,7 @@ def _replace_files(self, text: str, inline: bool = False, size_check: bool = Fal idx1 = text.index("/media/", current) except ValueError: try: - idx1 = text.index("/ansys/", current) + idx1 = text.index(f"/ansys{self._ansys_version}/", current) except ValueError: return text quote = text[idx1 - 1] @@ -187,15 +201,24 @@ def _download_special_files(self): "play.png", ] self._download_static_files( - images, "/ansys/nexus/images/", "ansys/nexus/images/", "viewer images II" + images, + f"/ansys{self._ansys_version}/nexus/images/", + f"ansys{self._ansys_version}/nexus/images/", + "viewer images II", ) images = ["js-inflate.js", "js-unzip.js", "jquery.min.js"] self._download_static_files( - images, "/ansys/nexus/utils/", "ansys/nexus/utils/", "viewer javascript support" + images, + f"/ansys{self._ansys_version}/nexus/utils/", + f"ansys{self._ansys_version}/nexus/utils/", + "viewer javascript support", ) images = ["ANSYSViewer_min.js", "viewer-loader.js"] self._download_static_files( - images, "/ansys/nexus/", "ansys/nexus/", "ansys-nexus-viewer js" + images, + f"/ansys{self._ansys_version}/nexus/", + f"ansys{self._ansys_version}/nexus/", + "ansys-nexus-viewer js", ) images = [ "jquery.contextMenu.min.css", @@ -204,8 +227,8 @@ def _download_special_files(self): ] self._download_static_files( images, - "/ansys/nexus/novnc/vendor/jQuery-contextMenu/", - "ansys/nexus/novnc/vendor/jQuery-contextMenu", + f"/ansys{self._ansys_version}/nexus/novnc/vendor/jQuery-contextMenu/", + f"ansys{self._ansys_version}/nexus/novnc/vendor/jQuery-contextMenu", "ansys-nexus-viewer vnc js", ) @@ -217,7 +240,10 @@ def _download_special_files(self): "three.js", ] self._download_static_files( - image, "/ansys/nexus/threejs/", "ansys/nexus/threejs", "threejs core" + image, + f"/ansys{self._ansys_version}/nexus/threejs/", + f"ansys{self._ansys_version}/nexus/threejs", + "threejs core", ) image = [ @@ -228,14 +254,14 @@ def _download_special_files(self): ] self._download_static_files( image, - "/ansys/nexus/threejs/libs/draco/", - "ansys/nexus/threejs/libs/draco", + f"/ansys{self._ansys_version}/nexus/threejs/libs/draco/", + f"ansys{self._ansys_version}/nexus/threejs/libs/draco", "threejs draco", ) self._download_static_files( image, - "/ansys/nexus/threejs/libs/draco/gltf/", - "ansys/nexus/threejs/libs/draco/gltf", + f"/ansys{self._ansys_version}/nexus/threejs/libs/draco/gltf/", + f"ansys{self._ansys_version}/nexus/threejs/libs/draco/gltf", "threejs draco gltf", ) @@ -250,7 +276,7 @@ def _download_special_files(self): self._download_static_files(fonts, "/static/website/webfonts/", "webfonts", "fonts") @staticmethod - def _fix_viewer_component_paths(filename, data): + def _fix_viewer_component_paths(filename, data, ansys_version): # Special case for AVZ viewer: ANSYSViewer_min.js to set the base path for images if filename.endswith("ANSYSViewer_min.js"): data = data.decode("utf-8") @@ -258,7 +284,9 @@ def _fix_viewer_component_paths(filename, data): '"/static/website/images/"', r'document.URL.replace(/\\/g, "/").replace("index.html", "media/")', ) - data = data.replace('"/ansys/nexus/images/', '"./ansys/nexus/images/') + data = data.replace( + f'"/ansys{ansys_version}/nexus/images/', f'"./ansys{ansys_version}//nexus/images/' + ) # this one is interesting. by default, AVZ will throw an error if you attempt to read # a "file://" protocol src. In offline mode, if we are not using data URIs, then we # need to lie to the AVZ core and tell it to go ahead and try. @@ -267,7 +295,9 @@ def _fix_viewer_component_paths(filename, data): # Special case for the AVZ viewer web component (loading proxy images and play arrow) elif filename.endswith("viewer-loader.js"): data = data.decode("utf-8") - data = data.replace('"/ansys/nexus/images/', '"./ansys/nexus/images/') + data = data.replace( + f'"/ansys{ansys_version}/nexus/images/', f'"./ansys{ansys_version}//nexus/images/' + ) data = data.encode("utf-8") return data @@ -277,9 +307,12 @@ def _download_static_files(self, files, source_path, target_path, comment): url = tmp.scheme + "://" + tmp.netloc + source_path + f resp = requests.get(url, allow_redirects=True) if resp.status_code == requests.codes.ok: - filename = os.path.join(self._directory, target_path, f) + filename = self._directory + os.sep + target_path + os.sep + f + filename = os.path.normpath(filename) try: - data = self._fix_viewer_component_paths(filename, resp.content) + data = self._fix_viewer_component_paths( + str(filename), resp.content, self._ansys_version + ) open(filename, "wb").write(data) except Exception: print(f"Unable to download {comment}: {f}") @@ -329,9 +362,9 @@ def _get_file(self, path_plus_queries: str, pathname: str, inline: bool = False) # we need to prefix the .bin file and scene.js file with the GUID basename = f"{os.path.basename(os.path.dirname(pathname))}_{basename}" else: - tmp = self._fix_viewer_component_paths(basename, tmp) + tmp = self._fix_viewer_component_paths(basename, tmp, self._ansys_version) # get the output filename - if pathname.startswith("/static/ansys/"): + if pathname.startswith(f"/static/ansys{self._ansys_version}/"): # if the content is part of the /ansys/ namespace, we keep the namespace, # but remove the /static prefix local_pathname = os.path.dirname(pathname).replace("/static/", "./") @@ -361,7 +394,11 @@ def _find_block(text: str, start: int, prefix: int, suffix: str) -> (int, int, s return -1, -1, "" idx2 += len(suffix) block = text[idx1:idx2] - if ("/media/" in block) or ("/static/" in block) or ("/ansys/" in block): + if ( + ("/media/" in block) + or ("/static/" in block) + or (re.match(r"/ansys([0-9]+)", block)) + ): return idx1, idx2, text[idx1:idx2] start = idx2 @@ -452,10 +489,29 @@ def _download(self): self._make_dir([self._directory, "media", "jax", "input", "AsciiMath"]) self._make_dir([self._directory, "media", "images"]) self._make_dir([self._directory, "webfonts"]) - self._make_dir([self._directory, "ansys", "nexus", "images"]) - self._make_dir([self._directory, "ansys", "nexus", "utils"]) - self._make_dir([self._directory, "ansys", "nexus", "threejs", "libs", "draco", "gltf"]) - self._make_dir([self._directory, "ansys", "nexus", "novnc", "vendor", "jQuery-contextMenu"]) + self._make_dir([self._directory, f"ansys{self._ansys_version}", "nexus", "images"]) + self._make_dir([self._directory, f"ansys{self._ansys_version}", "nexus", "utils"]) + self._make_dir( + [ + self._directory, + f"ansys{self._ansys_version}", + "nexus", + "threejs", + "libs", + "draco", + "gltf", + ] + ) + self._make_dir( + [ + self._directory, + f"ansys{self._ansys_version}", + "nexus", + "novnc", + "vendor", + "jQuery-contextMenu", + ] + ) # get the webpage html source resp = requests.get(self._url) @@ -480,7 +536,7 @@ def _download(self): # Image file not found # in viewer-loader.js - this is handled in a special way - # + # # video # # slider template diff --git a/src/ansys/dynamicreporting/core/utils/report_remote_server.py b/src/ansys/dynamicreporting/core/utils/report_remote_server.py index 68ea04f3..6b452fa0 100755 --- a/src/ansys/dynamicreporting/core/utils/report_remote_server.py +++ b/src/ansys/dynamicreporting/core/utils/report_remote_server.py @@ -103,7 +103,7 @@ class Server: Implements REST protocols. """ - def __init__(self, url=None, username=None, password=None): + def __init__(self, url=None, username=None, password=None, ansys_version=None): # Check on the validity of url formatting if url is not None: o = urlparse(url) @@ -112,6 +112,7 @@ def __init__(self, url=None, username=None, password=None): if print_allowed(): print("Error: invalid URL. Setting it to None") url = None + self._ansys_version = ansys_version self.cur_url = url self.cur_username = username self.cur_password = password @@ -858,7 +859,13 @@ def build_url_with_query(self, report_guid, query, rest_api=False): return url def export_report_as_html( - self, report_guid, directory_name, query=None, filename="index.html", no_inline_files=False + self, + report_guid, + directory_name, + query=None, + filename="index.html", + no_inline_files=False, + ansys_version=None, ): if query is None: query = {} @@ -867,8 +874,15 @@ def export_report_as_html( from ansys.dynamicreporting.core.utils.report_download_html import ReportDownloadHTML url = self.build_url_with_query(report_guid, query) + _ansys_version = self._ansys_version + if ansys_version: + _ansys_version = ansys_version worker = ReportDownloadHTML( - url=url, directory=directory_path, filename=filename, no_inline_files=no_inline_files + url=url, + directory=directory_path, + filename=filename, + no_inline_files=no_inline_files, + ansys_version=_ansys_version, ) worker.download() @@ -1491,7 +1505,12 @@ def launch_local_database_server( # Check to see if there is already a server running on this URI # build a server and try it - tmp_server = Server(url=f"http://127.0.0.1:{port}", username=username, password=password) + tmp_server = Server( + url=f"http://127.0.0.1:{port}", + username=username, + password=password, + ansys_version=ansys_version, + ) try: # validate will throw exceptions or return a float. _ = tmp_server.validate() From 8563d3c684377847ca1c6c60276e33d329f4f4cd Mon Sep 17 00:00:00 2001 From: Randy Frank <89219420+randallfrank@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:02:32 -0500 Subject: [PATCH 18/18] Feat/add offline vr (#89) --- src/ansys/dynamicreporting/core/utils/report_download_html.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ansys/dynamicreporting/core/utils/report_download_html.py b/src/ansys/dynamicreporting/core/utils/report_download_html.py index 9b6bdca3..3237a819 100644 --- a/src/ansys/dynamicreporting/core/utils/report_download_html.py +++ b/src/ansys/dynamicreporting/core/utils/report_download_html.py @@ -238,6 +238,7 @@ def _download_special_files(self): "GLTFLoader.js", "OrbitControls.js", "three.js", + "VRButton.js", ] self._download_static_files( image,