From 27a834b2ff1a533c7cbf15a7f741aa84fc0cca48 Mon Sep 17 00:00:00 2001 From: Frank Malatino Date: Wed, 8 Jan 2025 14:23:40 -0500 Subject: [PATCH 1/5] Added doc files --- docs/builddocs.sh | 24 +++ docs/requirement_docs.txt | 5 + docs/sphinx_doc/Makefile | 225 +++++++++++++++++++++ docs/sphinx_doc/conf.py | 331 +++++++++++++++++++++++++++++++ docs/sphinx_doc/dace.rst | 9 + docs/sphinx_doc/docker.rst | 23 +++ docs/sphinx_doc/gt4py.rst | 7 + docs/sphinx_doc/index.rst | 27 +++ docs/sphinx_doc/make.bat | 281 ++++++++++++++++++++++++++ docs/sphinx_doc/overview.rst | 126 ++++++++++++ docs/sphinx_doc/program_guid.rst | 4 + docs/sphinx_doc/test.rst | 65 ++++++ docs/sphinx_doc/testing.rst | 65 ++++++ docs/sphinx_doc/users_guide.rst | 161 +++++++++++++++ 14 files changed, 1353 insertions(+) create mode 100644 docs/builddocs.sh create mode 100644 docs/requirement_docs.txt create mode 100644 docs/sphinx_doc/Makefile create mode 100644 docs/sphinx_doc/conf.py create mode 100644 docs/sphinx_doc/dace.rst create mode 100644 docs/sphinx_doc/docker.rst create mode 100644 docs/sphinx_doc/gt4py.rst create mode 100644 docs/sphinx_doc/index.rst create mode 100644 docs/sphinx_doc/make.bat create mode 100644 docs/sphinx_doc/overview.rst create mode 100644 docs/sphinx_doc/program_guid.rst create mode 100644 docs/sphinx_doc/test.rst create mode 100644 docs/sphinx_doc/testing.rst create mode 100644 docs/sphinx_doc/users_guide.rst diff --git a/docs/builddocs.sh b/docs/builddocs.sh new file mode 100644 index 00000000..c69c4aa2 --- /dev/null +++ b/docs/builddocs.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# exit immediately on error +set -e + +# To avoid issues when calling the script from different directories +# sets the directory to the location of the script +cd $(dirname $0) + +# This short script builds both the doxygen and sphinx documentation + +# Define pretty colors +YEL='\033[0;33m' +GRN='\033[1;32m' +NC='\033[0m' + +# Build sphinx documents +cd sphinx_doc/ +make clean # fixes occasional unexpected behavior +make html + +echo "" +echo -e "-- ${GRN}Building Docs Complete${NC} --" +echo -e "See ${YEL}sphinx_doc/_build/html/${NC} for sphinx html files" \ No newline at end of file diff --git a/docs/requirement_docs.txt b/docs/requirement_docs.txt new file mode 100644 index 00000000..3c166124 --- /dev/null +++ b/docs/requirement_docs.txt @@ -0,0 +1,5 @@ +recommonmark +sphinx>=1.4 +sphinx-argparse +sphinx_rtd_theme +sphinx-gallery \ No newline at end of file diff --git a/docs/sphinx_doc/Makefile b/docs/sphinx_doc/Makefile new file mode 100644 index 00000000..6ce0d3c0 --- /dev/null +++ b/docs/sphinx_doc/Makefile @@ -0,0 +1,225 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " epub3 to make an epub3" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ERF.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ERF.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/ERF" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ERF" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: epub3 +epub3: + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +.PHONY: dummy +dummy: + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." \ No newline at end of file diff --git a/docs/sphinx_doc/conf.py b/docs/sphinx_doc/conf.py new file mode 100644 index 00000000..b3a7d7fb --- /dev/null +++ b/docs/sphinx_doc/conf.py @@ -0,0 +1,331 @@ +# -*- coding: utf-8 -*- +# +# import os +import sys +# sys.path.insert(0, os.path.abspath('.')) +#sys.path.append("../breathe") + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ 'sphinx.ext.mathjax'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] +#breathe_projects = {"NDSL": "../doxygen_output/xml/"} +#breathe_default_project = "NDSL" + +#fortran_src ='../../Source/Src_2d/' +#fortran_ext =[' 'F90'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +# +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'NDSL' +copyright = u' ' +author = u'NOAA/NASA NDSL development team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'0.1' +# The full version, including alpha/beta/rc tags. +release = u'0.1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# +# today = '' +# +# Else, today_fmt is used as the format for a strftime call. +# +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +numfig = True +numfig_format = {'figure': '%s', 'table': '%s', 'code-block': '%s'} + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'nature' +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. +# " v documentation" by default. +# +# html_title = u'NDSL v0.01' + +# A shorter title for the navigation bar. Default is the same as html_title. +# +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# +# html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# +# html_extra_path = [] + +# If not None, a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# The empty string is equivalent to '%b %d, %Y'. +# +# html_last_updated_fmt = None + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# +# html_additional_pages = {} + +# If false, no module index is generated. +# +# html_domain_indices = True + +# If false, no index is generated. +# +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' +# +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# 'ja' uses this config value. +# 'zh' user can custom change `jieba` dictionary path. +# +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'ndsl document' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'NDSL.tex', u'NDSL Documentation', + author, 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# +# latex_use_parts = False + +# If true, show page references after internal links. +# +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# +# latex_appendices = [] + +# It false, will not define \strong, \code, itleref, \crossref ... but only +# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added +# packages. +# +# latex_keep_old_macro_names = True + +# If false, no module index is generated. +# +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'ndsl', u'NDSL Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +# +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ndsl', u'NDSL Documentation', + author, 'NDSL', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +# +# texinfo_appendices = [] + +# If false, no module index is generated. +# +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# +# texinfo_no_detailmenu = False \ No newline at end of file diff --git a/docs/sphinx_doc/dace.rst b/docs/sphinx_doc/dace.rst new file mode 100644 index 00000000..231cacdf --- /dev/null +++ b/docs/sphinx_doc/dace.rst @@ -0,0 +1,9 @@ +Dace +============ + +DaCe is a parallel programming framework developed at Scalable Parallel Computing Laboratory (SPCL), DaCe is a high level intermediate representation (IR) that parses most of the Python/NumPy semantcs, and Fortran programming languages in the frontend to DaCe IR, and then optimizes the IR by passes/transformations, the DaCe IRs then used by the backend codegen to generate highly efficient C++ code for high-performance CPU, GPU, and FPGA hardware devices. + +DaCe IR uses the Stateful Dataflow multiGraphs (SDFG) data-centric intermediate representation: A transformable, interactive representation of code based on data movement. Since the input code and the SDFG are separate, it is possible to optimize a program without changing its source, so that it stays readable. On the other hand, the used optimizations are customizable and user-extensible, so they can be written once and reused in many applications. With data-centric parallel programming, we enable direct knowledge transfer of performance optimization, regardless of the application or the target processor. + +For more detailed document about DaCe, please refer to the following link: +https://spcldace.readthedocs.io/en/latest/index.html \ No newline at end of file diff --git a/docs/sphinx_doc/docker.rst b/docs/sphinx_doc/docker.rst new file mode 100644 index 00000000..e76a9ae7 --- /dev/null +++ b/docs/sphinx_doc/docker.rst @@ -0,0 +1,23 @@ +.. highlight:: shell + +====== +Docker +====== + +While it is possible to install and build pace bare-metal, we can ensure all system libraries are installed with the correct versions by using a Docker container to test and develop pace. +This requires you have Docker installed (we recommend `Docker Desktop`_ for most users). +You may need to increase memory allocated to Docker in its settings. + +Before building the Docker image, you will need to update the git submodules so that any dependencies are cloned and at the correct version: + +.. code-block:: console + + $ git submodule update --init --recursive + +Then build the `pace` docker image at the top level: + +.. code-block:: console + + $ make build + +.. _`Docker Desktop`: https://www.docker.com/ \ No newline at end of file diff --git a/docs/sphinx_doc/gt4py.rst b/docs/sphinx_doc/gt4py.rst new file mode 100644 index 00000000..5469d08a --- /dev/null +++ b/docs/sphinx_doc/gt4py.rst @@ -0,0 +1,7 @@ +Gt4py +========== + +pace-physics includes the Python implementation of GFS physics built using the GT4Py domain-specific language. +Currently, only GFDL cloud microphysics is integrated into Pace. +Additional physics schemes (NOAH land surface, GFS sea ice, scale-aware mass-flux shallow convection, hybrid eddy-diffusivity mass-flux PBL and free atmospheric turbulence, and rapid radiative transfer model) have been ported indendepently and are available in the `physics-standalone`_ repository. +Additional work is required to integrate these schemes. \ No newline at end of file diff --git a/docs/sphinx_doc/index.rst b/docs/sphinx_doc/index.rst new file mode 100644 index 00000000..dc2dc926 --- /dev/null +++ b/docs/sphinx_doc/index.rst @@ -0,0 +1,27 @@ +NDSL Documentation +================== + +NDSL is domain-specific language for scientific computing in Python, it supports most of the Python language semantics, with performance compartible as the native C and C++ programming language. + + +NDSL has been used as the backend of Pace model (https://github.com/NOAA-GFDL/pace), which runs on a laptop using Python-based backend, and on thousands of heterogeneous compute nodes of a large supercomputer using C/C++ and Cuda/HiP backend. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + overview + users_guide + program_guide + test + dace + gt4py + pyfms + docker + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` \ No newline at end of file diff --git a/docs/sphinx_doc/make.bat b/docs/sphinx_doc/make.bat new file mode 100644 index 00000000..1ae0138d --- /dev/null +++ b/docs/sphinx_doc/make.bat @@ -0,0 +1,281 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. epub3 to make an epub3 + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + echo. coverage to run coverage check of the documentation if enabled + echo. dummy to check syntax errors of document sources + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +REM Check if sphinx-build is available and fallback to Python version if any +%SPHINXBUILD% 1>NUL 2>NUL +if errorlevel 9009 goto sphinx_python +goto sphinx_ok + +:sphinx_python + +set SPHINXBUILD=python -m sphinx.__init__ +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +:sphinx_ok + + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\ERF.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\ERF.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "epub3" ( + %SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3 + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub3 file is in %BUILDDIR%/epub3. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "coverage" ( + %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage + if errorlevel 1 exit /b 1 + echo. + echo.Testing of coverage in the sources finished, look at the ^ +results in %BUILDDIR%/coverage/python.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +if "%1" == "dummy" ( + %SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. Dummy builder generates no files. + goto end +) + +:end \ No newline at end of file diff --git a/docs/sphinx_doc/overview.rst b/docs/sphinx_doc/overview.rst new file mode 100644 index 00000000..c90c0a88 --- /dev/null +++ b/docs/sphinx_doc/overview.rst @@ -0,0 +1,126 @@ +======== +Overview +======== + +Quick Start +------------ +Python `3.11.x` is required for NDSL and all its third party dependencies for installation. + +NDSL submodules `gt4py` and `dace` to point to vetted versions, use `git clone --recurse-submodule` to update the git submodules. + +NDSL is __NOT__ available on `pypi`. Installation of the package has to be local, via `pip install ./NDSL` (`-e` supported). The packages has a few options: + +- `ndsl[test]`: installs the test packages (based on `pytest`) +- `ndsl[develop]`: installs tools for development and tests. + +NDSL uses pytest for its unit tests, the tests are available via: + +- `pytest -x test`: running CPU serial tests (GPU as well if `cupy` is installed) +- `mpirun -np 6 pytest -x test/mpi`: running CPU parallel tests (GPU as well if `cupy` is installed) + + +Requirements & supported compilers +------------------------------------- + +For CPU backends: + +- 3.11.x >= Python < 3.12.x +- Compilers: + - GNU 11.2+ +- Libraries: + - Boost headers 1.76+ (no lib installed, just headers) + +For GPU backends (the above plus): + +- CUDA 11.2+ +- Python package: + - `cupy` (latest with proper driver support [see install notes](https://docs.cupy.dev/en/stable/install.html)) +- Libraries: + - MPI compiled with cuda support + + +NDSL installation and testing +------------------------------------- + +NDSL is not available at `pypi`, it uses + + .. code-block:: console + + pip install NDSL + +to install NDSL locally. + +NDSL has a few options: + +- `ndsl[test]`: installs the test packages (based on `pytest`) +- `ndsl[develop]`: installs tools for development and tests. + +Tests are available via: + +- `pytest -x test`: running CPU serial tests (GPU as well if `cupy` is installed) +- `mpirun -np 6 pytest -x test/mpi`: running CPU parallel tests (GPU as well if `cupy` is installed) + + +Configurations for Pace +---------------------------- + +Configurations for Pace to use NDSL with different backend: + +- FV3_DACEMODE=Python[Build|BuildAndRun|Run] controls the full program optimizer behavior + + - Python: default, use stencil only, no full program optmization + + - Build: will build the program then exit. This _build no matter what_. (backend must be `dace:gpu` or `dace:cpu`) + + - BuildAndRun: same as above but after build the program will keep executing (backend must be `dace:gpu` or `dace:cpu`) + + - Run: load pre-compiled program and execute, fail if the .so is not present (_no hashs check!_) (backend must be `dace:gpu` or `dace:cpu`) + +- PACE_FLOAT_PRECISION=64 control the floating point precision throughout the program. + + +Install Pace with different NDSL backend: + + - Shell scripts to install Pace using NDSL backend on specific machines such as Gaea can be found in `examples/build_scripts/`. + + - When cloning Pace you will need to update the repository's submodules as well: + + .. code-block:: console + + $ git clone --recursive https://github.com/ai2cm/pace.git + + or if you have already cloned the repository: + + .. code-block:: console + + $ git submodule update --init --recursive + + + - Pace requires GCC > 9.2, MPI, and Python 3.8 on your system, and CUDA is required to run with a GPU backend. + You will also need the headers of the boost libraries in your `$PATH` (boost itself does not need to be installed). + If installed outside the standard header locations, gt4py requires that `$BOOST_ROOT` be set: + + .. code-block:: console + + $ cd BOOST/ROOT + $ wget https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz + $ tar -xzf boost_1_79_0.tar.gz + $ mkdir -p boost_1_79_0/include + $ mv boost_1_79_0/boost boost_1_79_0/include/ + $ export BOOST_ROOT=BOOST/ROOT/boost_1_79_0 + + + - We recommend creating a python `venv` or conda environment specifically for Pace. + + .. code-block:: console + + $ python3 -m venv venv_name + $ source venv_name/bin/activate + + - Inside of your pace `venv` or conda environment pip install the Python requirements, GT4Py, and Pace: + + .. code-block:: console + + $ pip3 install -r requirements_dev.txt -c constraints.txt + + - There are also separate requirements files which can be installed for linting (`requirements_lint.txt`) and building documentation (`requirements_docs.txt`). \ No newline at end of file diff --git a/docs/sphinx_doc/program_guid.rst b/docs/sphinx_doc/program_guid.rst new file mode 100644 index 00000000..6eff3a64 --- /dev/null +++ b/docs/sphinx_doc/program_guid.rst @@ -0,0 +1,4 @@ +Program Guide +============= + +This page will include general introductory information about NDSL, including external links to docs. \ No newline at end of file diff --git a/docs/sphinx_doc/test.rst b/docs/sphinx_doc/test.rst new file mode 100644 index 00000000..7837929f --- /dev/null +++ b/docs/sphinx_doc/test.rst @@ -0,0 +1,65 @@ +======= +Testing +======= + +Savepoint tests are run automatically on every commit to the main branch. +Savepoint data are generated from `fv3gfs-fortran`_ and can also be downloaded: + +.. code-block:: console + + $ make get_test_data + $ # if you do not have access to the Google Cloud Storage bucket, use FTP: + $ make USE_FTP=yes get_test_data + +Savepoint data are used in the "translate" tests and in checkpointer tests. +Developers should be aware that the "translate" tests are an older, initial design of the test infrastructure which has grown organically and may be difficult to understand or modify, but currently covers smaller parts of the code not tested independently by the checkpointer tests. +In the long run we suggest increasing the number of checkpoints and adding new checkpointer tests, and eventually removing the translate tests, which are considered deprecated. + +#. Individual translate tests + + These test at the module level such as `c_sw` and `d_sw`, and the translate logic is shared among dynamical core and physics. + Larger tests also exist such as `translate_fvdynamics` which tests a full acoustic time step. + Manual thresholds are set for each savepoint test. Curerntly, maximum threshold is applied to all variables within the test. + Additionally, a near-zero value can be specified for a variable to ignore values that are very close to zero. + +#. Checkpointer tests + + This tests the full model run where checkpoints are inserted throughout the model. + See ``tests/savepoint/test_checkpoints.py`` for an example. + Checkpointers are given model state along with a label, and may implement any behavior they wish. + For example, checkpointers have been written to: + + #. compare the model state to a reference state (:py:class:`pace.util.ValidationCheckpointer`) + #. calibrate the threshold for each variable given a perturbed state (:py:class:`pace.util.ThresholdCalibrationCheckpointer`) + + Additional checkpoint behaviors could be implemented, for example to save reference test data directly from Python. + Thresholds are set automatically using a :py:class:`pace.util.ThresholdCalibrationCheckpointer` for each variable based on a round-off error perturbed initial state. + We run the model multiple times with a perturbed initial state and record the largest differences at each checkpoint for each variable. + The threshold is then set to the largest difference multiplied by a scaling factor. + Currently, only checkpoint tests within the dynamical core are tested. + There are two outstanding PRs to include driver and physics checkpoint tests. + +----------- +Limitations +----------- +While individual translate test can be run on all backends, checkpointer tests do not work for orchestrated DaCe backend. +This is a limitation due to DaCe not accepting keyword arguments or a list of :py:class:`pace.util.Quantity`, causing the checkpointer calls to be overly complicated. +A possible workaround is to follow the HaloUpdater example to wrap the variables at init time and called during DaCe callbacks. +A better solution would be to have DaCe accept a list of :py:class:`pace.util.Quantity`. + +-------- +Examples +-------- +Translate tests for the dynamical core can be run as follows: + +.. code-block:: console + + $ make savepoint_tests + +We suggest reading the Makefile for a full list of translate test targets. Checkpointer tests can be run as follows: + +.. code-block:: console + + $ make test_savepoint + +.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation \ No newline at end of file diff --git a/docs/sphinx_doc/testing.rst b/docs/sphinx_doc/testing.rst new file mode 100644 index 00000000..7837929f --- /dev/null +++ b/docs/sphinx_doc/testing.rst @@ -0,0 +1,65 @@ +======= +Testing +======= + +Savepoint tests are run automatically on every commit to the main branch. +Savepoint data are generated from `fv3gfs-fortran`_ and can also be downloaded: + +.. code-block:: console + + $ make get_test_data + $ # if you do not have access to the Google Cloud Storage bucket, use FTP: + $ make USE_FTP=yes get_test_data + +Savepoint data are used in the "translate" tests and in checkpointer tests. +Developers should be aware that the "translate" tests are an older, initial design of the test infrastructure which has grown organically and may be difficult to understand or modify, but currently covers smaller parts of the code not tested independently by the checkpointer tests. +In the long run we suggest increasing the number of checkpoints and adding new checkpointer tests, and eventually removing the translate tests, which are considered deprecated. + +#. Individual translate tests + + These test at the module level such as `c_sw` and `d_sw`, and the translate logic is shared among dynamical core and physics. + Larger tests also exist such as `translate_fvdynamics` which tests a full acoustic time step. + Manual thresholds are set for each savepoint test. Curerntly, maximum threshold is applied to all variables within the test. + Additionally, a near-zero value can be specified for a variable to ignore values that are very close to zero. + +#. Checkpointer tests + + This tests the full model run where checkpoints are inserted throughout the model. + See ``tests/savepoint/test_checkpoints.py`` for an example. + Checkpointers are given model state along with a label, and may implement any behavior they wish. + For example, checkpointers have been written to: + + #. compare the model state to a reference state (:py:class:`pace.util.ValidationCheckpointer`) + #. calibrate the threshold for each variable given a perturbed state (:py:class:`pace.util.ThresholdCalibrationCheckpointer`) + + Additional checkpoint behaviors could be implemented, for example to save reference test data directly from Python. + Thresholds are set automatically using a :py:class:`pace.util.ThresholdCalibrationCheckpointer` for each variable based on a round-off error perturbed initial state. + We run the model multiple times with a perturbed initial state and record the largest differences at each checkpoint for each variable. + The threshold is then set to the largest difference multiplied by a scaling factor. + Currently, only checkpoint tests within the dynamical core are tested. + There are two outstanding PRs to include driver and physics checkpoint tests. + +----------- +Limitations +----------- +While individual translate test can be run on all backends, checkpointer tests do not work for orchestrated DaCe backend. +This is a limitation due to DaCe not accepting keyword arguments or a list of :py:class:`pace.util.Quantity`, causing the checkpointer calls to be overly complicated. +A possible workaround is to follow the HaloUpdater example to wrap the variables at init time and called during DaCe callbacks. +A better solution would be to have DaCe accept a list of :py:class:`pace.util.Quantity`. + +-------- +Examples +-------- +Translate tests for the dynamical core can be run as follows: + +.. code-block:: console + + $ make savepoint_tests + +We suggest reading the Makefile for a full list of translate test targets. Checkpointer tests can be run as follows: + +.. code-block:: console + + $ make test_savepoint + +.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation \ No newline at end of file diff --git a/docs/sphinx_doc/users_guide.rst b/docs/sphinx_doc/users_guide.rst new file mode 100644 index 00000000..8972ce20 --- /dev/null +++ b/docs/sphinx_doc/users_guide.rst @@ -0,0 +1,161 @@ +Users Guide +============= + +1: Introduction +---------------- +Recently, Python has became the dominant programming language in machine learning and data sciences community since it is easy to learn and program, however the performance of Python is still the major concern in scientific computing and HPC community. In scientific computing and HPC community, the most widely used programming language is C/C++ and Fortran, Python is often used as script language for pre- and post-processing. Although, many complains about Python program performance happened from time to time, and obviously, Python program community didn't take it seriously in the language standard consideration. + +The major performance issue in Python programming language, especially in computation-intensive applications, are loops, which are often the performance bottlenecks of an application in other programming languages too, such as C++ and Fortran. However, Python program often observes 10x to 100x slower than C, C++ and Fortran program. In order to achieve peak hardware performance, the scientific computing community have tried different programming model, such as OpenMP, Cilk+, Thread Building Blocks (TBB) as well as Linux p-threads for multi/many-core processors and GPUs, and Kokkos, RAJA, OpenMP offload, and OpenACC for highest performance on CPU/GPUs heterogeneous system, all these programming models are only available for C, C++ and Fortran. Only a few works that target to high perfromance for Python programming language. + +The Python based NDSL programming model described in this users guide provides an alternative solution to reach peak hardware performance with relatively little programming effort by using the stencil semantics. A stencil is similar to parallel for kernel that used in Kokkos and RAJA, to update array elements according to a fixed access pattern. With the stencil semantics in mind, NDSL, for example, can be used to write matrix multiplication kernels that match the performance of cuBLAS/hipBLAS that many GPU programmers can’t do in Cuda/HiP using only about 30 lines of code. It greatly reduces the programmer's effort, and NDSL has already been successfully used in Pace global climate model, which achieves up to 4x speedup, more efficient than the original Fortran implementations. + +2: Programming model +---------------------------------------------------- +The programming model of NDSL is composed of backend execution spaces, performance optimization pass and transformations, and memory spaces, memory layout. These abstraction semantics allow the formulation of generic algorithms and data structures which can then be mapped to different types of hardware architectures. Effectively, they allow for compile time transformation of algorithms to allow for adaptions of varying degrees of hardware parallelism as well as of the memory hierarchy. Figure 1 shows the high level architecture of NDSL (without orchestration option), From Fig. 1, it is shown that NDSL uses hierarchy levels intermediate representation (IR) to abstract the structure of computational program, whcih reduces the complexity of application code, and maintenance cost, while the code portability and scalability are increased. This method also avoids raising the information from lower level representations by means of static analysis, and memory leaking, where feasible, and performaing optimizations at the high possible level of abstraction. The methods primarily leverages structural information readily available in the source code, it enables to apply the optimization, such as loop fusion, tiling and vectorization without the need for complicated analysis and heuristics. + +.. Figure 1: + +.. figure:: static/ndsl_flow.png + :width: 860 + :align: center + + the high-level architecture of NDSL stencil life cycle for non-orchestration run. + + + +In NDSL, the python frontend code takes the user defined stencils to python AST using builtin ast module. In an AST, each node is an object defined in python AST grammar class (for more details, please refer: https://docs.python.org/3/library/ast.html). the AST node visitor (the NDSL/external/gt4py/src/gt4py/cartesian/frontend/gtscript_frontend.py) IRMaker class traverses the AST of a python function decorated by @gtscript.function and/or stencil objects, the Python AST of the program is then lowing to the Definition IR. The definition IR is high level IR, and is composed of high level program, domain-specific information, and the structure of computational operations which are independent of low level hardware platform. The definition of high level IR allows transformation of the IRs without lossing the performance of numerical libraries. However, the high level IR doesn't contains detailed information that required for performance on specific low level runtime hardware. Specificially, the definition IR only preserves the necessary information to lower operations to runtime platform hardware instructions implementing coarse-grained vector operations, or to numerical libraries — such as cuBLAS/hipBLAS and Intel MKL. + + +The definition IR is then transformed to GTIR (gt4py/src/gt4py/cartesian/frontend/defir_to_gtir.py), the GTIR stencils is defined as in NDSL + +.. code-block:: none + + class Stencil(LocNode, eve.ValidatedSymbolTableTrait): + name: str + api_signature: List[Argument] + params: List[Decl] + vertical_loops: List[VerticalLoop] + externals: Dict[str, Literal] + sources: Dict[str, str] + docstring: str + + @property + def param_names(self) -> List[str]: + return [p.name for p in self.params] + + _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) + + + +GTIR is also a high level IR, it contains `vertical_loops` loop statement, in the climate applications, the vertical loops usually need special treatment as the numerical unstability is arison. The `vertical_loops` in GTIR as separate code block and help the following performance pass and transofrmation implementation. The program analysis pass/transformation is applied on the GTIR to remove the redunant nodes, and prunning the unused parameters, and data type and shape propogations of the symbols, and loop extensions. + + +The GTIR is then further lowered to optimization IR (OIR), which is defined as + + +.. code-block:: none + + class Stencil(LocNode, eve.ValidatedSymbolTableTrait): + name: str + # TODO: fix to be List[Union[ScalarDecl, FieldDecl]] + params: List[Decl] + vertical_loops: List[VerticalLoop] + declarations: List[Temporary] + + _validate_dtype_is_set = common.validate_dtype_is_set() + _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) + + +The OIR is particularly designed for performance optimization, the performation optimization algorithm are carried out on OIR by developing pass/transorformations. Currently, the vertical loop merging, and horizonal execution loop merging, and loop unrolling and vectorization, statement fusion and pruning optimizations are available and activated by the environmental variable in the oir_pipeline module. + + +After the optimization pipeline finished, the OIR is then converted to different backend IR, for example, DACE IR (SDFG). The DACE SDFG can be further optimizated by its embeded pass/transormations algorithm, but in PACE application, we didn't activate this optimization step. It should be pointed out that, during the OIR to SDFG process, the `horizontal execution` node is serialized to SDFG library node, within which the loop expansion information is encrypted. + +When using GT backend, the OIR is then directly used by the `gt4py` code generator to generate the C++ gridtool stencils (computation code), and the python binding code. In this backend, each `horizontal execution` node will be passed to and generate a seperate gridtool stencil. + + +NDSL also supports the whole program optimization model, this is called orchestration model in NDSL, currently it only supports DaCe backend. Whole program optimziation with DaCe is the process of turning all Python and GT4Py code in generated C++. Only _orchestrate_ the runtime code of the model is applied, e.g. everything in the `__call__` method of the module and all code in `__init__` is executed like a normal GT backend. + +At the highest level in Pace, to turn on orchestration you need to flip the `FV3_DACEMODE` to an orchestrated options _and_ run a `dace:*` backend (it will error out if run anything else). Option for `FV3_DACEMODE` are: + +- _Python_: default, turns orchestration off. +- _Build_: build the SDFG then exit without running. See Build for limitation of build strategy. +- _BuildAndRun_: as above, but distribute the build and run. +- _Run_: tries to execute, errors out if the cache don't exists. + +Code is orchestrated two ways: + +- functions are orchestrated via `orchestrate_function` decorator, +- methods are orchestrate via the `orchestrate` function (e.g. `pace.driver.Driver._critical_path_step_all`) + +The later is the way we orchestrate in our model. `orchestrate` is often called as the first function in the `__init__`. It patches _in place_ the methods and replace them with a wrapper that will deal with turning it all into executable SDFG when call time comes. + +The orchestration has two parameters: config (will expand later) and `dace_compiletime_args`. + +DaCe needs to be described all memory so it can interface it in the C code that will be executed. Some memory is automatically parsed (e.g. numpy, cupy, scalars) and others need description. In our case `Quantity` and others need to be flag as `dace.compiletime` which tells DaCe to not try to AOT the memory and wait for JIT time. The `dace_compiletime_args` helps with tagging those without having to change the type hint. + +Figure 2 shows the hierarchy levels of intermediate representations (IR) and the lowing process when orchestration option is activated. + +.. Figure 2: + +.. figure:: static/ndsl_orchestration.png + :width: 860 + :align: center + + the high-level architecture of NDSL stencil life cycle for orchestration run. + + + +When the orchestrated option is turned on, the call method object is patched in place, replacing the orignal Callable with a wrapper that will trigger orchestration at call time. If the model configuration doesn't demand orchestration, this won't do anything. The orchestrated call methods and the computational stencils (lazy computational stencils) which are cached in a container, will be parsed to python AST by the frontend code during the runtime, then the python AST code will be converted to DaCe SDFG. The analysis and optimization will be applied before the C++ code is generated by the codegen, this process is called Just In Time (JIT) build, compared with the non-orchestration model, which is eagerly compiled and build. The JIT build caches the build information of computational stencils, and orchestrated methods, and it is more convenient to apply the analysis and optimization pass to the overall code, such as the merging of neighbor stencils made easy. Therefore, more optimized code can be generated, and better performance can be achieved during runtime. + + +3: Analysis and Optimization +---------------------------------------------------- +One of the major features of NDSL is that users can develop a new pass/transformation for the backend with new hardware, the passes and/or transformations are the key integrates in order to have good performance on the new hardware. In different abstract level, the passes and/or transformations perform different levels of optimization. For example, the loop level of optimization is independent of hardware, and can be applied to any backend, while the optimization of device placement, and memory and caches optimizations are dependent on different backend and hardware. In this section, we only focused on the optimizations that are independent of the backend hardware. + + +The general procedure of code optimization has two steps, in the first step, a filter function is called to find the pattern that need to apply the pass and/or transformation, then apply the pass and/or transoformation to the filtered pattern to insert or delte or replace the existing node with the optimizated node. In NDSL, the following passes and/transorformations are provided. + + + 3.1: Prune Unused Parameters + ----------------------------------------- + + .. code-block:: none + + def prune_unused_parameters(node: gtir.Stencil) -> gtir.Stencil: + assert isinstance(node, gtir.Stencil) + used_variables = ( + node.walk_values() + .if_isinstance(gtir.FieldAccess, gtir.ScalarAccess) + .getattr("name") + .to_list() + ) + used_params = list(filter(lambda param: param.name in used_variables, node.params)) + return node.copy(update={"params": used_params}) + + + 3.2: Dead Node Removal + -------------------------- + + 3.3: Propogate Shapes and Types + ------------------------------------ + + + 3.3: Function Inlining + ------------------------------------ + + 3.4: Vertical Loop Merging + ------------------------------------ + + 3.5: Horizontal Execution Loop Merging + ---------------------------------------------- + + 3.6: Cache Optimization + ------------------------------------ + + 3.8: Pruning + ------------------------------------ + + +4: Code Generators +---------------------------------------------------- From effe3075692ce376565238aa3488e59b1f4a881d Mon Sep 17 00:00:00 2001 From: Frank Malatino Date: Wed, 8 Jan 2025 14:28:23 -0500 Subject: [PATCH 2/5] Adding image files to docs --- .gitignore | 1 - docs/sphinx_doc/static/ndsl_flow.png | Bin 0 -> 214666 bytes docs/sphinx_doc/static/ndsl_orchestration.png | Bin 0 -> 221105 bytes 3 files changed, 1 deletion(-) create mode 100644 docs/sphinx_doc/static/ndsl_flow.png create mode 100644 docs/sphinx_doc/static/ndsl_orchestration.png diff --git a/.gitignore b/.gitignore index 24f794a4..b5526e04 100644 --- a/.gitignore +++ b/.gitignore @@ -166,7 +166,6 @@ RESTART/ _dacegraphs **/testing/output/* -*.png *.nc # VSCode diff --git a/docs/sphinx_doc/static/ndsl_flow.png b/docs/sphinx_doc/static/ndsl_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..37a8d4353b6a1b553a3172b85207455839980cce GIT binary patch literal 214666 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ŋ$vR7&j6i2U%_*pcwoK<89a2VO*vI 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 YesRZ;%;M@11pK)#qj<02u0g>60sM0$QUCw| literal 0 HcmV?d00001 diff --git a/docs/sphinx_doc/static/ndsl_orchestration.png b/docs/sphinx_doc/static/ndsl_orchestration.png new file mode 100644 index 0000000000000000000000000000000000000000..507e618d57922ec3b6b3df2c50d72695b67c92d6 GIT binary patch literal 221105 zcmd?RXH-+&*Do4+=%ItOASfzb6zRPRf}&EC4vI(z>Am+Ziqb@|BM^`PQbQMzqEaOE z7CNCO5XxQX^Stl>J>#5nzuqzKhdnZYu(S7GbIvt?WhU;Xz7{Rj87c?_LaU>#ZU}*p zD?=b8kx+8*oBbO{ufYqEr=gZAq@_YtOk@EeP$rG_GOKeDfy3eJM`jP z30}9shgo(XX=Z|_v8(Z45B~SfKexVilURF~k4POxTJS)PSo^{0GyBhX^|L99*36|( z{m>O-IlZZ{p__E)LhtZ0DwC?f?nw!R-XZ^=YnDzML^OAD)cB0E$_SkFjWvplEpa^J z|K)$q{kdp*M&-xg_&=Wc|7-6ekH~+?%;obfm&|W86G#4hO!0EHPtUKZda>XePK7nn zkAJM1OfCi(*7(2Twm-Aiun^Yj-MZ|tn(b-RvGkR~LR)y)h)uv4CXS*jE(T^X~aqRjREA1$JFjMGHmZZI= zv{QHb30np3t`tJZH3n`$_0->%g3q04&V|~k{WztybQXb|ZBt4o`vxU;Tqz2BCS^bM<;b{YpFrR0z4&1>k)bcU zR5UeWn?ft|_}BZoO^K3Rp9vYRVNTb&H0hF!27+ky?$G^0q-gDG`PAgev5$+Rx0MpI zQL#^UrPyk!DGU|E8~h%3hmYkyL+IJLP-&jP1zJ>b>2cnO#kriF<6&zhF4ut7%vKLZ zWvU7uQdn}W0==|YdRL_Ycyv5E(eH~vI)F&?PlXr;fWs1xQ99ws@tui7*ruzuriwKl zZsC3gPWUAwCeIk6kY zzj1QB@qP?kf4Z?Kb>P-FLBuhuZI#P-xL5=JtalD6Duy(*3l2)kN&=&DYk$8J?GmTA ztmLBaRwhH$nzwbCM=g`>gQ;^qiF!_@jEdU_6bK}}LV%S`&Aut*_uQ)rwX{MQZq-l2 zMouIyH$-XOyT`!b0FE%zeNCFWnr0W<75_itVmE4{KHxdC64xfx{#wbA7(dB=OjD!IMrM&W-F9nsXWzHy6H4tY1V1eu`kwCt8 z4t9RYQsCJq!RwF@IgHBX1*9+)Smd$_vGy7`jzasd>xxv~c_M6N=H501E{isJfBt#@ z)JZe7Smf)NAhxf#iGYX`LZjbCR({B_AA9gpN$omS@X_w@SZQU7A+a{X{YJi`g2|Hs zjlzR#lYyQYc`XePk5&dPQrq@K%Jw8qHuUZex6d_F%FPWYIfXBw$Zk@^Tp+eHwq3#B~ic ze6rMo6pUdJu4Gk;2Oij-m5T1`Bgb6(il(I6=^A)+0FLB*=n@J$}f;0(1VfBX6U)5wiaMJ-tgWNZAwtwL3;& zAG|_d+IZ~W|IQ%as#~Or=3eDvmOQn{F12e&ahF5zS1w^t;0siox4&Pb zr<0xvEpwd=CODUTfj|AHBJD;zw+xmsc~lVf+BS@DT!}S9(14EB!gu<8&xdz;_t>I$ z!O}^{vz@#5jJ%OTSv*7FrcG1Lc|Jq^r`OAFyav0I}kz4nn{(|FDu zV=J08s?Df;zVG<_;t=jxow#}AR&&2AVQPDtZIZGj@V9@mZ}m?7=5#paZVu(} zhO?mCy9L~_8@AUuK!ILB9m z>w+E2pBpe2RT@x{p(O%Fv?x^1?xQ6vbLYuj+^lBRts`Fedg3P8vc(~cYchrA9U=^WNHgwOC%(0~AAzrVnBi%k79ewk7yHAP2 z*fPj#?r!8 zy2T8b6SW^V?2S6cJm^H<5`JQIh6oh=p8BdETJnBe6TyTvw`nqh=YwaK!TWB(uGQ1g zZUt&TYDp-kmV{<4tis5e{e>47M=Kr0gAehob9ks2m#fEX=|1M;y77#gUt`nOgU zG#>eDLq5X((&uf+iP3j&G#29`E`6%6IK^EMz}ANMcad zuicus2`g_jB`SL9dFunjW4$Scv3p#c{ zrL2_jB&~G5OG2Rey`*w)vn5UaBYRdLDDu)auc{YbI#T6*GKIpGj`6nr1!^(nXqnZr z7Q02}uJC_a0it&Qy1mt_LvL?nPvr%y$8q!}SQjQq#pjVV_{5G66>6oJSkUT5rus|< zUAyv8aGt+_PN(BDBKM}5ew{TTl!#<&oh{i{@gQ8~A`xkd=J4=seVKE`A)r(-k5N34 zF-(?O$a=)(8+ee%9?LED?cm0>@jE+bw1q-P+#VP~IAlERE+|(Y=*$Jpf~El4EjJc& za&&IR+`Wwj(a_(%Uc13_xS0~7Crp38%7r`Lfl=kOSIPuiPEZ*aQL8&bgO$3ZcIxF+ z_HcuqQ^m{GYR8zH@7;sy_tQBY%kwL>|18;DX+(ZEzd$hh*pJXV%Y@O`vr@DhR zeZ1qHho9-{n=`jb);YMT&e!q`i;a>Gqf348a`Mw+5rtBLEe-tS%el!lSM{rcu>o2-qJt3+urLI5Y#Mv+~>3(!XAYBXL{WPg5A#pwqDOzN?BNpd7 zJ@WNfem}@GVB=>v#v|y%kXiLnZ++h6MlW#LaHD^+2Bg2xn(+Va`QRl z>{DXv(nI=?*6i(PD?%Ww@+WD zw$Jl>_L)zD>~VS#Da&; z2;x4sK|(Jt&TJScMk}vb9BLQ`35P})Cy33ZKFM)Q8?W`DS5WRq=H}c^o~v(C#9<$~ z^L<&|w$BeTx(isR;Vl$Chp=vVov%i7myZI=-jHbz5Dxl=Kz% z=g#Y}ixq+981!{TiXh!;H~JM9ks;5gV)e(v$B~Yl#Z^Q8ac4zwM{;7d3V81y#&K&# z39d;wj8A@J%EXI}C-X4mmJM4DHZl_VpevLoD*DMW9Bm!I_08U`YaTb}2ff)_8J22Y zWiB=MVnh*ky*TY?Bw_Zf?i-!{>4|q{EP9t~&Xw>giXw9}kC3#B)S^9M3ja>F5lZRhunbW8Xt_9b-&5Xm*fEHeYtHyRX$7qzvA8DHsV=4d36Ff9WWS z)Rka!$av+7UJHNUBTL9((94k#GoWeJeQ^7y{qf21nBS~Eqq200MK+64iW5gKztEw0 z%F3#ze{mAEYmj_aE}CxBqkOs)px$==Z?H@jfWYR%TMPHqh@$}m zBW`NdGoTPFfI|#BwgeWw2e!`CB5R%6aIpNT4x=GM43$BcsczPIV#pnf5t>c}MZzi* zHNtDLAVw2I)u)?xk*)z!-YdI8x>1j_*vXS}94a=kaT`UFev3bMG77aQ$G$=bVwpCJ18q zShc-BrZ<;AEiTp6JD*%>G&avJ<>-|}{zV!#{6Tbyj@XIap;<}N` z7m3t+n3R9ONN}CT_L|PA>Z2uFlWX{6M35P-i5hXxk{=?3tTzPvj+bHj@>QJd)k_gr z8&BiJAW!{bS|b91hZak2pp7DFa=|4X3p63o)0P|Y0pD{1TGad=Pz?+TwHXq3<_TJ) zNgL>RZU(bp&L%;cYiy$8ZkJRGmeR-*4k+r86Di1jVkl-{r*9kc&a30+>&rP>-gLZY zaQb><%5cQlgxMwINzTkLM&&bqI@2%Yj{)|&KxXuFbUS+RwT?u2oL_JJ^=zjx`iwM9 zhC(K+|_0m59U{JT+D_5Wu>Z)C3 zN7k5Map^N8+&FrpQdytMM>N&8`C2Sf__ug2D3{A5s9%ayCpF=ZW)nAk?NTFJ3oequ zLOUXAL-=~DF>>=zqWOg=cYFeGAf8zJ;>^+XmJ=*J-b~E*RRic^{5D99%B)b~Ov+dY zU&wPuCI*`6hdo&mejArqF}Xe#s|`0SJ1H&)>^Ujm9HD=3cvKjbwXkj7QT4(w19D4u`~F6pWjM9|I;UB{@l{j;PBFha<(5w}%{qSNGs^kMg>HYS z^IACXI|0lYzp1Z;a5Q0(@mX#C$>&>nDH3XVllyDZH~#B&Z?VMB2tJaTSX zZXsPp{T_d;@!g*7S^$w0ZXYL7F=&ku?4{J{cdp6ic>$}OriMo?bVPecxCS2veWAV8 zha4z8NmaL2)9J7Hw_E9o+8}EFcrX3yGycocpkIN=tE@Ii;73?0UP%x`g|t3TGuqs| zcsIYbI&#!QmEKzFi3p_wsLgxeXb1}pOXHMii5B({C@N&B|49WumU3IK!DzPoY#EQh zj3EW6c&?xC3{vv0H9)oi9Kk3gV5Q4&Fc0UN%Qr+qVMFoamL)w2Vh!x^^pPJurV*Wu zGfIUSH5GsF<@6z@^BJ2@{as-%S^te2P{HIekrm+@ta)rhZka4bbPtu3BumFuB_zYu z_GB-ZxP{?sKg}LEe&!tuS*u6+l=dYpoB8#!fcCk!wh^}&7ziRQzjZXqRcZfW+2Q4G zt$FV;j~J`oYWikpEp9jUvi|VxycmPA1MS!B5{u>N2rnZ`xxR+!5eM8+#J3dvOBb5N z8`R{u%-jMa>1sDdtx;7O3rT%jd%;!A<0o%dT+hf~d-CK$y1<|-6$q8v)Ntpo=Io$u zw4i>aEO3O0NbHPmu}$u&)e;6dLEkSUGVXw@Rru4$geZ4E5_+m?NC%6Rm|y->N~d_RSon+gc%BL#*-}o< zr@iWY{~d@CN~^UIsHNfK`H%1`cr4hcOP^Eu2{IyP`?(HPdy>9Ut6=$FlS2x+2+ohlzc z$-^1l{f^d0b>?os4KD8y>$vH9Qa+)7%04evkB^rn?xVG#sGybFT@{+K^%}!&;?B=i z6K85;M(kZYq41tkA+25-)j$Tuu1Y!ooy9wSH!UGL*TXHKbG+{1)C7f<;)>>|Gm#{= zqEt~$_A2X^lGEzbSx+;^t(=h$oQ<7o3+RZp;1Lp2>MQgZ zh+=aP-@?d?(2W${E^EqP@IxyoEPj(0i>>$mEs6hma%Jojn}u7!)OW%26iNn1iepCC zAvKs~K9r$u548id3SD=jf2H$wL+`9CF?@+EF1}x=J$a*z(5`uw+}6}Ssj_fw=VU?Gm8L_vQ_SPDFtW4Ge$1NiBzdjz z;@@sUy#IWru3DX<)BV01N7B;A0LV1zMCRVUPb0GRNU?Q*(5T4umLy0+&J zQ-1kaw46~n?`4+Qv#7YX8yp@%_y^Y|sEOv@#;8<-YLgqZ(`l9YJCEzSSV^j%Z9tncFA{?sJ(_ zj*D5c3GB`?yC~>o8%X;=F>w0G>fG$SDtj?5KbzrGMqAVHu9Y^(_v(ePRe7<>rOVPyUaiOEDEwUqPx)+ znWU=IFZOkJGs}vfsA%&~-aD>FT^^;Hp8|nWVVjq}`63Rtwk>{Syze(vz4zY*05Qz&$ETTehJ~BHS#sPDlZ!B8 zEgq{<)%XmB1N!J5J8_qDM|T((r;FV5d#CD)Teqqk7}~!XtmZ~Rh_$KK6OVgx(SkF# z?=cig5XZ9kV~@)`u|1M~ty*?<(lNd+tEOB1=7-KMxid@0og{ zO0Gdjd>88Kp6peG6Du)vY(A^nI$Nd;-O+gD@Q2mx8aoA(dJ0f@*~Nv|hD4Ev;>ey4 zB+>JkVQAh>j7d#xz8^m_XvjE(UN%P_ZnUuZd?Ep9&lg&j;UuE=@$3WUK_i42f~-g zqN5WeMyrK>rx=&)+)w|$Nz!qww!>$=>Rl;+zgBcYNrl$6h6nNN-^ zX$j}j@J_R2?tz%~v{+Q|`7tF?M)JK;KMVY)`R5j*SuzLX?|DFM$h&v*OY~*bqrGVq zFG|+^;*nd=dmI=m;9|is3EKTasb1OR9;<<Gv6*>k?Zi;G#9>z+Wt&8mUS zU=H1c=LV;%XK%4#230zxU*WuNy(lJ4Wf0S&CgZsO5beSi%>$)4ZfLxV&Syqz@&<~f z`7-cvB9x*HD%l{<78Bg^uP!NhGamsp&={ zD7n7vgSa-N+E$Vq?OLjvB9IjSGLNHd+#nVo35!GcqMa%Sjr`i*0518wcXFmsX#bu^ z_xJnrB&KZ+D_71_${tl%-!xfzAz&vi)f_Bc?*D7>qLBeC@SlPp){`rDZ3HmA+Y>&4 z<=hNoY!Z((AbjeDj@^Rf0U?uL+A6*&(o6K$D%zb34c%KqcjV>H5p65z#}`NtcLG|R zZF>qaw_n$%NKhXx%qOt}S|frKucNMwC@7K6XSYObI{-e5?);6HMOfpzk^g3V2}Bht znEjqhF>p2_4H2BND|K<7=Elr@gE|I38$4gR==v_kYW-6_MMXys)X2npqPcvQPUbxR z@QpA2gAFmX=DL&bXMS1k#KD{D-{jeMuQYr}>Fd6|HNN5*kvFbS!)kFsw2q*@ zsS6qmQwC~Mn zBQG?&{j_@{?nva{!hK>b1|U0mFFhM!bl}=o>9Ve;nN@paIry<5_{|c?WskYethA_Y zww5>zkUD_XW5*a`S356peW zS)70*HC;iOl8kgllN-oys;j6G-sK0MSvXk)y!D9U1a%3$d z7Ejcwm4^3ht6H}Mnrw(W6^tjjg)8xOhXNEEURKzp$Q0XMUBveV=b2eF|2TfJadOC! zzMk=L|LJx_((t(Sv)gUuM|*4GGP7GNQh#=TYB)A$g*UPC8`V)2W8#b=h0@iFBZU|i ziPDI-jLK6$t%S_qKq%RL;fcVJ)@dK0IE!>D;I`Q`@`=(;w(M2GJ z3iNdVdWb;?6Z=X{T8gonunQVN_>n^0hKS!b()yibgj`-0yI#)b;0EDk)s6qC_a4^9 z4$YYSkcL;*q_z7TwPajVy3BXwqtf=lYOBYyoln0M|6*lf0Yw3X1mW|W8mpcX`Q41J zCd!RK9vWVPkvJB`rlyEJypQ@~5UeLm{d4c!_i8Rne_VpqqGUz{nkV2K`~Gszd*PE& zsq*TE^b14+oS?3Bky%Tw>h9js;=X$mZZ-Hur2CR?K=KtLb+ zAK)XiLYq%;V}2=Fu~$}K*0z+HmgwES1@=stjvE94*ImWv>7w%27aoF5?9>c(Q&hBi zD!gtx`X)o6W)jr|(4gGrF#yjrm+>}Oxt|>2I%uRD{gp5oysB2)*UfAeHp4(c4gKRCsVSD7xYiLbwE1fv0miu6;4Nndro#KIOv+Od6x`hCWaZ5T zrVM@tyUtJ*M1x4}uX5CrjF{OZElcWWmJcm>7(LSK#8>x6@S4YpiYpGycttMs)aR{c z1zVf#pGW<++gqtz6Cdsur|`Rm9O5LdOmr79pMnr=8dp7h=zVVQ;DOBT z*B7Mn{`x}-%wV?z2JadtgoCbc#1rDUARt97?Z$clDZ{VCLW|}LxalbsbFsHLN!1oD`T$*X#+-zSluKlO5_E}rwaG5IOHjV<@NYwN%~>1KC}Au*JP-LW!0q-vV7 zeDwO~@Hfv*WLYPu_tyMe@;W^i-0LGWJf>^lv%h_+f~b-=x;#su3k&TrsbR0|)-Dmg zj1zE|Ny6`+c--y>55>l_YW?L3Ij_8u5c1?L5bY(HPK`c(%@hJ+%|W(r&kr$ZNXY%Q zctu`U*8T{Dak<^@tJ9yfJ(dg2i0nSRc}C?@x7q$0;{f_}Ja`B#qzDJXaHZq$6wpFD z2U#P5-SE`c1RjWXQPMj;ojN|hvd5H>O=o1EJQ}G=1HBh0!Fm3zOmgq zWkZi0=YLBDdjEdsi8WPCf70%=6Q0Lfu8*MG)aN6Xlz|s#BXi2$A`Pan&oQ+?c zKo0%U?!g)4Ik1T%!3k^OB?KN;n#T18tM%5yK(;8~zPmmYYe=-nvp!-*{ZHTDqRD+M zyaTY`i%J<+WO>SmRT^=&7C+qUu0l=cRSoy`_(PQ$zgqfk?W1Hrm2w|$(r?Q%>nJyD zOUaS7lr+fUk?ND{`}KOYYd#6*G-486(Ko72Y5R>?AvkmW(XVWj={O-$MkkPy+PX@A z)nAoezqqEA{uG`?3Z!{czMpIv>$qYEZa(N$s=2SvALv#&n%$NnG@BcI&};Pc)1?ZfDqeT4$# z?&}LfME|QV@YK-t>~9>!UKnEg|L?n4lr4^?qNXx`+eW-lYJ6cocd2z>1p;u@Y1?hNXq zqhq~qgP7{fGmqGmY%gL|T{Z=#y@bWh4y9uW?}-DapKotqyM#&?b6=BVzX|4(CWwB0 zG~>SY`}6&(scztiJTlBzD%ri)0z82%!e9DT2R7NSKE8tuIk|QcxM4^6r;hxe*Iz7D z7*L+gwiQ#V)NjFu--YZi7N&$JU7L{pW1D>B)K(1)mSlZOCxHnerPBDRh=`%j_bE>8 zMg6rt8-ER&dBN(~7Ou1P@YJHAq@=U_bk;o|-7(y*gsmLVGPSc`%Vf za;qeXg2xwbVwa}TJX_X8Oic>1WH7)l>Ys$L2?AR?@N#nlDnberBxv}}Q(;+wnNgWb zmy&PyLMYay3@k~<1c%Xm=SsjQ5TQ=dVj|}?(dw0wTGg=DXQp0*cOzUI_RkMr?{1}& zTZJVpo!aOCha57Gyu)jt0LmkF0Z+<8eaAj==P9cheQ`ER;a^{(FtD3SSg!zZ zb9dt9q(s2p>Qs5RDD_vL4W4L5$HWVf*J2dt!1Cw@VgLkr7xAgIK{o4(L%Qm>tHggc zx&L8i|4(mlj3IHXEgxSI4_PWI;zbPEYYAsW8*9Py&=kv%qpQ+$scJTS<T10kL z#Ps^TCQ_xeAQv$3k)da`4BWH=(kk6LNQqYQ+kf1|r~a?$2&wTWKc`MDs^ac5ty8DG zPEu~q{`qVtMl;XvSIIB|TXWw~ae{g5#ekqKn&iDhve{ zg>x@WVw%CK8w?AUjv^2NJVAw%g&Ur|ZtCr;oOyBWKjME%<#S z@ZM;898x0^9VSY3{FJfpk(?Qh!sK}B=OGS3 zSR_yq>9j&tlUc}@ZT9tD8jtq0Au3M5Uak-y|A74mgJ|)i=BzP=rX)&Rq$OKk(BAKX zEZDunfS7aS0W|Y)U>2|*<7N^HHL;$1dRw0|Y0_KFb=lU)Rd0 zEAY%my>lP<9$U6zHTMoSzadmpA+e8#nCyFVWDqqr$quz6Cg@7X=g&JQkljFWe)H_! zrBYG(?HAIJA=v9e6?XT5R zkfUvrWzKKl)aVtiod04%)S9;St3|hY=na<+I+r2qkalP)p($KiE!+3Lbj0OdtlKLd z!aG;?+FTT`HH4mC-ln+B6Xb$M(CndRD4#rw1%2_cPf*LJCQ9liDtK~Rd!!F-Pz&e7 zJ_TH29BV4+!p>*lI!(KostNG}&TLzoblR{7WH2E;t6!ke{Mlj~iOLB=H}umde{wAo zRDXH3>^``rBR8|J-fL%yzx=o^!55FX&p_!49TruJ!)}xNxjU7%`_9|KwrdMu*2ItexVc*)@2c`)ma_r^JuotFH ze*2Ymbba>%2r4j#71U|KW)r1eTCMx&v0KOqQ<4G1>8Uje(D4}!v)ltCgT$6l*8uH0w&Albo z%GesoZ1u|aY6T}nfnqUArxOelE$54vL;QdX$tHR{+vV$r83GXx9a1E*11Ta;v%0?t zwqEr4+{^Z9_mbH7|S~=3dHo+mJ zX6PuyRR=N#A@Mr^Vtdvs104+7gEk~#;!5Tm#Nw!v%Bj=o?P>e^*EV zLvi1#)7tAz<4cLS;!7GM+6SF;ErTVUwk&UwZ>&XRzT10wb|O%hSsA)-opd*n$YH5H z^&Zgk4r~bZXmSG24+-xRmnC2hnf+|dQW*FKK=1f51&@mFQr*<{tyDoqleIy+OFsoK zZvpYykA3wh^XpKoV;hUSa&Zia^;>avrIW*L34SleA5eJg8TqP?B+lp0h0$!5fwwv) zNCFF`ZOb)1X$HO5g&35tGl-EabSI&x;0?HFwT|TNUO#!NVjPhb*HA{G&&I@n`~h+7 z)iJpoAR`V)#+6G6vrucUj-fX_lSgKguVpx*qqmxMTY80v(^i=B&h$EBPW`QIoO>Gg zkG+(&#fSTXaO2mc=z(b%7Ccs;A#*(c+_HI+JImIisanE4xYl;QY6XKWDA`TjYRh~E z{jatR5XbsTm_88NHvBS#l@NgmTWT=F2Kt_KZs51v%{SM05zWqgNDt^L5hh0E)2?!^ zu{l*0+@`z5<*mnvF@Z(c^laKDj!ZJ-W23-gEa{&7+GJx$+bm)_0>+e{Sd4aU40^)b z7Q0F_-vF`6FqAXlFa1716u7~twOn>@(m%?ih(Q^mN)=A}`unM<8qH=?7c80v1Yg4+ zj*d-Qf#sh0m4BQx^Ye>X&rpFR-cs6Yn%Qiv;R569_sT7}fRU@0BZN-d%|$`a$yYM8 zfHy4ckR>wYY^2GLvHL`k;*Uy{P8}Jxv&|W;3M7;*^9gpoZ)mur#dnfhS1P<#h6-La z%hw(~5D6^?edK^U+(#$ft*TqJR^7H4J+e0GIvnL!VdB5^rf|)-;_uALkBX4|Mp9ss z%DaGsDh7A+qkJ+J&gXSkcJ+|K0&Gub+=L2AQ=9*aoW)U>%Z=$&tw!jbJL6>&iP#6B zk|+vy!|{7XFIa@13uV^)>qh@Z&Mt9S(^^4N3gcyW#*0_-uCPnv`@K>j zKQ8kD6#|g!_ufL%1p=jqvLVDs02vl1+PA4}{R#p&`z|{cx7Rjvw07@8R8rl%09zzo zW4*d_Qu<3=iK2k=Rdj7atjCNZ zJ-P#igg zLU9y$roWAhF?o&#r5c?L#S-b4j}noPNAd^?NSu4&_~Q~vAQ1F&1q1Da7)u(;D6C>Mp5&D$qfgky8TWh+7h@Q+~j7t0kF){%WEw>?vQ;Y9H+7*7Jaw< z1Qd$}q!e8&`HE{2Mm?X@PCGEjd}L9C37Q2s4FiD05Yi|qBidxXS1A&fck7fwMSPXC?@jz}3AX;4QM-&A&7Se84{~L_sKB5Ho2bRKXIh{1srhHAN_jBg!(8&qTos_nRAjtD!uv1><{sK>E1*^YtGdj{t0WqoTAnRa>B2)GWu5(ct$QteG++z#!*EDIfOYafK3~ z(%`Q9eEtmV@P6&K9){JygtIZ@(eEO}cKG#cg9m)%ENG@8&y{uMZ7|;q z?o50#E*;rL5u!Lh{V7GDhA>m#ChpwW5!8T@s$8I*gbNZCiJuw>!EQKGR>EN; z0iYq<3ww+WoyW;;R!M7M2nhPgP9qd(pwTl|G*?b1bRU}RX>hQvjS%?!>V`~glltH5 z$;h*O-V6bPDYb^j`gbFFw;n?Xs>y|R80OAh%EET`gA6HbLZoxWx}&R>EP>%rrm3a5 zAptzqqDEgkWx3!{1kYJtzERuWG5&aLUZ@qO4{QwB*JWtG@_9E%*qws2mAJf|;OMPPQ#UZiB~rl2KV8v`9k) z3Xgob&88o3QrQ3W;_c=X+eGs~GxVMym}Vn9a-kw> z-J=MD6jC879G(xB48hvGZJtzE*13q2jvNTA>}tf@H1Rj*8_;;Ncba%DTZ*w;uKETM zwKAwtcZlma*|e2}IGMUTbtB?4Wu``~epOhDX35b!M)Kw;4c&xF5ycp*G)=^p-r<40}4xu_Hh!KSaltor4jD=V-mhG%gjl3 zB2xHu=B-sv`RPceEt*E(Cjx#yYW8YE(6F0|o3Fm$ehQPp+`eBOo*Ul)O8agnWP*zr zs(b;f0n3kcw^3YU2bUV1w)L%IWIf++&g|k9oG!RH9fWTyS@vAX)@Wf9cg_a$ z_J6F4_Vxc-m%~7{;+tpK$Jh1~5rv5DEKLaCP^Cyq2T!9ZOt$$9D;|r~JZJQN)H9St z%v&jN2OX3e((K|&MMPTefA!n@88h>A|xYf_fpn~ipXr*HF zB%l=n*5@r_^X*$GaEyujr;Z=?^!NZO3zpbMdU>q!gaZAP0|Jv5Kn~LBerHjc2K&hP z9uQU*DkEZhW+0@rK5GN6%W2ym`rQuzecK#GCLfVLYA+8=!St92!r2MZr*Hb$SDhQ3 zUV9+<^QxWaX0|Z2gRU+zA=Uwb;90Si--BwCvnY^)-+WFL9@Fu7=Av!P52wp z36?gRS>KD;9Q8Yv4>IpI&&G%4&&D$-Iy5#w!mH@|Zsc8+cipTmP-xG4l5ds&+}zs~ zuUFxz1e~yL>kMbdM*O_L)^v0>0%j>H$Z7nmmm4szN9E;m(fe?j=bN-n)m;JfRb{^% zDPJT;Jny{OEL6^yrDoP|!Vhz9A)ND?i<#T z`8^UCO3xQpI=(peg%z#*%tOx!J1*gb{~{6i6#%q}Mk&KUUaLBov~WI!7_y&Ez^?a$Bp6YE- zG$N<2@fN3k5n^Z1NvBaUP~5k33en+V)oGfa$Tw&VqEU)`>tTHvONDq4NF?Ae8GGHk zj$N+!7KK{;T1Y|QWusX5dbOlcYD?>x4C%KzanllZ);sRDh;K_^SEbR3mGBOPKGNw> z)~2U~gW-DXV9j($`c6+bqwp0s3kl!!^OUpz{rf!$S*S6-{)_1`^mC)E#x}M<=0z*f( z+mWe;B?y4vd4loNb+ek<)Iy^8>36VSPMpR1`e)v;M8L_pn&f})QR*0$xXb83WWfBj zZ3lw^YaDM<%xSuZiz^kL0dnVgmwaJTZN_WZSTCG?DklPHLH(U00j!_(JhV+PZAb@nyW;ij)dJOo$?jzBWv$vZs1r zv^xLunrobjt*QHNs|R@`!oJ3*TJD_@W$wNH-u$ohM_K^nV5)w7C^Pt`kkhT!|L@3j zYCFj^DqkzT?pb*L;#Y%w#eqXGj}RN>vcg0n|Lu{onI~Fl#*g64FdAn@7t7y@_I?m_ zN?9XJAf7>Cp-$PA9eAiv0c{|OH~I98@!qYAVlZ)qyr2CO(G3LvbAP!fV?@m{WrJa9%8ga@z$e^1lrvtdg|A ze_L2`onC$vWS7a_$CAg{x5op`^iD?HdnQ&Tbbny1U$fCVB!n? zC)gIp2YjKav4hAkpPMr6@YZW+Me;m>S)q=P0l4)66D*f|&<#fAM-c+GNY_~3HpUsM zH=xfVj)nL1;ju0BErE6duo#D}lm}#c8kYkmd`!5SE3lDF`cTmZ{EQVIJB;E>2n+<670Nym`7|0eDoH=qkv_LlZm#oZJIY5bha|y zhg9=Cd`~0BhXDo7vztI4XmssI2;)7%|HIgKhhyEh|6lfHU&tnV6B>31nUy9gnJKa< zBYTsXGKvTd-R31Od(SAe>`hem-u%uF-S_ty-{W_D|9GCK<9_ari_i7`ywCG|t#j3D z(JZH^>k;#gWLH0Kk$bT@f~$7zJxE%sXx`MtjlX_crl@Jx2lKiKkQL+zr1@4Z&%W%} zn;wJ3iUlGDC7SZ#Zg4h$PED+fTE&T%^fYh(R8N^>*~Ua+(9hA|s!l)f!~p84~X*+3yI794%gUpDj1T} zSOd)V_jb*jneb{^#teR0ZqKl`E?&h3SAYgv?#_(540e_-o(#`lYN3a7KUhg1j*Qcn zaL&cYt@bb-#FpuVN{kpn1-z2WW6q+Nwj@|=SS9kS)qRQ}v&~JhK`0d^&63}^<)zsv z9@8jW``B0+I$NZc;LlXo_wFWi#n* zh2n5v%4GZ6PMsxed%6wq4pIHTq%QqRyh$t5&SoD~9zzM;<$-zZhPl{Nn)goUATDGw zEhavcOu^X82EJ7HZc@*c&l)_cQbYKAl7>h@RqN~0oVBb}LZxwJr+Eg^>!Bm3LZyla zoOJRV8E!Ugjd+B`>^F4jrrXchM1U0;3+B`2KGlm(rOFr+8y_0t*3B3e2@~ZZ&*K6J zgLw|)8+uvqDhliqzV5i?)}8ymzX`GN45^|S>{wSS)tF8U$+;ZMRLzu{Z0HK|7R-Y= zbcDTg%@h%PRL0L3qJME7yiot!6XG!fxXJ`5vX&EM%8I_5OsP_~H*)Xq5@73COeAP! zIZ-{EwLMRXv#D^av7wj3zZYf?Wb^S@yf(KJ8rdkrIu694#aT5`T8KfDRw-4E>-HC% z3gCib@OFk@^wgw17Fz=GJi!lQ7rtH5{lQ$8Mz4%AVyZgxSzz|aQs6?RGTGye9xZik z!bp`>cSqjZcc&($)lqo7H`bkVc^%V&7|5pb*)kNCRW0AWT4&d3hz5zKT;41Qjth5v zdC%{!b{jjNn!*!*42*Ar0&Ze)f$`W=T4i4j73=XxX)5HX4d`*f(SX1ixW5Yk+Xc-% zFI7dxtcvm8v9+8Xz%`m$>4r)SHgD7*`p?ybpgToF!;_%SM~d(?CDSo&Wx!qiMH_w%Jf9$x5Tvc!3-h-Id2nxj$! z4)qra-&TqH`XXs4G7zD#6!C5*d`tAQAWocOHB?e-mv4%Iv@6Hb^vp&c`LPntm8T95 z&>i<7WFw@5#CXIq8- zYu83OBAk3DSkBbMS)v)P@F{qDFkf1B;1vtPW21VNp*bD16!^of;Fsfn0YCt8pq^zGNx4N!iTf0r=a;2&R z2ei8bmUiD|e(1F4y!e{Ye9iW0(>V9}Np>$}&MbQ{%>Y;hdoBFkc#&%?E4>ecl@@9U zu$^^OPx#N1G2Sr^7_iKUth1-9LtUxvTsP$cTP@FuLUR`TQq&5l4kmD2R8a6Xs>h6j=xTyB1l1fn|jtje($nnuGvV&>(W%6ndnkJwJ8`!uC9f<36;cM z3Q~CRoWRWu%z`Af2M*EeNZg#A&O--LW|Cy%`h+g-|2n}G%YnSO;kLk6tEW>o_r_eU zi~9lJ58&|L;L=aW^SqLe`rt!dfQX_uY_C|-FphorD=YU#XFY4QO;z|8PimU8H9y!P zI*GpCUXQ$ry~XEeb(S1A`i0NlW?0Hkt&v;kjtAu}kM_JFsi%~-h~UqqN@wumUUM-1 z?|`@%97UFz7|1b%2r0;2Dxd&VN#obi3X5my+RCcrTnfsWgVk7`rX*T(u{yc*Ah2G@+yu; zTrio|Mp@l}xs!lbzsS7)bt?%MfATi1=fq=;x?#sBb)h~$5H|NYqy@K_KPIFAhnbI$ z15}%kN4)AjYnRZur!_5wYlJ`529SiT{&L1{Q3ZO8G&P1WuR7>^0P^j0bJ=uVhlwu) zB++aaEf!&LD8*yM7cpZdH~$Uk1qNNN^*SoD%a_^{FNJ8OXd7E51iptxTDLZ?h?m24 z`P^yceNsHtTO2Eoor7^)Qwu*oXDmmQ{YXy5Q70z_)$}Bukd|tQ3!@X5#7)-YbP|s! zEB%^3)on-@6)pMJF~BD5?{mpd${7_Dh_vOLXe5Jei&0q(1gM9KA5s`vJj9_drKbHn}57cT4ZUboIEQaMAw%8%o$W54N0INJC~bb_&#%FFr@W_;(U{FWM49`W$#`9RACe&jIYH65 zOH|@JX8z>Fo;FLIdGEjw0AD1X7t$#7;NkOBZV$xfK$`ra~D> zrAK(L9_O%X_5?h7YEX?$R$U<3K_z7|E-722J|KwoZFm6n;Q4sPPU-b>-PnYFXX#Iy zzxr@q%8u*yGb_)Q!!g%!lp0T0-(7h-sog;^TSmgv-SzR=2~|d&YQ=H>6|Ks&cp^-$ zMwD*O!q^Gj^Nktu9Es9-ieCSAtdXF~LMVhl-^Ti}J3${9?Im5la}-H9`ADS}RmEG* z_xZj}DJa<$*XHVnb;K+07w*Cv`Y23rVkCc4v*n7ls-vX6bzY^*ZE|G;&EFveT)VeC z0zHbk32~=X%u2nu8~{2M!R{?7-mR3ysFR5mHp$-(VRzB=l#WGxfe*h-e39bP){bQC zHbFq%s^`L`TvP#EyNx(=%eDH`rs%ct$NjU0C2RJnT4SFO#KWMA*5aG4j9syGG0NZX z3%~bSt)h|1334W;o}7D>S}DIXVmCEUOw#bEH?%sO;POnMKf$T}o~X&VIC9yK_YzLQ zjBt6BoTOy8$m%P<%M*)~i|uFP@zEb#YzKLduY>RLMy@)6W%ucqvF)xpwC6XsZGUB2 zfJxhDQ%8#{?e$kuu05GQN`-^#4vBz_KgiA0G{yXCdgu@nLXbylBQxjme1L(D|D2}h zTdWap#r7vK@f5$tLsH&E!{q87=~%X}%i=Bw)Z}y6VE0_*FI_eyWYlc0;bo;A&B>Pj zfF!!Z>8SD`r873L5M%oOwyJ!CcKFAM2TUn3U{v2nOb(R!CMCp%k{A zaLRDHLBT2|ihB{L@Qo+p3ygBCbTm6O>2+r8EjE= z&KG#rcL<4!UsTCINDNVhi#)@&s;1`CH(Td{2i>>ohX>huOUDggcTgoO;fCi7=;f3g ziB>vv`$?*O0y7JUCjzJyWjvWA1$Z+HT4kFX%Ot<#=Clz|iVN1+Q*tOO7yv|`VcY4W ziM!u}1xljm%)xc>>0r)4Zi_b{t3~v{Y=OGP^R{m421$5ENA)!GIU7n>6FIL|dac(I z2j+aRiBNN!T2e3n@?a>pE$*({Eq&1kB3m<`_QOoE2tq_;wKoX;#}k|A+qK5-@pEf)4`p zvWoCWC7=mzvM}BfRf?GZCT^@HD)Pw8Q5&Vz5f4g+^MM2GS}ynsCwo$E>*7PoTG)>o zPJdDwmHg60ai4NFPPc>+nz6nz=$Xxi1l*pCG@covTnb&8A67ai(LOeyf*;X{NGd9Q zkZ#Of>gvp2QXHh=A=hgn*rS6!_h{PzFE|2)E1Fb5u|))tcWBtI{`}0d!iyaerB!|o zuM-R21y4moMA22@sCvOHA+wJw5@n|U(-j7blN2{&S?h47_2Rw5Ihax3GXu86X5nH^ z)lxOVflHL*BOp8_CnDN_fYu-0w!T>;Suou%w8Xm}r4QtHu6C^5awg3|eW~Gc!sbh-+Xdet$gv2bcFlcNg;XWU-enw{W2S0Yuwplq`w&>&x}$gxr) zSav*{%;Dv&^@VdR{UBdp@+cX*bXgY;p_fZvmeYyf0=8?*Mz3^=qNcr6)e3W}67Z9?i`MDL4yp%?Cx&m^O1n?ZUe>jteBd2j~zU!jzh ziV(XYp%D^986A{BE@fm>v$xGU&i|a;rH)sgMJ2NBgi2DV@>2*QfaKs?czxL*+3vH8i0@0M_`hya1pSsuK$+1ck6)hjr5VCqc{H(u zihLG*(wyIqj`TM<-<{%YH56Ahx%+K0K5kbaR7~5mK^Ln)noa9q;gEEHRfm-GW0tKk zzGm_#G2ao>2FWbqC$uR7lILmfhb~BN_G+jE#CvQy9H>t_JwdY%2QLdG80m@Ze7>*l zf~aL-X~FhokH?p_q@PkjYM3EX1oBW=#HXeXMC<2XO*~&UuVoQ)1os=};i!fq4Pl5u z;!cPP1$I0`Y}jbT`RxmrRys+Hqv2)O-{w5`cOM@-gUiGiS&2H8tChSagf5bUoB{>A zp^KCs6+P?aH`y^_kFadinAY-HJrvh^P|nR3w_9kO9o%znGCc)Sg$a~b8i}SmUUab9 zm2hQuCvFO!x>Ir7A>+LTG7^ludUAm*vRsM;4M_>3T&DJ|ymLw`ovQVolHZD@9pI88 z7`|vcjgJm%iEWRbR0ifh%$$RbWv6z!_%*#E+b$!^zg}Y4K6pBhdV!vMh*QH0M4#9z zXD!rfds2e~-QqEZ2d^<sXEEOSvjiPn0;e^$khlAg%$wB>rZjCt{62|>y) zWSpLyedG9~d_R2kqqbix#x0+@-tMW~?eb2NF1XcBKp~FEKWxw_7fx1WvHh^3i!%|R zCKiR2d_gs_sLPO(x^x}paazSg0p(Q)I7TSwA_!?X@*b1~D>hc3VR~tEj7q0M$OvSl z{<4yoQ`wa{w*9y?N=!8Eo`qk&my+Cg#0eEie3SPDE&@(rCIp2k+)xD4vPO8K6=;|7 z-PZ?Q>l^Fr_mh{P_4u8yzJq^qUml6jyTQmE97fAPL zaw?{b`#R4G|62)SRk-~}yh8x=ept{ivG?{2VBi(Z0|qv-lL20GoR@oMwbY%LvP()E zbn4QQH#xP+RNqPV=Nry^B}t*fc|$;sSE01K&k#m+hH`*Wd1v{A7N2-mNC1_bU|-XN zk!Ic7d$#*2fEo-y%%O`7sJl%8?TrN+QDY!Ae7}e7H1yT!2DWhJH$pGVd-`T9%Kt54 z)5GoA2#o1I|MSQq3t0pzGC)G%oJ2cUo3*y}m}XAtnAoUU$)1_TlaM(4G%qyyvi+MH3|6ppr=SwgZI}2S{i}7*D8*>niI%o;4 zxzzR$hH@A?c&%+{3}9)58CfM<65bfE*YpNCcA&a-omlUJeoVeP!+3Law5`Sr6Vxsw zt6)N#FzvWi+lbf5G4*4_f#k)JFRf|AYAUwEV(7I8N;Dx5G1o;FZTE;0Xx09fbI5I*Urh#R}B34#}& zW_>T&6qLHt&R86&=zI<@4ZDF^qs;#SGJ*s5fN((HjAHuR^GOUg1t0i7OTmLqPVMS^ zao?L^n!wq5+I6N!(#E+dg4tAlZEIxGPM=T{^-Nj{CJ2Og*Se3d$ue61xq9yae>ll; z&^7*RS%@XX%xLNv_5f1gkMIcREKr{Rv{hU=ph{}_UTADz0CbqhRvY{FKw{BDBzaNhxb9) z^5bYexAzjdua}k>xLvM^^jrlE96}gmOD99caW@xLqo}BQ6xtTIig9enw?AV?SbdH* zgpxHr>ocl6#}HD2+$SDmrD8+7{e5_F{kyw2bV)U~E>TpWEY{1q_jYHw;hSGLXYoWNWg!dRv*=$sDs-5xc zt(cQ8sS2TQF1&aSABRB5U$`M#uYsChk+DK@>vMx`5Il55+qVi&bqmT!yZ!%Mnn&;m z@#^?if<2Y!y4W4@S^bJCO}lHy>yHWZYKNVA^F)J3tA;Z=hyJK~6dUtgfW$SRU!!K| zddhe5FW0Q2O6SU^xg{rq7>z>11R>ays{aE1+Id!|X^3lWZ?hls@Xap!{nse=3FJPreKa0G?Q_9JVtZz=bfN4Rp*nWuyUZ%385x7-RE^~(7d4J*>fBs5e5=7ntq^&DrjzRlc<9Of_NxIqW}Z2{D9$U?+j1G7-uX6*}YS=G4=94U_bYUM2+~l|*0v z!B9^&Jzhjuzg(e}f2H)eH`U`Ox{9)sXZ>yM5mMp1K%B2f_3!Ul`n*w{!)ET%p?3;) zmfAFCIg`&psEzpZu=5`;@Y2t?L55BEK_9n;&T&DRK6?K@$*(I)y7x`jS!(~YW zPd)@-y8g-VYyf$}@Dt^mQNRsepX+uX8GF$G%ZF=(RJlZ;jsZJAS|1`nMo9H~jl9H- zS-|3_h9qXW1NZAmiThI_#>@`E_PNBzqNMc?g`UcDP&GD1xMF5MQ}0=v^EJ0_zNh5> zD{H&bfJyQwMG2aUNrLnK?s&z0X_qq&1*h~qADVM_Yc-sCi-sV7(O}VE@KhBx zxq|&zt<1h1WbtC>?G*SCZQTfBW*Ck{V!#u3{fNpYZn~JHRw=9488fiZxmbTaFC7_n za%Xl%!_D4+I+k3#LP9bml*rvPN1AlEUR{Oi7DM$mH%a(+@?IOUeD;2{gtq?>OwWj? zhv0Aa6b00Kxe7wAY+AaiWN=nHU8J@VvSlht55G7OV30vVk_ z6lD*z;s%9mD$mUq#QB9WDUU4qy>pF1K$ajvq5Gp>n2m;UXX{qEOJr=;JWLdl9kFJK z@~(DBa<4>fX*GvN-H7wYFMV3Pz9+>GM)Pl|LsCTh$n*32wS{@cIyP61G`j!!alwPiYMMg1)F)R3Y4K-=^(CHj z`0OlRawo*Z#`QZ~|E7WFYB(~6Z^W?E4_NyM1iVDo-JvH)%UMwS1ra~_h;d7Pw(v?P zgmp@=G4yAD!WYNHW|S*p=TC0uCrX&AH~{ib0!jq^o?$3UCv27h=RcOHS&3Olk%i_a zeGe1WHhKIV{l8LZhgdyr?eu%z%8uUipUN7Oufo4uI_cs2~ohm#2bV^2omn zn?>MYP=9^s*Rrj8ARPTaeZ+2lE&1)Vo}xrG_z{S(`v3G1USHPnAFqc9>Ot7{FX)pq zuN|I=d_I$|?CZ59j^irc;KwgDwq}Jx>eztz-`2A_4R*jxTMHLBGcskD8WX0u|3SIa z4d#&wT7;}WF-TphRG!%7dK7mBh7dRs_vrsL2M=~&0|XV4@0y<%E`~E$fGqPV+&8Hi zHo*P|OO1n?M!?*8_x`aOXz=-p&tjef@&5&Karqvt!cUrR02T9#%vx!t{+QQ!*cxMV zW9_Gxjl}G9H|_isTl5+;OA5hCTi=9E0?(c2ad)M7_*MIuEex~=m z`SL?R!Y6TPm9NlGA~FXx><}_ISR>U2x?i}czeDXqR??s;VJ7!=Q85u4hxIG_jD>cC za=%4JU)>;^VJjv)u$n*G@_^`@NpD-DSHJ3o-X_zE7PN35q@W`91+L1sc&RJ5Y(T zd?i`Cg^rZvKo=4HoF1tSsNb@RPN+wGqearN_hcY%xu(>7{n^UM?WzG6X?xrSz2+Lf zeDhq}-*{2fT2t?QAo_p^X|sI9gHKKw>A<~&)Yvey)7XB$Z6fQOAz=gOqH8>R#ie^} z-4gw#%`WAH`_Gpzm?c3n1>g;l8REVOJ6H?bNcJb!gyB-U9fWWv2JjCvwsQ`?`&co^ zODZ0Ltsqp$q||A*0?q;=#8JKnx#<(yN16~LXXm8qw-goRj2nGXJkx%+za5B7W_4m= zLYx;|&Dh<};d{Mj{(@wm1Fl|pBcJnE>GaeqttWu9A-R5?kPqLJ$i{fXGHt}4{FvsB zCiVwL3Y{~t*JL^Eip=dQ zZ<|Oi?W|RCB`4NUiJLt@fXCH0vZMS0KttSw-E{S|EBvgU);bRl7A(4F`@>&&h+T_J zI1tW3A(oyinbiy9APp+1mCFgJ_Bknr6+4VYXo7kPMC3B)3W2u%B9kvz+EaHuwSsO1 zEL{;N5ud`C=1tKHP16mB%=W>Jm*bC-%Z+Aw^(6nh-p#WXGCfS*j^J&msIJ?C1v9PR z@A(cABT|+FEK7fkjtq@J|9W?T{~#0RkLd3<^056VPtf?St}B2kg7mH0F09&V#$j28 z&A`h0S!%7egbh7=JF?Yld+n306}o)FJEZI9UZ*Pc*=qCTN%c?7tYi3v($A1k{jI^^ zNT+`GCzCdaHyVeG%S%$G#!|1C{iC)kzbHZ`b^MencKip&w2A?sJsEO(SIu)hGnmbb zhiLTNcm|#a7>oa6DzxrC*4HlSFnhckB%R?nM~ZB}0W!{*<-q0e&GBRi#;7-k3vPGK z@KdmJ$J#7-I^ZXhSs#$lP#vlUln=B{?AfAbzu^X4Z1~p6^N07Tf-y$r;3SzfBFnIZ5!h5x;toX%OW_ zJC1DBmv2)6Inx|@D)5^+XUGkdu(!M(^%h8ex~(LAuSVmPUGPq@iSjvB66=XKsRxXG zo5E8$VjLyo4RVR8IoF>dKhlk1Gs?X}cE?8M9@%x9@?;Ni?CX@|d@Jp~{7>bIJ~vIo zJx_hf#vAzQKh9_BLp4)efI@v$ZF1;Q=>Z2-i3h*GbzV@jGjtk-lU9~?t2O?0RU~?h zoKsDqR()#8>0F`&S788x$6;}q%divatPAqTH=C3rS`(B=434feW2VCS+coeVunl)!}=7h!hDSV+yU2YVMOpg6&rnlVks|f7)HbJ$GqJ%q(Wo`)2%hv-{1Lxdn)DT{5Ved3dQT+ zv|}G^i-{lD9mCnNlyz$OI;d8m%|1j53t4#p;E;|_+R%N|zS3Zm_l}V7$<@t^Ki%jF zQmCc6o8cv880r~pqqKEODJ3D5J>fQDz*VPPmZFXlnqoq%Qw&m`XdH>4%;zcd0R}Ya;A^9=>FH# zy(15;A=_jBLtINU(wx5UUi4OeMSIsCOev_#i$(uA1tNb2 zh%5jMkUkG2(tqDA$Jv}(xUiWgK=}Tl?bj%QAAV9&k*b-l`DbxK4U{aPJm%XxOT1WPcxfSH>vv*ZezenEaxx=Oa)#qIm^O_=gr@(y&K1E z6R)0SxX#>VJ$visxD@ZsD*dS%{!^D;WytT~G*d*m}{m_`6? zrPz;l8(DJg@y6P(W3`rihJ9~oqZXs_WR*l^h;fllswV89X}HA9iZ23q$!XeK*V-h8 zng02WPyCr@vYLlE{7c_n{sG75AHRE-wi!}t)A9v-b z1HB5yYZk2iXssyovi*zmA3UM>;JZVVOR>qalf;@LWap8kmxGXkyHstbGUtI5{48Zy zuoEpxdviSZ$In=8I{y~Z<46qlMiPOo1abGVV7G868mIf>pSrP^%t~0D`{vyLD}mbM zT$;G=$v4#Jy%ets`;Mp=Ll}YjgF(ss($hBW)E*H?sIQ15_1a|eB+~}5!#?uHycCap ze9`BCYaTEA*(d&BuJ@t|bnIcjA7jERxDCfAzPz*ex5qcKyI8%nhiUu^362H40@7_@ zRzsH132~q?RVI+KB7SnKl0OpVZ*b-|?Jym|_M3hma0nER4&6mp2F-Q`ZF4VCZ|V-X zvPl)j3*OT@(B0%sYebEPoF0<7|#ZBmc>TDY(Gb;L2vR+%dT|GVs3i3=$VM5YNew8*aV^yaf!Xu-*$1#Ul7m)#05~h76)$coxgg zytlRT>p;Qg9bN_N_dZLTaOJ1R&%caT+{(N+ANa%HI^3aDG}eEAqgl!6=A_@S5e!Tt zU@8`sB|+tRL>P)$Pz7!RX@%TrOMaCWh}JjK6l8>FmwjIOK@0Gm$EFI6bmrNvS(Vi@k?s)750lrX7;lQHd<0{W_N0c7W8Wcej>83cmHf` zgfE7yvNJfXQ7$~ZmvWMyklNa0DkIFRG{&f_9B-?+5bI^xx(wm4q4dja?#c#820eB* zE4x5@OtnQ(f{dNO!&&?R1sN%4s6gXntO6g-C)oq2P}A&lY0e$Fgd??<(=mcodR&Ks zIe-%W;0ND9DFOYerY)-e+kpXoCVz^nA+bTF6d`TrUqoY$RwONZx2!W0r`(XUC-=jY zxnzqf77nvT94KL%39rZeh_;>^D6NGxdMw_$rR(E7Q8MYDxr_+Y-u?YH^x%2n5%ym- zPo;)UI>AWLP2zGFSufm|F%tuQuSSqk)Re2o+1Xt?BaeSih||nU2c3iQBqq+f}oRQ^bL1`jo=hC2#lBZ&11E z80eCvX69wTS*(@0K0803$A(9UQR=KNRiT$qk3GfE>vZe3}(gm?_cy?C8zMD(K*_xx?0gaOpF&ZD~c7F^*lM__^^=`j< zT6DAMR?O;V%$gfLKI!r;FBR?0nt(dnkYf|isBiL5n~#ulGIcnYmf9 z%1#}nR#5O6s1FUfl2hkn^0%L_Vj|n9w()L?@S{^7cGqkejlySL`xHwuJA}e4)UZY} zcQ#^1hEpq&-12gX{ycj|CQpOc*2D8Hlv+JM=q|``btDFyY4bj@INLfV5QvIUtymWj z!_PVeodT0S_?7CNpE%N#580&x(0h*a7vu?SP}Xxx_~1R~{6_YtarW~p)Z?A3oCMOR z&GtMoK1>>^M~_jsG~Ah*%L22TWJ=&z&tp++#__vBDH@0hQ#51_ruHX^=LYf0ji1LD z1xE6UR&n?>#7>c|=_SNe^1;}B&_`25z?wDMqts%fug_y{2)l8XZo`J3=PZU_?p>6uok+wfCv6gmt;y;9!KQ}J zR~Mzw5gTkVhKEU1r+QP@jUnj!(s~dlFn7q*Z!zL-7i6ZAz(~ie92?S%Bs>fn@6Kvz zb$&g_6psf%eW~3lkZD8eNW~R{mHsa&um6T3 zdkDV-)tQj`ce7cNf#+@7OXe^r*9~Aj{!^Az`h{FGS*-W^Tnk zWO|D(mIv;?GwZaKA9u>|vFq|&S%L(TS4W>kFa83XiFWo)cnl|x6?Y&s*-4X2j9e2) zUSk_}i!qNy;f&#+O4#RLNz>IFsY4{&4{VR?ZE3r6OG$Kr0O9?JftaD0tDe&M*^V7W zSXgQ*_~VtLoCL>A>XKT=$S_3kXS`aB(!^)8)|02R8Uv>#)%Xl!e?ljsc!SKttHg8H zsw|OB;Pk7WHRJV-^+)HDskQdPb$T2&b(i5gxbq?U8Iq)Gc#3ph2ZC4}ppZV`UA1i)9;VCIwVAS~{7a5SW z&2yT{g$`3W)s!7H5hE4*<-?rhPZ9lX{t(jOXIHNExz8s}j4V)|JrFLcAlVSLkczFM zYroHK2ks8Es&@bScL*c(DkgOzeck5%K{3Z<;t3mP_RcN4Qg`BWLvgz$>w)C_h4HKc zW`V{{proq$?9D7C0K z2f9YSu%Ow~27gX5w-5=sdl(i`GPCR=X+7!l?jTRNX@fmGv>nIOvJ(&CTsPw(lKzeIdz znXGAf%wryWw&{X5W5h!UvT!lrA~tOe-WuCyBAuV%~dwUW6EnN=sb06@EDNyyOI?lVvXe zlxBaPRBXHp-z)g1oiZC{;6?3&|7;Ou-ORc4Ep|QamP;>R34pHt2oIufezcWFnRE1< z#7hj-1WXSRKN$S7qt4#0xfy6(!!j(XeLbL*UYXPDGz?xU^+$|I8;pu)shN-S{=Nxe zN~Wo3j5PYneDhlekb}X^^_Al9W1iwr z?iMpWzj&PM2AsW1oFf-IqY%v;@}{4pa?9r8-B{l?Q=4!D7-6ZRt>B0PETE@5Bgm9)uoOii>G~PK6F)B-_ z^v2akd zsdFP$?qJlf9Dd|*+@aOzO7uHyGxYxf!)s=VjECQGUf%gxi7?j-pC#(n5vYBAd zIf+DJQ=WT%Qb-1lw5qv#tR$L8A=v(IiI4^g+t20#sG8+933YLSi!z3wSC*`=rf129 z{JqvkJXCth*Wn7vK(?#-BK@Xtz*Km@beP{@mE=?U)?QOnB23fokP`d}Eyv|rgD0)1 ztus+n6<5_Gm}n4ySE^YLB@5e}%=$-=!8nD7_qJ}C2A30;Ua#DaSC45(&~oCP3YD*i z=x{8%re(X=2x2`w{S_T{;aC(59l=~1WTYHaf#eDZtmz?-r0|gsO}Ew}afgp;SHh=g zkBSUTBg+RamblMgn`u)ewUh^bf)~WC!`uc@?j11g_UQG&_?@W3c2M~Y%%>;+wjKgy z_%Dyj7O5vEE1nb%RPCDSjYxQJ~-YQY=0sDwlx5GFwYB>=9pcwnO4{q7);}qAzk+BaSDhAGq@f}lYfz2 z!Ht-TEs?P~WwT)U?uXS2Jvk6Y`+K+S+5hT2JtWTmULpVI+M=^g|*x33De01@&1@Q{lwvtRqnDA@?8;PCZ8%C(`(>NrYH4YTtJds z&C?pd$o3PVL>V73NEOEM4IQgO`zMf=p6P;$QL%onMP`EXOU2=llr}>|3#q4j9yZ+Ir2j6M(4CUkS5|DI@Y2w5C#V22Bt9a6qt!k8h8 z1S~X8rZWB9b6nysDvIUY;lla4^E7=Q)@&C>YO!U|qA;x^ zyNg%T;J+`W>dO6E_ehc+Qpty~G#{p{^Be63gOc1rd0FKk!P_5?F6y$cgXH# zYwX(xUfXuR;oLUl&EAN~Ee`qA6+Onb>e&WMB%Z82&IY9K)Ff1@T!Vq(K zY6nRCfObF3Gy9LHZr&6T#*CGGYF>e?+zx;q?S#V7E)&XVNEMZMN|(up7w8zHme8q# zET7M|MZgHleWoA!2Btxl{lu&`7?x?^nK&N$L$iQ_EpJPRs?7bxkpR%U=_v>g7_38{ zY0rbem$2V(`is6(`GQd!+W@d+?xs1(D12m#J-bJpMelh1PPt1C3A*_sbMNNhEH!7W zXz_r;c&>u-^TYKUnEyS1;Se{H1D*)3cNJ&9YkPZ}`k`Qy(nC^~)#ts7U=LM8u}YM# ziq|GrfsLDJGtAfAGph0UXzrjFBqiWSIFbX6BokARtcWw2BIx}e&E zQHRvFw>=RiDW9G8hBaVklt^A}Vu_lpz$3Wk^hY-glU9-xLHS}gYFIi<`s1wkvwL0| zAEW>4=&L+L6bXnl;hEeqn=AP1Rz}IA&<{FQlbt6rHi3WtAU5Mae<4>ky)iJ;FS*aV zM^!Mg18ZtJN3lJmF9LY({W{mt@1xPCFjG^5gy4O}`n3ugrYEQOpR1toq(aClex`?W z*K$(suyNK0Q-%kvJJ|p|umIiqWF);`9ZMDauWkeiU&e>+1<3W6$ie?>;N>Tv8cy1a zhAJY7kdeJkU^S#30_S6;vGj?<(({i3fXqLJ3UN{2A6)RCHv6teUXe&E9>2H1rToz_ z?bnD8q~aaM{6NLMO-doopGVldXnbWM#S&#ySkwd#76<%{{>F+_S8S(rEv@kfpWhZ;{dJ zV8q^jm}gX3w_X8*n9|11atB>1d7!w8+lV_M#I-V4o}llaR7U55m@2rxx0r+W(W_Bp z(EJu$$?u65co&mSJbW1hT2x!>^Bfg0vh&rSTeMaEnT1SCh=|Fc>gw?IBa>T=J5S~A z+A@g_Nxm~~FMloW%UL1;38Iy!Sf=3#UcH~K(4Pk^>w;`FmnXzNnYuew^kDgeUYXfx zdAC$XNsGJ6?hR?=ts~u;V3XA>o4APoq7P zF3qodk2Q`mm%AWaDhA?z`(4w`RjTkMN3Jo%+>G4&fv{V`8JvEMl-KZ(O{Ep|2?+N6 zQJ(Qh$ro*rAPaJL%B6C9L$M}}qwc)(W!}JE`y){TjzpQ`$J<2dAZYPocX+4Z;Zr^% z7{!bCilKI$qr+-_XTT!iRyyGitH->)XqD3cI`3k5FsFJwNh!AKOI2`pN(`mepFo1f z)~z4Z{x%&b|8;`+7^}Ws3&Wv)=3uY%b>D08R)iEt0{A5JE`a7y4R?Hy<}ddHtSW(H zZfvx(WTv+A`4rDp0PB!G4&8VOj0dByeM2nUY^euXlWynPC7{+71;>ukTSnKT5-c5c)w zhB9w~{c{4>V5+KCdK`2Sraj`nsX!*P0f($^*bB4$?YkHJN(iCrsBOEQ%RU)Z4eJ;d zdfca5O((SKpeWFNlI6Yn?ZEh|_@mH%D#2YiP&A5l_f>U606XL&$lTR(G_K9Ol)NrFa}h9iX-PGmf{Z;YWg zED0oA_KsuSYK00OL-e25)Oixd;~!F;LnZME++(r+!xFbQMC93}fsO36oFgzV7pedK z9Rc2mX>T$veQ6ffx9j57S}ms27Sb}vw{W1D%;=O>U&41o+^hFK)`Q%EHLmx-g4Iqi zj-5pU6m z)F5si2SfZvTbhDDilBo{s^({6bw%uEU|@GoCulk!o473MANqR@S)Pk(*wM?marQ@M zeH~u69t>)v9k!L=yFQY05S6^u_CE8*I!W3O7_JHU4y^yz;g1%XM0gX)&h4bLvgror zm&A};rl}nqN!4E=J?A;G8$-!=&c>G3D;(J;&kI{?X_Bv*)`rdF%wGx&1m~FlGE3#R z4M4I$hsYSpPk&IhmxZWw!yMw1At-;YZ}Z*ithPs>jPbAGHTNWkXvO1eI__Bq!V^i86y|Mk=&Nd4q3j4MZM6DLi(p+XcZN;HRu}UfegTeE7pQq$|U}deB9& zC($|tgli3iLUot@ochH1eV=*^%#hs1jt9T}gh-D16(M)r@RPd?WWc4*Hl#BaK%aIf zw6MLHJCg4tc*CpG@cnVR(y`Lqe3henkj?0mk8^Vj#0r{?i#3~#e`0eB!}kCCDr@pbCZ)AP1ql^|XRund%)X~4`oHf11$CL5;AKj`(K%G@ z$Xr15nVZ4U>LHV~$_sKxUN{;5fst{vM`*_b$OsfS_FVG@Ji8T441IJxC7tfCrsa^p?1D*V6x-VKMGm!Px`-9;A?`4z%0wO7C!K($TB1}P2dPe zo71;nL<>bIQhBPSz#e97nfI_wsK5qj7^iS2eXD0(>VgbRM$$X%%Ef)3-s3nzC%iMh z7VWdc0|@{>*ow6YV-T-#UliW?mOp~&gN84X$jt9_G-AbRuzn3XBdn8x>aEg3m~F1y zv_r&0%ohM-Lt?N<+C<-kE<6jZ zyJ^w|O=ZCXb^Z#@f#zRO7VE0|w!ks=m)FH}nS$#j*9r8oE?|$m4H1rEIA_s+xe|@0 z4i?ZMQGbc+4M5@?4UQ=2ZbPEZL}6v_CFT@+y^?iUQ-9Gh4|bcoZ0wZ5)L@=Y@M;G^ zvbW)A-~oSPZo{T<7r~tpHOP%b5G*U31Ifqv?S=LS?*L#eRtgx$sgKX-hNQjrrj7So zUlqh>uc>wB zTV8M{9>eW)`BbCm1*3GjE+4&YDK<3Ab(5%<_&e+4;Xb@6+ z^Q$2b-ujLem*FeoWv<3A3qd|GlRU|k(J~~eq6H55$heczRG@uEV!${c;UtCC^ zH`LFa7nPd0S;Yt4v&BDeF;g}nA7hZx6vkX(h&rgIwOz#@Pb>HCr{{4Zveci1d`B!y zmLJNP-5<4(CUw&?pusQrE1uCrudQeJ$(H(lf1wqf$Xy~bm6(lwuI*R4ylSr1oA_wK z@9;SBZ#xdOf?~JEv7g5CFN>92*9~>`zk{$nfA%=yZrA%>Je~jh2*H(Dw~;4?oS-+o znR|x-2!;}I^A*jqqpZ-GQV4-8_Wbt*WNRxhiSJTqR2u(0QVk)R8UZu=91l{1lj^9& z5BPa+n6?8+>FVaiLemtd*P0`k=}!EV(?&gWoj3X1mmYqM#a2Mt()km?HqOhs-HVaH zS^Wr6ds~9hL!m_@onhO(PslQqmF#;T{`ECyM-fQL3SlTW5<(ubWUz}cYsOs26jZFq z)X{vcVxly6HlC4~qavbowljFy0gB}X4~Df0E-M-3lO~1}vdoH}ZXXh;*JMG^?;sk; zuu|t)o(uFUX=^&4@>IK;Bcu6?*|)Hh zwsZ7qLjN{b#?Y4(Q^BSJO9%-`c}y(H62RJ#^=dlQLq6?jH!L?&Fq;7gy0Y$jIg{@r zW{SlqL(u)DmuVSsTP;A2QcyZYdK3qPHK44NFh;L@f2^{4SW;P{oz9|4fbj|e6TB-kkHAjI*mg;|TOJDvA(gmM#IM6tNLmG>UYifQ2C4C@tOJxNy7ozVG*WzW4pHIo!vgu$b4p z<{aZ3XEY4B7(6$g>gn)V1f?1s6J3if&c^+|#R`DPA(=md3mPPyA(GfEyyyHp;}}r{7 zIxNX&-r3!HWS3Qbrnizx4>5{6IV(RO4yEFR(^zwS4frRsv`cMG_ASJA0Je0f0xbN7 z{nx9i`a>@VE)TN5q@r3y0O;PdQz-lr@lNmt&$`DB;v@gaVh>af!89bYCeP6!Lm&KT0TIbrL>RG@G3^}W z-fImPYR!RURwLbOpO{K*3s%mU=y~mV3PxFZB>J88x^^0)apF%Tl53dU{aWV6$j&s( z0_}=W1Y#_`1=ez2SdCbkG!#1XPTB-564a(^#I(XwMSZ8O? zre7#g8e4ZAo zH&2jNWDiUCs|ll!1L!eQD0wb5J2AbvoB zJ{O(3Mq2T7)~5lu1x)_njfxl^7}L5^PF_k{w5_`=rHL||>7ocu*SjQOD)rWZVswYe zE;rsLe+P+rVw0z=fY-Um>4XM(vF<=a(JWYQEQ6@}0lGiFGOjRQdNCA<^~-iZ{HTu6 zPcU*;uWo@BA)J*tYQwPt;mCY>dKIgTy@}{p4EBUK_{P3#(V{sgR{%;#u`5?VTLMlk zDnR>5N#T5-0^x3lc(FV7<5bWrd-<32Z~B1u8?zg>g-o>4;F~8zS9*n|9H;MoHu%#y zR{jRwNrtM_|5(!_=;EJ|Ph8_8;J?j4U;J^2ov>6==Yq|nXz7T7+Xk#1r@RIN#H~<`R8al8?{8bvEBbJ;|&tlsH4) zGv@om`e)I`K+?!rAJ7q$+Z^aCqZvyTtR1B>pGFu7D?8wA7QQ)AN-T#OsX2?f^ymg9DlB zFv=xJJdV3APm|vyte1NJtp5Pv^m9D{vRiVqTgEh93$ZTWoT`#g1;DmDIjX78MIA(J zEPKhartHj~{o8Q9Jfo=YysGI}rN+yO8$j#|Tanc~+dX3Fs>%caT(IKC@Dl_I=w{(i zHwaP~uF36ImgN_8&4JjbR4_E4`#?I%9eg*fj_`mihljsQH1<}^Qs~&uZh0vTDb?LY zp(gEKiRXi48?+@16Cf+xtq#p zeYXAkwvTTlGs>!t}v!7VIL}i zp&6uq+!ZrOzpQN;1M@7iEdNj53c@okJS^#lo}(TX_IZO6#ZYLUkkI^eB!-=hp&=MW zo2v`7g*PR+D61_ZCP5s>%`1B0!3(=<*sYu2IQEXa2tPO4tB^;eQ_!DkKmJzp7+i zDQt1)GM$Y=XuIXDg>lPs{qk=rF^S3gS$6HAYH1+XTt5-7iIRis{E-D{2{->V6wo9~ zq4vg&{&0)-6&wHjvKS7YvJ$~JizF_Z+JZRjsx>nAgb7D!U_Ezz^lh;dB}SBAgKKN! z+U37MmL0z0-+O})ms?;|EAsT}O5p!y9$qHiIGIav_bsTjIf zgseauWACcdQ1$IQlWf{W{o=qHh6@F>i_btaeTaJyDLpfw2cN6T&fGbfnwaI0xVC5GV3)7-GFaBadNa#QU zVx~bV4LH;dRAn_>b$^A!{Kw4)kVA(TtxK|uUr~*V{>Rr;k37Q-0Oire{Lg6|W7fol{Yi}z#Z(ZW{NNC@K+(k} zV4dX_E+$_7hAXY0xS%a2dVaNkx_T_ol*M}o-oawt}#yYnp_{0)K(3dW-m9KNvDRQ zsLOMX8qR&cn+h~a{S|!wu}^~OiHWd#EOma@uvd@wMZWnTnG?1OzBIU;W=1ZfXD<*4 zcm5rT#Tr8D>+p*q%nlbkEsyXe3_=|kFT9HPg}Z-vp7HoAe0;uKyVh}-%b9{)A@ZFQ zP^1k@8_lAoLEuQK2#1o`a_kDrZGb~hHTeSwuSs%!Q|*_-z!oDZ=cAdjhoWLb?!%4E zjE>-PJ_H44jDp$rYD?m|+#O)*)H+^4hp107zPz&7;lCh@-;xD!RS=Teunydjy0}Z1 zij*HLHhlxQw!)5K9_5)1bWk_zQZ?G)t@-3jC>7`GbzT2R9xlG}(GQjOW&Ex^VjTb< zQiqV61V1B1*T0U8o2Zw|6P8cuWKhP?SvLg_Rl9Ei46Lzcw5q3t8tz6MM!z?K4I%3- zK|h$f>?0#Ah%kF8CTGT@53=6q5#uvId5~306%C zqaxK5^-MaPg4H`~Tu~ieKEVs;S2GA=F$z?DsXGg&JZ6y2(Q^At_DY@rFD{A8A^>RR zOO3lAAgU)K*zKs)+J0Yok4~PnQdzlM&<^8)xX{*l3Vtso={Y}}0=ZD*=54a(IUe&K z81mhf$wYs|3t`@`lcDMXb6SvS!qC0AvHoG^*~pJ;Sk51B0`fT6ILOzz)K6eIQ1iU< zuR%ji9-?x2AQQZ3(c@NLD4laG>Qm7q_K-B}jaXc>ZIX0p-;$?zcGi|LlMW zhWcGTYA_H3nbZBFC)1@b+{Onbyb{6?tvX)XfTj|m2z@ncScm355R89CC2nn5Os=oN z1u)+?eN)($4Kw};ve=(>KwhbzW8}Fr`^bG<<0xR`RLB@hY%D>yR_h(m zILz+3&R@iEjy>V1swZYJ#3Ibahnz*7g@kp28%lj{m>>nR_#V-6B227W))Sq33Ehnd zfNMkNj<7h+=|2=1&hA^slIQB(cZp}HiRr;7;77HGHmz1-4L+ zEVQ=#*|p;wwptcX|D1$jdbY=@_&y%(Z)8iY8!f94cpdE5bUgs@APsl#)t((Bw)LZT z(if2tNWMuh&^%F^vD%luu{DwIz9mxf;Woaka?yCWL%0@g_P$U2QPx~vfxAPNuNXT} zoG9A9V-1$)fqo+TU5T_J2qWJpb=IV8K+ZEU@Aa`+*BQe>InjbQ{2(BsL=1(H_6Xir z5^#wAldZN|EnqrX44tmV>f`t5rp*0yqw#PHGRv<)s{FW%^NBK6 z{&#D(=2!I6v%uho`4p;!jq#V(rymnH0U$ndV~k7XrQloeflzM|7F0O`6Ca+{)WVTM zdZIW$SxCVAiGr?+_T;;+4z=Ip5QHuE-;;vy?(DMqgryPd<7anF9sl*SY?+`_74$gp z4#?hjCaH(<_6pPfMVK7_ zo?HVrL7gi#|lbxyqnZ{7Yf5v$mLVEop?|$Id(M6ASEzF0tW=8{h zAU4%k?v@X>ZzM=~MKhR$D9S?cwkmf?Ea(qfOu-wOJ@kGc_*G~)wkdSZY4c|soJ))| zMELfp>-2>DMUG%|7c zqBvZrHF7Fp%~d6#9cSiitEs?FoqJ0F;WLE4?ww~(Svgb-*_t4q3fLW#SEQ0vk)Zy(Oae9Qa=Ua%(Kt2AyR3k{T+7n`}DbXaIdJE;A2p)%chMIU-F@bjXQrm z2ttw@K5QS-(CeNx#~e$e`Pf;m>MBKNU_g1TiQZ)15zpYy8HS)B5D zh4?Ip(;U46mbzY<@j!P1UJNyHYL2ulNtW*~ZQ}qe2UeSWHpN0;fPvin3(Ol+4XC-U z0_JlX??+FkoEijP7s5X&RI%A{o&U@H3wHGs+xKMcadpJSEzTYwwjT>X{Arw6L##(K z)b?ja^5gx0^i`cGp>iUs$013jjW^a1Ik7oO5ghp70qY>-E#G(Z^BJ|EbtKhji*=Kr z8Afn4c3XfIMr~F=V9H65t=X71eI}d_A&%;<0&f)!V=Ax2GP%Rj_69m)*&^S@fnvd$ zn_o-*aXy^GRzYQVqa&a(m@@p^fmspwtv)&}0EikM{k6-@!Wht?TE)E|x&aYiPe2-k zdDHEktBXOS^@d0~N)6l*tkW>K>!a(PM?6bN^oe+hSSoJXpO_ehfa!c0mg2`UOuSV&=vvWZwN@2V8&x0mhWiIV6i?KRykJerySZ!{E)*VPH^w z-O`m~B9rq;pt=9|vNT8SnZxvzbiJn56Nu$^%7B`(^(zRh54(qZ*I6`ytK=#!i zuq~)2YrG!~2@jhRV<$em_JNZ^!|w{{sm$H(oIHcayXxdJkZmY3PD6AAO`2Lo@b>iA z331NgWIK6nRE=BXha+Ykr^Z=n5E{e(d{WjOHrZx5QN-FpmY{#>;G_&Z-%zl>rRPa0 zanmVqXy>k#>lw_5?+vt2F%VK5(TeJa)Dx!%O~!0p%|ALcj?j`sd5@deDfq!q=KNry zFM13L=IG6)c_i3wWRdYLXdAraui>3>H)D1P*mnv&&3+U-TKzTUU4+&ZI{ zg2|N2=jsHoGSLoy%olA5rqU6cy6uMsElyr%``>noI6$HiA&`&*H?Zw3(>}LJx;q6e zhwz9$fZN#wXCFso@L(q4SensC&sasnhzS^(ycE0R=EseO?Q1jy3J7pIs>&$rGl#!g6_@G^L|9FC@uCgQ26KYu1M)N2 zmB{-3O1-QK-Y%aSa*pMm)#vGogwyfP&75Ilvp%)KWcW>O0#XZ?>>5zZ3 zX0g$Y9C!bjl+spzTX7rQtKRSMS`tGkk#6$4ZSsa9h;_e_0{UvVxvclZq&M~a<78t# zeD0qUOq>Ot5tFIuTE~&_sUhYLa9Ww@b^+MQ#Pu3e)F^+ZmwB$RAfM^MQuixAoH}{| zMbOlGI}78j=%41>)>0Y$uMa6Bf<}XWh;WeGW-U|fodt#N)bRI4=HdB(Js%*7b?d?% zk-Z7$fsc;9>6Xab8QS8HK&-CtUU5OR3F?OuO5ZLnygu{dZ0a+FgflGN$%r0 z871q9TQ}`Rv??8=a}cFs8LLa6<*Z{>@YyY}mUJs-3YOmd@e`D7RvN_E?>r3AI~o4H z_D^j#=5hL3$)b8nI zdi*dd?Mx8DEczf-kD1T9%vkNv181-NL20qhYur_j4$)ZyMO^ZyMbQ8NUO|haO<`65 z=6oq$Oh7!(&Jih336Rg#3)9Hm;wv z_ciRyA-IG(=xnfuPi3@)lS)(4Z#e-VCOZMl8Ko{`pc-1#Dq9d?>p7W8B4^)^BMsd? zSe6!Czx;dDj)l}ID!iNlSce9I&p9zEo0q9qMc@2sA-uYf`Xx>@QTnZ)&p-ApiMq{A z%puWiU)9nJENGa32#yq=Aaj=H1@HO4yRU1Mh%F`LU$=yIO~Id!Q6a1sNkcVCGbF4d zuU^5KG9mcD$!TGAtfL6tDw#-x< zqElX&!;h-qTzXq{&8P8$s%8bjzmO64QY6ZCurMe{Qbd7Qc6K{a9sgwgDe=VkDd!pQ zu0=Qu@w~3h&At1spI%Pw_o0~9%RK}I^1ptyO3trLXF}{h!YOVF@w!pnk58urE=7B) zf;J!!;qo1q<{@u-6u1;;IhL1k+1Q)c!_iy|Vd4iN7(5cxS1XY__7noFEL3UgzGg_; zoXzV}h_m-WB4zV#U%YgMSLaLQ!wPVCduXa`l%Vr{m*J;mCRI{hZ|&?Fyl3riGqEZQ zMb&9RI~V4_ukF3y8u&7Wx!DpwCZ;#wIB1I1X_e|s>e+ScW+U(jFBCd2G{Wlyu7ml@W6*m!O=11r^{Kf zJ%o;9{0{!6h(~)|>Ok_a0>_azz5YOW(O3!(!z{HaCSS2W?2WU8DLI@b`#f5aH{D!# zJKD25zwXu-AW`UuPoo{MQtRpKToMP{d=B4*O$0kBfr=ORMG^6a?c2N0fMKiJ-L#u~ z{j1Z^Zx@QkAkoTouC>c;5Im!fQCib}^#Ia09}WdCTsR&2GZ`d@`+E@#Gk!Y>|NX$S ze9g`ev`uNI*=HL3b1xIA2oObm8oR(LL%9~=GTL}?R?z@7HAvr2Ds><8dOF>)p(0ZmZ{5*aAFHWVvr4*#;l1K0d{3WFD`S*23 zL-Y`f5Hn4|RFs-eCzYckmhZ2w3khiY?I@is&_#}PZ%{bwb4@MbQh_$|kBIG`zu4ot zVU^tRR_TuUtAcNOPl-$_wzWsf4Us^SYn1aozBdPmzgmZ7(ET}?_M6{7b69mec(?ox zNGL&$G9KjDCBMgmvoHOe_peF-am+dX-)q8i4fz?g$QvGle3!p&>wn1=|5=9?Ffgo7 zR!5eU^Y0_!-$OR8h`*m#0X#T7FXAUdQ!Ume2XSf2hSS_Vy=8uH$h3m1bM+<(3t z$YTEwzd>gbBN8ag;xin=@WO+YY$e)fuAJZ6z=@0 zTF3(iJ~&i9*oWs4MUx6-Q3v&V^a_uGW-7B+f*N`Z&wY=}<5fuf#C-mv2LekOLu6{@hk?yajyQLj!bFVf z#36guC|5*knh%rVu-RV;i17qs`&k2Hz0B@Ps)u8nCj+f}tKe`cHQhtGvjOA7St;*8 zAHpI<{Jy;4$Z_LcS_E1#2^iNJ=8q>|3w1An{@HmD3{U-U8jBWxIbV}5=jJLEI0OPh zG7*>t?~f2xivbx49%Tdi+QRFA9l^^Im`q5UcJ@Vjl9}TVMJ(pv_getVVt%1CzVxJw zQDj;n-Go4tEpnkV^N815tng^g9_%C=F;I4VnY;<`rU6ie)?!wDfKtIkVEdWQR^n^y|sWn83k)_TA=KZ`k8Xv zdb?ffEqLURf=y?l?qb%f|l44*vUa$mfOeZfEIEqv@MY)eZJ}#Chz!ydy#q zzUhkur*y{6>}m=)yDb3cCM5Lgo?*ViSe)9v*MiXexwCs%)@`{aY`9r@x4*3u^a9=% z@}N0iig`Yc@OYUPg~fD4%f}M#jI&Zh)7xoEC3fr@HCYzKtBV&V$q>6mEmnSELF{14 znWz?e8^WtVxY_tq4$(nAZ?{vxL`2&~OLbwILTdUyh?@sGm06j9;OVM<>=s!S4Z(XR z|DHkk$SgY!-oP|J$(2A{+nTkz{Ivc!(#N!?jRt@PZVm7)43;Y%3;?Gt?WG<|6odFP z1E2IPj7tgo?s^#IVOk;Ba`;;@n1tPRAm9gt)mne@XSiY+f9`rglP-bQ>h=z9;+C-- za#*^1FSnc|+FN?ME|nU}dZ3%zYb#Cr?}H=Gih_oA4ZhW|URG-%~7H2lYuH zVEh{H2D0^~JcHzrwRy7$M^0Oky0&g^8sPi1{J1j+-G+S*QAE#Fu2%vXj@?a)c_?ME z#rz0;*P^2$)Ye1nd+R6jtj&04*ASq`K{yJIR4GHAiJ#(G#oLOa$gw}>&0sAr%tyl0hs=dL>eMl>2} zC}$L^C2=X@l-t_wEKI#s2sn0W4}mUCaHN!sSjpT{Aa~L7R%dt)9R6Cz;R_V6VC^Q` z4yOB8%I8Vb^-yM~xx3I1o+(kxf>S{Az-SVW*D_#TSA|dotP%8I3g+ zLsCkJU*m;(Cg-O*_h{w)5$aS?hQFK>#snqcZma-ZFy4da(@g3;`MJ{oH+kfCynlG8 z9HF5+V{>x>@G)$%6`0EOKDJ6=zE7*czz&v&C+%543~K4+k7N}*)EbLnUa~$Bw!Qe) zq6F}7ezrnH8Y#WIyR+5Qs5^*=rc8nL5|bf_To04;q&(l2T9Lc=W!s{pCh2LRLo(f9 z*fD+5xI#2_@$(nNI63_!G-CzH#BoT~z5JrYuP!KKiXa4cy>-vFZM|yq%u(`8!tWf>_-<3f>diar^Cn~vHml!4bc^bV zHNT?M4pCB_=hG=g%SmEBlqwhdzzGE)YY z21w{{XIgFEbxxkd{*#FR*Q)pzv*luk{7;PzqFUE=ia`V`5d7dTwSomQh1}kkxI!TDKFg zS&-{^Q|Q~iBU>t5&IMMd>6AI|5y`>qyZ2ary)0$4}f^#vo!B z=WAfo7z5&0+py12^)7-covS#+E3&VxN3i|2k#&Owk`1gi|}{-w2`jA`$2WQTsWku&B{P(tDeAn1VS8f2mo zby(Bi-I#yz0QQP%4z#4As{=9o0i4vB+HZM~5UqEm*<7yl!E;(PQS426*+rw0Kx|x+bd4xUjW`xCembr^Fa4TCvT{&vXq(^m0@^zE5%(lvQ&P&Bs}j%7Qev!3`{A_f>@XWiXmom~fGB>Z zytqrc-vEWY<7FhyrtM2>lZ*Iod=s3VpRDYMOeF6gNKge}bsd!k5$F`9`spesih5g> zvlw_5l?M7~daE9%SkN)4niGFK(Clem6~Hn0tTId!($FZ--(avc#T@u+^=(*)y-?B% zsr@bPeIu(9T7y-^`H{a{gCb3@)GjTM_PNCorGUls+p$CnR}KI%6P zze2%r=|TPgD}6A3q1#MUj;(sc6L3pnm(Ft<`)cZl@I{^>5Cluw>th7fz!zufU4ykf zoQ!|?;!_+o2XlLb`kHi4m9Aopy(|P`Z}$P}a6TgoTuYGokhY5&j2D;I2$TQXv&A*X zj5#VU{0TI%?>SG51wWdtl}> zY|cc@oa;BxL^N%8M^kBPBP}QLs)9KSw{*BsNX&%O*(0MqI0aD9J~Y(}ho}Xe8A(;< zN#%s<#-=-GGBb%T-PLRViiA(pUA(foU1R}c1kSO$uhPcIMPUlJv6VCVS2;DC|Cf<8 z@L^h#!IVcOH-GS=m(9YQLzN56fh(wK?o^l5$%L^VWqeIWuh6sRU5TFA((eL>Noflr zyx0=q^nTkWPtfX+xSevgxyCNTDPrGC_-ZOerBp)Yp_ibX{&(-ZI!^vXiuN)cWY?Zf z4zPD-_h^bMKoA|r)5p>EOuOD>D{Tw3Z;;-~FMl@Y2Rr9;`@Oy!tiM9K-|(aqx_jR# z5lsiu5XLo|(j3isXG(r=6$qb5{=u(Jvv&l}cB>{rE^j@0{m^4jBSfz>bdaJW?vPb1 zye$FO^g0DX0XO^6??`IH$KAB^sKuu73NhdHojRYocNI(c;YhMd)B+M{THNO1+LRTL z(I&6G35mtG3Griq-cc&~^XX=?IPh06vD0==+#mJ~=J%=WQD4&DH+9ey^iO1laPWXCXFa=W@8K8wo>7W?6B`<;-XkcJOUTuU;9Td4|)volB%kikrx~^ zlUCOUf6#PjsKiAn(z^T15S!qkk=A^#*mMs1Wl=jc5fas214aP!U(E*nr(P8~{CaD& z-LxjKBn5&RgTX7+R#lUB=zX97X{2lShl`7Je=WW8C)=&sF!8?1DATgiQIPn@Ik(RR z-IZBgx5zJ?YzDuDN3;HWnEtV~jz+uU9d6r_S9blW;@IzFKRU@dcy8MCBBKd6H4zfQ zk%a<>NrFYI@w=B}O122XMH}O;_g85~kR2+M0i)LukBRPf;@aShQPtVwVCpO;V)vjy z@X zE}IY$c(?beahkeD{$RtHnq>|BV1YV?^WY(v1-cBd=rjM<^5SXfC6>EreQ%@9XBu~s z8FXuZbvsmg0TXtZI3Y#k8_5>8o(%pXLVA!_!m{Nq=85mrH9JlJIE%*nJ|)-CM80us9o(d+!B?axdMAbawg#&_iNfPh zYIe5FtV=i-I9AYzqlOVP3!S?Br3hYD!u<;4pVPX5M-)3(jBN8(m>gXzIff14=Ho0p)L%8epRbAb|0}+Dz18$!yPE*YB3w?G_}u zx44+f<_RmwUhz{JbJ{X&NRjTtX9_vfdT>}HaM<7Q*>#h2)2rMrQo|IK6|x&mZ8W2= zm7c)E9wPoaL7+VXW;v|a773U>EA3W6o6jKRq;_6K5QlIH_QOX6v($})`%eY9N*l;H zRHZK+9d--;kBl{D zrgv5JG};pJWrk^ETA9;#UiJI^rT;!XY)!KwZ;gKlLI#dhKFf;IsjDk?ch&}`gnTD%~=~@o}afJpOTkyx?S`yCa#Drj(yC_u=MH3W~K={aW z7Y>je>%pB3>5;b$Xlke4eWQsGf|q>zYy3B$yV>}~HLCtA#9S}XdcZ5+SS$4k;ICcq?N(kwdcZ{nzPMCVh=h`|9%m;B<2tA_pyxj<4%TBe=lB& z`yyiD+8Y^yKT4$Frqw#x7*eW}5T8uce<`XQoJnXWTNqFVM}Wq3xj|j9Q9bp!xgYNy zF+0X1%hz<6Q=L&l&|lX1ta#I^tXhmzZ4IQYMi`UQ7lrh`^BbPrwq%=<;R;FfOq(RS z9kMjw!2PkZO82`<@0Ami9fYck*^ena8@vme*nEOt4j|p1ozf4r{I1{fC&YwQ2#8LI z0X=mH%)9bV&};Op%^@)msmE;3A4S(QhlJSNcAtS-`4KOaHF>nD)7#T$)Ivn=Q)a(H$J_05x#xs%BmN)Jx{-2 zgtxN(t$~7s8Q^3IYz@>m1x0G~F=8W2udZpd58jxS7yPT-J*Xjm`Zu4iRZSdC)CZ-s zIH8;>TGKymDLW2TTiOdnAN`gGcNM0JJG3n1+^Q%08D1PE_<~B4RE#-f9CP?Ih;YYB z9#H7gm*P6&J#vjgiEn6AU|#~!?cdc!mor78apn!G2BNsD%Hrsp=hZj7OLY}Q5-y>K zuMD*giJvBjNk@vE220akA5f}u#kju;EUVlt zCe)@io>ByWW8t?JcUSP>1-m2or(ywt=R%5a3X`i|#hz;NR)xtBVh!!B1(&*D!a~0G zAXR=UO0`{6kOxtb)j;#ijsR{So#1+NS9v`Lkq}5RBo>?}NF4@8`% ziNXMLDdVerxPJ)rxy|puoT9>ED(LTn7EW~^eKiz%tbDxknH|K!zov!JKH%NE7^uJMZwTQcdyHmN25H5AoiOIkDQUkih*hwDk?3 z<`(6uFMzV}?@h7VKv+VA4rVwJ^YL+tG1ISo`0hECeqlhFGF=Lo-sn;tII-L*=5Yg& zj6mQ=7+FKw>8R(P2t(p{Bk=l9-;JXdWlcEvW-0se`0+nvpLk^U)Ct)fE$~~ls)3_W zzQe;1`iN*k=mSxM%pnTAh+}E?;5~?_WnAu%n@peb83(leK#an#W-)ZRlZ_~&42r=KSge4GD$M4O;tn%J*_ZvDo`8-vlN_!g}hAqDOT(}(M=d<;>G_l^vWQ5(F zO=BQF1&-rKWu0)>sl77GetA`btLVF*NK_CkqGw;R-;8;nr_#DU!b~0f&4T^cRPX=z z1PC87BSi^(@(D^{)MJ1VXx>nSVN3Sv9e7PV;71Qd%M1vt&t1|%ZNP2}LIT#U?X-V! zE#5AT{9q$zT8$gpw`qR`mas5QOkW;&TC;vc(xT6NS{iQpfwlFi`py4o{6VQk9}YQ~@V)|% zYfa>~XPp8l-kmjk2hQ7k%P*eqUxOht0V~mX3VvaRD>w0`zutGy^&V`v^=JJ1_e^wu zkjaFULdrlb&e|1P!W9v1I(YhZxRJtRfq7~d|Nq+$J81+#_;228Qgv#?$|QpAQ(; zT>tRm|20wl_ll}xKS9i~K*Y#i$3RwfzkZ3?-um8Ur^I7NpC8jA)H`qcDVXGgZDu@= zUTDsz#9Q7Gl$>082?-KOpB|hKkE7*MpE%-{@ae+*il^aPWwM*m*7q%ApFz7ppIJZl zrb##7vNfjF``^A#dS*;&KeZx=t9K>Nu9ZMzH1za6)KTY639tllBVR!5@)agpPtO94 z&51qf=*3eRpvV6S^r4H9^un%+^L~Kd{{%}`Js>`%-1wLs@*Qt+(q5}*1t6!F5r+g{ z0H5+wKd{$+f}Sdh>PRQJv1Esty%U>*68I2v!D(3UZ<$dQ~3FXKa zU;)!GpMLBdrHm{Tpj`u6^w=_*;Hy6IOXPJ?XBv<`>P3k$q1=S!oh- zqR2~=XpEO&lmpuig_E}tap?1@qg3@mB2hWjL>xpM4G)1(-Q7C?1og8leYmr7;|J%< zF+H3j25}J!tdR_&T_=vwvW}ik5&4Q50R=&-SpUW4SRXZ62XLG%3rF zLn)B|t!HI5T3*$5eWhr>|1aAcOHx{!2se&A zVLS+gggVjRkbH&_7(OZE&a-H6i=Dq?PvM$$gEUhNiV|w`|J4~2L)rr z7Ok;F8rWT)T6+RsC@OnTeaYDvIrDwhgJCA}bS+nMOgIPMcl-Gjkfi0>b<+QQZ^}QkxmG* z&hpobWykKn;%0QRB#Z<7!Usa~5*QqD_*KPsxZWe;5a8wuY6nU1#PtwR7Gn|M}u&!r8E$J2q_InFN|G@3~U!zC3#v zRP0OAockYpQAlBIWL@orw8nVizg`~+PE3&UZ9he=QQIp}uxgAVZD+`!KEXrqa!!QT>;YWSrF8`)6DuS4TzCPnKKrV$Mw-c`Wxl|%kLzhXi zK#rDVhR-Xry(yCn<8*(Y2|#POc#_2>cxf}nbPvjhRBWD_3OZa|VhufxzQQvj)?w6q zz_#JkSUI;y77Rfj-A4kf7f6E(+Wp zBt3j=ixOf;F9l+1cIk}Qu!^IS<<%iYrzh-ku9lzN`bjv%0>4`up=HK?nHr66La1U* z>8piW!dAWE$6@e~YVB4J#2%Jxyhd+%uldJ_lF19%p9{8aTeIJZaz&|2o@1bSxoP{F78 z6uR$O5TR*_WJo9(A3%yN=O7{bsZ-4sCke2UCkUjyB)bmy6X-YF((uGRJ{1>od!h*D zviJR&^)u7pURXLKhz{RiBdUmd<@!mRf8)tJ81?(!W~^qj3{Q2z7S(KWy(IkHW;^IL zN;U6;ufW_)HS_8%gv0Ju??auidk1={ADm-po>__U9+>Ke#cp1be;lu$Wp zp&tm6tCh_6(pOy~Y^)_ulw=SQ!4yA+A*s>Nb!p-Qp3|`hMKrw$H|0jxAylLN>0H5E z&r;nRB1x>}N95G=C?@nOeZA*1qwL~uOL>KZaZFE z545aLJw+a*CkieNGNLIegvno-R2h@Tz86a(kN=!~=NTpChz81gZkS46 z(y0P3`1CG{sBsP0vlprB@cm^j7K7qSR;>q}1_XSp2F8fC^Ci_6R-fG~F>i=4c5XE` zt{A@2&K(t``Np~%)FoaqdYONY`99SywgTq3avP=j!=q(MTRZ|N=r=g)K(6PDtE+r% z=1V5`#$)!UUn!L`cB(k`F3dq{8MZa9h`OD%V#0CMsj5ao!PECv^wF2cJt7~{WY+Gk zy0(yTcx}|Qr!&epru#pvjS8a8pruELKd5*zBNZ4$?;FFw`QDFZ?Is~_+z-xD@e+np zp2ITh72Zp<1EukIj&@j7jNL9sL0$cEtoZ3CxWfOwcmbUvXxXjN{--)hc@DABWzqqjMk%!E$>gsB*Gh7K0^P$97nyBOgFBdtf(zlA zs`4(37B9d}9bkwh+_D+24HR0K+sC~?ZP$F!Qw2;s>g95sRaq}Zm7on^6scr@7op2HW(zW9j-(Zd ztxoAv7F?ZHPV$ydo6leV)Xm;}bq8$V*CCnq-*pgFvK&21^cZE@KNW}sxDD%8K8O&H zVXh8?Y?)`UMh%SvykyFTVrX17i%)ZjGqKX*s5N8({{-9Zk30G2Gzp|iteklcqg?z% zgA)v_HzDq%gZX4~0mi(-%&wiGV*EzdX|bOnqw))lN6j!+f9e}OYypu-#e(W!F-wiR zo4w{?+>oMB(+{M!JL`hNTAHN}N#anaR337^Y57vUbFp0}J`jb?eaS-l_{saW11Q>p zV7@3J_N3DKrNBN-X;h8B<`L)|j|-Xw-AXDd0ECoB&Ev@Zg14ER`GX&Y6iRwX)9jgrD(YK1tQ3KwoVfKb1)v&xvu5^-S#POFd+yI^Zg4i zWU_0ZIb=y_uy<>+)z6aRnibi-)V@Ro=^T`suiXX-+O0{70S}GBi&v8Cq&W`Q;Vzsf z;vnWjaiUs^uu)aO6?>=rVQao>zCvlp?cT>QpSwMxdL$gFSrvO6L7&nuG@zB8sq2d- z1~#GT_@SdKX+ks=*tfU8R)&1bcH*N$R~i(qu>@={x?JJM9KAm*jfz)ICNo}8cGk6y zu0`0^WmNeC0xKaF%8DkBbgrA-E7bq^yO@tSiF#Vb&)a%Dkt9i@Wk9_{dtKPV+9JIaf-{ z-wA2$*-j(8+5o6$`pXkHGCw`f@nqt5Ii%^}brUJ5Q$WM@Zs5uF^h=*aNba4JEc3I{FJJW?fdL^rFVO)3@3} z$9|x&LND*hoH9;zu_VE;jl>tbE@-eXR(86QX4%9>UKWWd*8T2 zcXTNG+J@nPCw{XAm&01XhCSNMXuL#yk1lr_nmpgn1Oz>8SIb?k<~M5R(18hQsU){G zH)e1$MOHWp6(yap*=3jl{IE4G?{|LxK>VE?U%pYkqyEJ2rywD^`~a!hM*L6nO6ECC zaZk09XcOZYM>j1^paMD%C*1*zjHSYI&$JEmIZK$NOkOKnPGMjz?Wx0ratq6wLWq?+8QO%N z8h%3z=^cG|5~!3-Eid0+xp%^+#Q*SzT)~k;eBoi%LT!~ReCA`5XyDFE} z^iGE+KKI@D<&rh3t`et4&Y!_Ts)F;43s%+gynBiiH^kYwonJ$EY(Sy4B(BD^i?ByX zk2XfoThD{_a`%%7P3(kpaTT-euacR0O>M>(*9)9#|GW`&!P3y`=OE2d1_iu>E3E9$ zn67+nfe2?xRG{+hdp2p(4!(nA&0OrAiD)e2;a9GkQ0{NUcq{a!S!tR!}71C3=H(@ic=BacCaZpHynZDVWGiUo-K3aXcwp<$vXl*&n5H57QuEh{&X#N-=J-0 zCcWT*BG9rkaf;K3rN#Z)jGA6)jApj5z~XYa3F27d`cyE-hpMG((;_`Q!dVwOE~5g& z_$r8(;lgYr7X5_gzz*c8OrW%!4kk^bh+6BVsR)!GJe%z>OxaQUr_oDIsxgmHeXipc zHDq;1(Qk9gj%NrJxG|wn(;F`_bm1WCe4+Ijr>m4|)d$zCi7>Na@1ci{BK56Mi3k`M zBa$84VN(*YJS^mk#OUM(SzoUg@ddI7O?EU$`&r@RPFWk!T3zo0@wljxv+hm3rSr z39HUY8)h7mmpA-|z`ncp@Q23PNg@knjOC+L)PsIPBHsLQkCJFJFB(5?-hP!7Q8iBVB9Dx8K6I7=er7u2Tj!DL;hnoMIdZt~T(T#HSc=9B00X zP{+Se7P#Pt6B~RB8ntfz=YmG4gcxUZexV~dUCEKIk0dfB@L*)w#GDj(p1$OmhUPSf ztI$X%!i$TTnBzHyA;7mZ=jZdI85W!=mV2q3C~cw397l!daOYZr?HF5C$^xkyF&+;{ zN)?nM2>w6D-aDS^zyBY99p~WK$0(aqMv_f79TFmiRFs)rvXiWiS;p?;{FqV>{rTI368g&6m z8jl-!l!=jbpDt;0wksSEKi(-eI|`O4vITeYM}F=)R3Gg5Rck z(J(9B>2}!8{<~i#02*CvWkM8j*XV#tWNosfWN6<_6n}KFd#A(^#R2q^V7_xWl zC`i)qyF<@G?egCU@)BFj2HSX()3;`gToxCb{+33yBMh_Q(s#CNz$o&&}CVO4YKd}Ws zoc8yS%!&NtaYIe2F5gv#!#gMs7g!MNiX^qxxS8tcc8Xn#HkPL)e!mJ5Qm^ zdT&{9A8%uP%`ySAW25wSAZ;53M-cRx^^`J*#?b>?-m@EX7WgiNcBr=R$PHrnoiDB- zF<-~=TFE7{^H@v=@s{L=^(X{?Z^zWfbVLAeIH>+Tb?0h0WVZ`2mRncs@~RIye*59y z$xKryk&djjY+CE4wcf+##`DP2wF1Gn(TQIBJ>2V#h9%Y66`LkWSZJcfCIzu6DjK6p*as<=_%Y z(Y-hg&XkYSi6YiXH;PKs{%N@NP9V6qJ6d$=wM0|y%Ole6ILYJ5p8UD^VD4U7V+*UO zS--lZhnfF=IwwD28cRKfynUJh=A4-<3`xS9OY#b{V(_=~|2!dwu>MY;h;=lWplMkg zk7zjXTjFm?QAj$y6IHUo5{^h(oo!g%wU5z$#^^kysLr6SUbFP=s zmlI1r@Kgt9e*xy&V~%#|#V_wrnK0e2(^ho9dEL6cHZ9fH^k5Aq^>tO|xI|GQjWFqK z9U``ydcg}}+Z!O+CwO~k;LU60L92D8Y8}xu7~0>(+P_KL_S~q+c_|^p{bqL+d+?RY zV7jeIoC8acFxS{lg)0!G;de z+AU(p?l!v={IA0j=^F=e3U!9ICg)K6$GO61nv2_*xH&FUM_9V$cH4oKOq4}h=c1&{ zse~#Z%Yxf@PX5WAo$P#jajlplYut8L{L>8PFKtm+DPlNRm;(pB-g%RRiy`pezhlvG zqR7L&@OGVHg9YvK`PKpeRDV)*uLM|(JdKaWw(q_=c$LidgT8qXO_OA}eqXYf+ciL& zL&ELkiuB#)_(_I;Jx(AV0$AXI>i_d7%it=~I=J_Vcj8R|+)n+5n+0VxpD}QgHzCQ) z<5dN-&h7RZ`^t1NjbH{+2!~{%K=B@1ZaAWqrTeT#-^wysGH!$4%$rA^zi60-DYFo4RUr@3lx8^5#Sn9a2YM@~T5ZJYwW+os< zdD!FGM~r{~k^ES6D9|Ez{9mW8^c5QKU44->dwQdL4<1r75?Xq7caVuY?G=o#zJ}g? zXZqXss=-E)boQ(Mt20ln65BqnVKKTfv>4mUs$fq&A1V5j-7JDc>wQ<7i7$-e_*g#5 zaHkg#)lyd*oktEwj40e6`jv}5k(Ug&0>?n>6VRcbvBZ&6&?}*>f#AcOZ>o8MNp8a0 z_@T=KJ4EpF#Uc&z`Jcq0bdytX9zO{snLmsA9xlJ6yZeFh zv0US<%6TI{IVjZraA@vF)Gz~yA0iE`*t``u! z$lVli?pjE^(qMQOSZbTkTtzKVj2xw5rFR1?Nxv*!j5T!HgXfjb~%T$l3Oo&~Q2RhZ`!Rl2p4CU^zcrkVy6R)zId?xzl z%P2nUK9;HT(9C}L5FxBrfppa7aSMZ zy{2#!niIKAnFD%-Pg|uF^^jo@y)3FX9NKXp+o-c0-|rZ4m4SrPL9<>@GWO{Pfz!}` z$hv|BSeVS+e|uK8L-xR3{)U7eh(wA;{=LX??z@`L400kuzv9(?iJ2DEta{4m9er?@ z9CbL1k_4gBV`*(*;2e7*ihV#$bM~}M40&|=9hoLO#F2q)+LR!U~F zmbnPSu1*>?l6idXS&rrYD8yh`O0KX_=ut!Pv~un|wlN_$S^mQ5sg8#j!g`{bHTkZ# zy`;)f^$ffIeX`lU;kS-@4dU-+R~Bzgwxu)5Qr4GH$;DjG(K% zmw?fI6E57n5LS0RB$WC7ko8-QYe75<*7b@D27WxHo_vim1(S_~0}6G65UivspGiVQ zJr$djICoHz5vN8QQ~BfkOx+BgeWp4A4hd8KMqe7~56B3V$EB-_>I}OcQN9j8 z!`C5?93HC>%0X&w)fF%usnY6gG35V1A8M2YPaz;0|NrytnCo=xrZufPIftB4S8LlMHy_G9{@f))pXeWI|69FoqKl)@cGXw!isE%DK;Z zZ|&Vw=ijha3r|3{OUkSgbz#@SNV9((*q-0q>3N2>lAJ`Qvz1D2bluo|kF0i_4&%W& zZu=6$Y(4e4p*M-Oqwrnf-8!2Gv#G;e+OY!DdZOK{J`*3`Du_p|3m=yu8nT&^2Lw}{ z(rikd5Gjndwbi=|J+MZ*%Y;(XA(T^?L6i>T{qDvXvkuP#bo$|~Nn+nK1kcX9p3`w{ z)W#*`y}Vdl|1McoYaYk01`!4aYG1$xvVMM(&vEK1c;HqJjJqkSX!h7L$*)|{TLy;W zO}1!2H34(22ku`0@*j$bs{HGU2K?OUFF^MU7IN0xAHzxKt(MkknGJ?w!}8 z);PYqW*0?2h39WGbNZ`9Tz&#QY zXGBhyI@dnv7H}^|qnw%IeGcoMw7iNXSo1sH$Le%0be41u_72*dCR3hKv}xUJ*KOFT zM|wAVF9Dy;)GQ4X*U=@9o9;bB<~bck&!a|$k4!<`1#1yi|)B1{TITfy}`0RIa@D7b{Sf0 zkiSH;NU3;O-U`>(I;Yhm&JLG}`Cl#0|K%C7>S-^}d^@u`cYCBOnmHp7rovAT58a60 zR%c=*a~RxLw`fplzP)cOz=O|2!p?=Q*oEL1Y|Uvw%+$Lrs%*LE4C`<_sDC0K=8&KQ zN}%^e57U0rVi)`HX6pK=H9mS80^{ zv(R%y?^_P9WU_5{!F0!E8x}(<$zMlPPT11!Jf$)HJR4dXPbs-}A&7r_L zmHvNAlK$%{v69>640P&n#18~aqr?L-35tBrD?&1ve&_Pp9+8NnesoE)gLVq%EA33J^~3>h7CoW(>25{$rwYd z_pMVu71Hz$X{-sx4t?1I$=E5!J01}cY70utZN`Awo&b}`F_&{$#V+07>55lp`wx5? z;#rimD1V`Fg@*XrP#A*`(RS!T!w}F=rovq*JM{9288jP=%?hw3R@dCWU8Kt;7T&>E zGp1J%n%B3j2wUereR+Du_MpfgsL#;E{rB-P3Wlfo`#=Z%yg8Z|IO!nAt5h-2d*!tJ z#TfmL^?|ks24j`PRu9X^8P*hWb9WvinIOd}AMOBx_S4$@(8c-&uq^Rhs+xgWUa+&_ zqzn>LQ)%`L6<0;`seQ%rC|W{(_SAXRGtdL`uf0=17J%Q*3#Vhx6Vgvqj3!rJJ}LoB zDd_e;H5hs%c~an{FRo-5Z;RrQ;1+qW3vKZdzgt30quN8DrD8io$%4^!2hD=q-Pz*M z%(?se4k`^<&dQ6>PqvlOl0Y}ZYn2%KAzdR>PEcwHL(lew8_Qq?dm;0HNV@Z}{Fz0? zN$QXfS{K(BMuP9R8amLlo*MBK!V()7q$aT(-)TSDa$yh0@$SZU0O5qNxv-1vDZUX# zTl|rd=%mSQSJ8tEgH)U`;2sr*m`mG3)vOA;m&2NaFV+<@`(Ot_k~Fctdz{O=dc`A^ zz8FVI)OcxAN3~TYvc3#y51EvHakoRA3#+^yykhz36@Ce`%7?`y){y z&N=74mA|B-kO+iev>&i4deuHRy=)cck4IcU#S_TsgD=)45MI)CVz3=TFLzj>e`EnF zdEn$a{JK1#^**xK><58WqAQncu}a7$%ahWm^q1x*T`su@bo#h`%DH*(QPnqD8WJDG ziAwrYZLrn6)@3}Hu>~O6<45=W^g#Oc{)|tJd_crj__CHTOX{cQz^KtlgdLXgL^WE2 zlyA%1*1NL+WQ!z)kOLr!`viv6nLtb6)Ruv#S82oYJi4oV@gqau^b--DN1z@v;Z|^6 zN}K?@=aM~hx3-ef^XU*$Jj4f&J8ZA)F9trw&;Q-Di{O|)9D|9P1$bWBjG$j~^S2FB z40>qpbK^JC{m=2Y`$ZP|jr2ukFMeBLf+jXB`}x>ih1xEQy@Ak;D)M9SGGcbte1Wuf zheax@+S9!!2Z?O zf&C8-Qajf4ufa;1$mS**T2jHYkwVGnDdH*C1(=9FQ)4WuA@sI#8PJAwRSTO2%J+v= zZX9}FQZUVMZFk#*2plDV^#A#xf4*}zgRu$=3n(`fSc*9D#MB5a(8_eSu#-FwuBSe!N)O4jb3J4bOV8ut7~87Wv_l!8*VaaKRwcTIq+8L7DhT!@JyL&|I@#>&oF#Lh|=`H*eEZJ|lKaaxm# zV{AwMW!NM7CFNKblLNmEA1c$aWG@SNhv2`=1IM*A8oL!W;twHZpMWO+uA+mi3~v`C zF{r~f+$HG%*pjgpgAwDFF?}fVUqvi_D>VMMq!9hun~7JYF?a*VHfTtdtT2rr3m&Ds zUKk|Y9+}-ir8wZVq#f5y)tHLLidN2QNOjXUq)iJGW1<*nc%)*)qL&~P@^TNeP}FeI z0ni3lUr@DcB=oy;lSz${Bu-(@wc{Qnw{~$GP1tXdQWh zXtUg7OZ7N;=Aq`!DuUlA_eNmX6=`!06f@ z;O81rOf(~a7SK$g3-?x{(L^H{R&iJhMVUI|v@dd@VV=|$* zNs*FMMxaSzZpYrQYdl#PI|LWy&o2xOx0SvO2NYHn@)_USbL>mi*_IdNTkrBQ-EbHF z4?)y_-5`ITN~0y~4pEaiibCJVy%!CR*;Ot}hPL5D1ZrZ{`4PVBer%1?rXZ}IRbk$| zRLhWXLS{%1OVq}n&d}PC*v9B*t&W#Vb3BBL4~1zikYp%>674_Y4l*9bn;BE0dQ3OH z9$te%1M5C2A~cN;Ee~MNXLde4Gv==i$U#>fQ7oxt4wwkRRfDnjcRMJEp2^I_~6d#D;0B`=TukHf+>jn zthekV>H$6cp2$rRC*3UkTnqYj1&nSf3}FvNK@teVXWSpbD|(uF1;c4bPRjmhFSCv( zO}StzY1~#Ofj^#NIJh_6goNeNN^_L4yOJ&$O7DwhNgni6+1+@)`Z-AIJv4kpm=SbA z(`WD?{n)=A1e46&$>=trr9%Bnpr=Q63@?fFgbR0!US^H{J~9Wt;-`HwS*^I@ZeiRJ z95ELY2W_r@0d2$HrW@~UsTxiR>sjyG&|Yb)o!tS^JI#C3GBX74a$ZFQ16avn=RvuX z2LgB*VO4VaJa6C8+E)v~!ytZI;WL~cNIUkm^78Ye_D|20kW`$kO|&!f3q_oDvB`4XU93{e5S0{_}m)kOvevLvmzp zU}`YIW&$+?)=%05U+CjJ+D!0G4^2*jO7s(`^p;nxRXIOt4S8;CjHFF_ssQrydE=-r z5V6%HC5o!X-O?J)09VKBgaw8NtIQx_AAs#I0G#e z6W>(YtIZ3c>&-R#&_;fzSZSn^>abNa%5UnM@vYw9vjql)g~V4P2yRh!GCX2H-WS^3 zqO)&l`(L2DQhKWst4@MOdUR{lw@%vjAYO!1F!%J!JO#IhT}ck`y8rWF zh}ynBBko}J;(VvXigWNVHv>Lq>;|DdX)>`9O=KIO{%Fn~M0j_x!NVr3q+qxJK!~>y zhDM-<``a7C0h@68{W*vt8fLjGQ0XCBUK^BrvnQ|e`XtY$&;)lGWoWO5WQwp0^&3+g z#syEqs`oXD7kJTuY6@C-fz$?~Sx){)9O5xn-7{ z2o7V13mx%$@T?B37nzUcDby?X6rh{%#&uZLAiO|HV{>uyZuDloK;@3ri^dL(=!Tgr@6_!5W!F# z=*FGZ)S|9q_>Dx5Tbbu(=xLp*2*45-$J$nF^C649aBH!FXj?x#H#2>}d0g5qafUx8P2%i&)gf(4r$2Kr!+ zs&N)GPUKfM5M(6@U2 zv5aw`Tr_D2s@kz~$$4W;6W!U0lexxkQ{E;UK!3~0EFt1>AiekYQ|Mt8Q(Ba3eYk()cw8Em~XI^zsm0P*pmKfL@sKZ-#54g z_X0pi1|CI27|G;kQVh9X)fVvN^9kVB1ZwQByuuKZsd@}Fxoi9b^)0&eSj`wv+;F`~x`o#g*p_BqC02#IIHZg9p2j z%-xY;HOI%v(e0B<5+MySg z?vnbi!Q@C4q>qSJM!NVlp;zT`%>k2L@ZS^=u#?&h`fEemx_0X#N z3U!c|wK$;jiPEqegKXX^(`=e4F9?0wTSgcV~GV5iO zRzKdv+#z}TMdM}h<_J6~r#-xcZu{tXN0Ncrx~r#thPu5G~RZSqG>LzMfLI3(oR zc28}2P50{l`$DJXD>y^1sv5aJI>@}-I$h?EM7a1_?AkUP<@Ij`@^SJ0If>? z8DP;4>2%*^)~Ii{QA0qm7v*mx6evvaw&|XG9k}tL2?Q68;X{B;=`W|f$M`?Jthc)|6w1awU;go38S^pt&-nB+-tJDG58<1$|=M?rbo%7?K*)_xZ9}LQBrpF zD1-j2$|H`2?tw)5ddph8zQl*D`?M;9z?#du6h@CgKx&DtEqfysv1mQ@LS}YF*o~y~ z0nWI)SwO@BGl&AR(AK5_9FYM=)j2Tb0a6R%wBJ9GYyY`~XIGfM-&m>QF*6emt>rND zZL}+Ro*OqE{Dg^Sx8e4?nRz1~1UG*~MSxyXUO*O2g$+$r% zOKg#OKZGlcx15s&F!AZB-Gso~?R&&%p|8_SYKbAqhv>uCEGH_{5!}0*8^g&j@?0o% zUHAEZP3_3TnA;Lo)s+hBQQpRQ`)SH;4ptdt>o?=}&qGqY z%4F+qUfyP$wOw}Yp^swwiqxXwK3=HDoH%q&Je}1q%Gy88ri-s=ECK|-&&?Zu7IgH$ zrUdS^qTl>mF~4yS#ugUz;QP^KAaAmFBkw>xfI2+?vzW-DbAgHPA2c?Xrf~o9FF#QC z(Bzk=HyFBwQtdm37BV*Q#i(Ug4)R zj_>hdB>FfS{p90Q&%SiCcy=3o5HjmXVS^i-<&m`TEQnMHK(gzf!$x{ik@?{luU$hJkD|03M%JJ=9YY2AE} zQ(jOiRXwo092&vzMrBj`tewB4MrE)txRG#-qn0kydhY7=j;ShDW8^d?6Nk#X%+>|Y8m16Ot7 z-XY929J97(k1ir(^BULxVofFI|K&xaJK&VlYQX~VL7_8+oM2QF^?oNtA;;;t z_ZvOI%(9td@%5!9tP(S#A)3TVec-G)p+;AJQ@fZdjE`?rwnFZt4F&zpZccY_m)jns z1G{wXNYenmUg14C-mrXD5EWaQVSKw*E^s z&qpk6=*}L4j=@wI;9DU{-|FE9+RciB_fC0^17X4aIs%V?_cvVBJY1j3qKaYc(78fQ2% zjYY6Ypf+|Aw9D3rqdZV;r_4pM;!sLQ_J&E3n{jB?P7~|F+EV*!-^nNK3^!YravnH_ z-ReuY62jWbJz>8P;syJ$>Lb|T{e?`i%ktdYfBvM4?jW3~!dIP?#qQWzRhtAv7K#-A zzl+rH`(wo(6tS;+vnQ&c`LsBK4*9RNXhrn$OO^7 zC2SBdc?#f}{s3ky;0;d{c%*QFG0}$FR*AJ}z2zZELkkoJ`L3ar9?aau%@=l*p!fGh zNKf+HK&X@Tfyc1ZPj)ukZrbUT$?1wEm|G9W?z9WRF%!d5s16_o$~-xb0v|TVo0Zm- zrQXR1OEhO(V!a8?R7ItYld@~`z3tnlEUz{yl< zCZey}^PZDyOj4;qFJ%vN^pHi7e*`QGu4o@=2EhY71HeH1HxOqB2`~dHdkS067Ts(S z13eRdd1LsxDBw7(b{&hykExwlrJ#9;`bg7`zVD|rw7V?M(fawrbLKStO0H!V+l42l=DJEeeC41H_( zP~r<%XyLAkFfmF_;sNjrQS6_!tPUtkRrGimbFucC*E>gC#kykZQ>?I{G4v<_W7KD( zK~DgI?ay4bC9YId!8)EkIgTKhTXKE}K>)pQ@gfS8b7Xj=$k+!=h8$t)Z0?6`sGUQp z^92DKLj@_ITHI0YZkQ5i?dRAPk7P=5zoTd3AR@s&atno6DHd`sG`iI`*QZ3&!dXAP ze1b?6kG7_bg$jmq4t-_l0?u)o=Tr!h#B8Qbw^%ljo#std4^Fn}w4)B!*mjTyc1yfs zub01-A}J;Etnx5mjcfB_lN4M--|^iYXAiicUe=6AD|u_;zo?nkT)SYYjnM2H{r{`B z$0Imm4J8RIWD|5>>#kYtSZP@VWPa_eJ<8%TnL_4G9re!gOSAXbPWD0!LG=-agw&!T zYtW@3TxG7;o(>94gHu6=>Aw7h)Y-T5=~Q<-?B4}|%&nTm6uj}!O91o9!a9l&G=L)UEV}vvXDO+CktM*JkSI61r=bw6VgLmxbC$WJJp2B7~wx*O^J1x zXG&blU3mvWQ?wKNxTLJfZb8@Yjik7h9P`({*3-@~U6Y-f_z^yJ^) zns=NS!Qo1~w-1VmUqCcFO6B$GltUm!L5=mgnYl~Y0fd}T;Jen z0yr_X1rpURXi>iq1-Hm}vy%o02r7&$^4Q+R6U1v zEtH!jRIHw!-oM3CBo69oN6Dh&%&)?juRaALyVtKK`J{w^-e$As2`BG+PgbupD74>0 zBp>U)bo%f*$w=nP_U4m@1*o)9_&qsFT}JnsF4|l#iVF_DK_y`+lOvE8c|3((L?y^> zC_7|pph@^)Bow&cYLgLbVI>=V4}bAzzrfU#C_Wj@lpLBT;aT;;i}Jp$qUaZ`K`3tk zWy?{>Y*5(W_dJ}QwO|^;+>4pWiagfU*R@j0u}AdXp&j@CoG04mV+TH}x>`8HA2(HQ zafABPef=xmmL<>s&T9Yhf;36|RR>yTof7U`y8Ti{Q~RK39L5@B#(3RwyWWen$S_1R z4wa}i)Uarz0wQ0{-tQL5kWhF4c69{Ihl9q9{pX!M80x5n&FonkJ&Sjj(N#W&H*(mL z(5FsQ#ot1caz2F>>_*>O_FucjqrK^D=_>z-twB8G2MEl)NG#B0pDNuZ z)*N2So;>CQG7s;w0OwEUP!RA!*>NX=?UjLw|K22D7Iv>@JRC!|{zauT8~ZrFT#o^y zv+kj@K)+7jYXl#)mqYuh97ByHvQFZmB0XhbMMwRC_R9sB;>_v-hpKM@6(PS1FJoip zaKvWhSrk;^nNX!`>#4>TkST0p-;^*PQ3b1h&D_Y0D3}K@%wz8kUd5y)>s=S7fqDG6 z4QqTa+ImHbPW(acP{S80^MQ_`8~hy>EC%o;gNRSiT!)j4;F1wVV(nD-^W%}nch?-S zt*2*@MntCShjY)tU;6|2zE5$K-2z=l%h(hQ1ebP8Z=Ectn%DFy{w@OsZIB}WBiy-w zgm|BM^4Qr|yQBL>F7=smZ|BbtYcr-OcbDn62CG$#B5vwB5+-pSMcUn=s^n+Tlj7z* zAlJ$7RhCil1hhlf7_wfoaMh=6?;V#c0w|&@ZVFJe-xl*fjnV5O;Eu}fvDrTcql~gh zFC^xVX zS=4@H4txctzz-IUCVs%YigN$iD1^fE`=w(EDs*;0?~7gLe>ek+EuOVCfx!3?(Bf>| z@t}Z!PW&H{5K3C*!%(=8oVj3$1{%rTH9*-J#lQGtJM4wYhl{5)0*Hcr#u`7(zl2cI zReCo1PZeIBxy^EWiV2O^K^^vgfBv8FtrbxAz`G#$M+; z_hW|{+~g2)HWzj3UWR-vrovrphcr;r{iPr|r*`6s^E*RmV*)1mveLa^n|q~wow`i3 zyx)?Oq-kH~;aj`K;d)1hGxWgxpPnQ7(t)Yehkp>^FrKV1vv^43%RVd2wJ>heOQ%Rm z?3l(^zqTKXp2~l6pdVb@Hxei{|E-d|p6#ChJ1z|ru|}QdUeQT6Dd!a7&w2?l6kW+d zTM*rp2mkUX4{D#=y~E^4Hl!itLQLK%E4o4G%l3c(Tch(lw8MGOR{ns5AERh)g_Eqp zM;aUFH$nUTID&!OuX*3M;tOX!15dOJ^Fki{Ju32)hlC*I3YArKpjbaREMD)2zV-w& z*%SuB5XhOa=E21*99pM^gpElV%pz!}M5agJDF1!jTE~D>It902G@!vufTk`3RZ&0v z82qcb5Ifk)4H_sTrNRSfpv_C*)%=?;P#=VFB>Vn35U2e7LN^5eNwh}~eGgu0uM6hL zyXiZPI=mMX`lwS(sYGAF=lVa+{4@ppl_yxq*Dhz$k>*B+;N*XToPo3Vwe;clR9IGn zuBrhRBpsn<7g8*^yy&nDS-5YvBiW1l0f|3*B}=%)zq`o3@Rdvkz>+c4E-Fu~l=U3H z87u9)K}(W%?ahgO>V2ZCd@xz}Vh`oFQJ4}Yo~W$sNo45A-tD#BG^k zd$3CtUWPU?ny~zhsi7e~6uR^3Dj(OT#ueCdRlT*}rAx}nn$HYhR&W4d8#GPFt+dJ# zR&i##DblZzCu9n@fvkv{F9-@FqG4zn!C)({GaSV*+#CsrQUB?* zr4+H}BPg%)^I>O}g=WK%tB3{w63b`qN^}P=K-k{FU)G{9IIk*k$zFlRzHo2CkDiie z$`Ef~HE4Rt<@koq&M)7humV|(i%QckIx5?shGp^j4q)~;-5e?_;(*0r7u^(H!fHx4 zd*u^9e}UuqsN@!p8(`WeAwu)%Pq?LQZKsWmIvMnqO^?`DO>LFiHZTTmq5yl}m|{H| zXq|R8slZjny~20?EUIpMtS?daW`lmx2Xdl(Cs#ljm;+q2!4=nfuvdD0g3BZ4YDGem ze9}OTec6mWvJPbVC(yI)ESUjv)72%?*QUylv0j}Cr7)jSqZK}y^BKev>D>ikRiB(9 zb>UHNc^6$;QaS)VzICra$<_5J_m4mXO?hJxM`1K}Q=Rq4KwnNSdIFSyh8!+4G^nw6 zGUmdr(;v2Lpw?jnmBFya3!$52MR-rQVc5eaXPNjUeKL(byWyrN1$jd2Q&2W2QJ-o3+RE@ zeWUdyNnTL5m>0V1rP7jLH^8$}QCcrcWvEHk&C8igd|#L>fneD5<)?x0WJ${-LBLG8 zka96{sJ(`};njJ?bE|;DO305{&=$2ayU2laovnCgoYI1qozOq^LmvXiV%@Hk5`~HRJk&zZJuNg4U72?a zr%suB9QvB#tYMEOsIqsDwW0xs+>USyw@^G_fd&B;Av(iF&Da3rE?j8uh0wA9N>Y(- z>+IUtF-BhH9N-2gN=VF`VEx^@+wLL}k&Ld%sA3KUqs`*moF9F@r0si2seT(-WyQA)C#wOqnd%}qy*-gN72Qk+WmK~f}yuqfv5SZ z7uzKH;;rrzXu{ev8yUSRNCK-@5Qoy%6nJimf;cW~U95(fDPz3+`84>I>tYH8R?|! zWk+v3tJE4+G{cg*f3GZCdmqoa(>A1Pm&c_Lenqqf-OvoFJkWT+pW%GC^R_78|FsOKBU;s2v82arL7B~$zem5;dL2t+#)!w*nEhyA zj1kDW5LOc&aHbFE%Dj2I13=OfS6svRk$9byC^_C&$@? z->(jq$KlzAD6gXq39C~UbwIAmPAr9Yt>sWoZ z@JWkW?rJv;6Ln)Ie`J6wnlLA&c^|I1zMr^sGU1cd{h_A^7t5G~d~JDb7gzRf@9(IE z1iOy=`rYn_C^$JqblRxStj$Y2dU-{+n`jN2yb5>C*Ug>G7RM!zDEglNBGQ52YBZ0= zT1P0UM~zf#KV!^zn19A7=I!e*bfPY=zBUW@dlzG_S?s3M$OZvW19uF6SFvDNO__Cw zcGsw9Uxs${!UeakzEPQh1Q1A<_Y7Ho8Ya)A#By`}oO_CslyqP0%yi zVNyqGURpTJ4yJsB6sQf@DDY!qPBMSQAqb7GEZHo*r{5miQVSG?S-;iX!)s>hn>TEQ zK6o6mhoR~N4F@y1UFgH#p4BNeCekaLM!D~(4h_vFLC5-}{6^wY9BE2;ET4}*j$Uer z`o-ma#)%D@Wr70T^jyD~@<0yn+fnQL{KHNPyeAJ%D~gsbyQk;tPKqy{im5qV-El~k zq)T@<&Z+o9g7d%lCr-B|t{oS@rF+M|HNjjv&*R?%*meHJTlPj%ET;%7Nt`iTP9X=- zHx}Ogz8$>QrS-Mt&GvDVF$#}c#~Pn_w*CTT*-E{JVQZ9t>?wD~ifr*GG(Tbd3uqP& z_13U=v-)>Xuc!3PTf zjf|_wlH`X;O0S@i6OcEV7$YeCf-C;h#td3OTI4ZP1sJNCbq7DOP%-{Ud#&u~lvT)S zGaOffV1%V3b!vDjj@Qel7#q}HFQrh_$k)N9qVgF21AXi~_hjrNOT=KFSjom_CbrIc z#L7=zwV`s6w5smyoTcgMo|4_9^R+AH{-QB+EYBCrUw6q6pZjmrAuM|$M{y5yu+Q>| zvV9H-Rg~83NbPE)C$;Z}%7@s~xRR05HCNqg22ojQyMlg+>j_8j>d6xW=pI>lyQDZ9 zVngkUENC)PfC_cv!RbcHfQ~(o_(-w^AIAZ&BhpiBR0gS)Pg;~{=^B->PIN{>7Gy`g z?p)1ZFM(E!o7#;f&13k5L@5RejNv)44@H!>s{(2M9sl=%t%(<-J`nIS_K-7=}(wz~(>4G4yB)FhSlImO-^uPULCm6wP8CQlt64gHd^?;dvPQ z+5vTa;mR!MdL7o|a%J*YhFU%L*09Oaw>DVFxM{o|t(dp%IYO4=A9;D%x1!dEWq;J%lC&=U+5bSKDA1ammWfio4!qE7uov)NU?qM&aE=$ zK8j;sc=$98-;1SLZ12k%F0cJpei}twFU!v>1L~5iW^lVyB0dlgL&0^4tVR7wk!FUuCuJJ!KTh)}~%;_`OAfJ+YAm926WHOt-W; zzWZ%LTm5r|yI3gS`T772+DFu@wHdwL_Z#++kmz?GyXY}yL%4rwUg_MIXUFd@W;&PG zKovL8d22>V9M7_$$SyXR`x3<6kKphJjvCEqGbU*`R!pqN?K*h&AZ^kUg&6+!(O)^s zlJ<_C#73K@LquB=)eC9<0EaOCE(eaFYt1sIPRa~xXCnkS#82EoaLwY}=Q0ML)AOW{ zg|PYACfne((+28*qWyu@t}hlOBZ8jxzKt#1cJ{hRD1UU9u!G`HZ;l=IXj#z&3sKiZhXP_m^&P9r1}w8HIq*t56128FrI2?UMl_O6jum$Zq*rmY{sXY@HB-s zxoVbbv*ygG0|)fhkhd7G5Ua&05`I_$`yUNdjJw6#LdSb_+EE;Xz3k12;)}Hi4a-AD z67mu#mP)>>BY?jT<<-!9*i zhfOH-X*cqLY4QskUXz-E-dk1maWto_cE2PN*doIrz%BH_Cqw2B3MV0P<>$AJbNwGH zngpnp2bidHE~hyvjvemshLA$E?mVX@#dqTznaK$$ENJSp#5;0o>w@?pTUKvvQZHX( zqfa^)x|`;E{d4S=wr`qw%vD4=sJ;1XpOnnu%(xG`8Z_n*`xgY#?a3&9ZJ%Nd4+_E% zpw~Z2R;T&TiLmbqpF)&+<cJ}&Z7mRO$hWMw~I_bw^ zLKoRnj*N2L3RZ(FhkMMy7o9>d<*#97!9N$RcNmghIhy|D=00MymoJE+7wRh@l3UgA zCcUR1w}ap;4Mc4=F6m}b3{unUhcRCRFhY4xxJ(MIu^8Pyej!hH6&i{|G?~cc^?c+W#TXu3I zJ1R-`NYvSj*jW`^jHBP+sRvGdWU;raPJO5pUhRQoQ6^c*;ideYs#&F|XHp&Z z@1Nk#PzQb{;6zA8dJdQj{PF{w#Xo!th8HSNL_8$(J({$Av!g0H$P9@8?X8IPcEQSR0-Z{qWpAR|0H|8edh`*(8-d$ z4Z0%AF7Yb23uaI>E z@D_}^OtONgs3A1W-1nm13RPo|{bPZOYHI4GrvB{ifV>KwYIL9$Fe*MN;qn1|ffhqm z7c)1tlbH*T^^kT8nwm&8)Ar&bApFwohDsUlR~%asT}` zs-sp1oiKq|y0IvXBQGC9C`!Az0iJ#37t8&s#|3w6GC`wG7yhdLy3G zE@~+N-vmvj`1lA{)RH^m9d{0S5evrg#Qjy_5E%W}aG?pyU#>D3Ty6GMbk;z@sRum@ zIoOyjh1O3fpzExqiW~|Gj^V8iJk<+mW`dp1JYnI>-691Fe?=#m@6%Jx=A`p~hf>2- zDgg%OnocoR#X;KceO>A|<7_5@HEdmVGIRMfcFZ)=I!5#BeTI_nRmz#+x1py3dj*I_ z8oS>7EWsvQNrlQ&$p+EmIsxy9Bd0e3^54&X9k#0ULg?CaN#>}%CW4-}yQj=6#T*Ov z)tX^f()6^=ijUODsqqjwjO2bPB$2g?s9yU*ukL=B2O|@4OcXeY5?Rett#ypCI7dA0 zKvnX&+`DyCh;<PRPg)f?A;rm24oE!K4OrwRm5104L)W6`#)$w z{7U@Ty3i;RrP=_|qzxZ%q zhjd|CRjB6IxknR8--9;d@ZU$ZPJ1mjsJ{lF3b90E0D^h%-^cy)FV=`7mrw*0j zXW2)!UhX{`ka>VN1#M~>|Fy?9675OJcMEm)$UtQQq#MZHsrX}jMYq7gEGI8mFub2V zTB~6Kves4%LArxhf}|{hv=sPII>-?Ee;Bh=Yb#jTZvlgM86^G>w3t=yE1x6c1aHaz z_78~9hn)NVBV8I#d}e`@!G2HukoUItLplc|kHqZ3jJ_su_31S+ZCV`zb1 zW-$E6HNiVWC-%3*;17F<26;hh!=DQQl>`|GJ9i6Ic9rb^=|UV$kkdt65mqwrr+??v zRI`ENKntiQ4e^^z*i9fcL#d7x9#M-Mj$Z{%j0Nh8K%js5qix?+kPfKGLebj8ecIRb z04cb>47%@BC^u3x^q&9v4T4KF!5nxA=Eu;`@lH^|KLZi{@cSIGj*lQ8ngBvZ2M#Nj zpN)P2R&Bb+x4IW>;Co>~OOvpCUPgDcS{INUPb}xdDs!bWjIABCKjluM;qbh68R>t! zH^+4QPlgx{HH)b+<^lBxjPwkdf=5BdUni~}V7cT>#V(^e4fV$T#nUFkK>kdz$T<#I zoo79Ya*nSP9F=?5`FyIl?%Yf@Ig<#Hla<8R=+{F;8#JIGM!Q!g1Th|7x$yIPn3Uoc zP&8TKOPJn*V^bQ0z(~IqPS<=994CC8q_J7%0D9<#n3pTgASZ(9IIckuq(deiLqe{h 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 SNl_I1cj>~F^EvYRzW)#HlwcVE literal 0 HcmV?d00001 From 93faa3dcc39d8859cc4505e7fa4e15067f334a8a Mon Sep 17 00:00:00 2001 From: Frank Malatino Date: Wed, 8 Jan 2025 15:10:27 -0500 Subject: [PATCH 3/5] Linting --- docs/builddocs.sh | 2 +- docs/requirement_docs.txt | 2 +- docs/sphinx_doc/Makefile | 2 +- docs/sphinx_doc/conf.py | 72 ++++++++++++++++---------------- docs/sphinx_doc/dace.rst | 4 +- docs/sphinx_doc/docker.rst | 2 +- docs/sphinx_doc/gt4py.rst | 4 +- docs/sphinx_doc/index.rst | 2 +- docs/sphinx_doc/make.bat | 2 +- docs/sphinx_doc/overview.rst | 2 +- docs/sphinx_doc/program_guid.rst | 2 +- docs/sphinx_doc/test.rst | 2 +- docs/sphinx_doc/testing.rst | 2 +- docs/sphinx_doc/users_guide.rst | 20 ++++----- 14 files changed, 60 insertions(+), 60 deletions(-) diff --git a/docs/builddocs.sh b/docs/builddocs.sh index c69c4aa2..3abe626a 100644 --- a/docs/builddocs.sh +++ b/docs/builddocs.sh @@ -21,4 +21,4 @@ make html echo "" echo -e "-- ${GRN}Building Docs Complete${NC} --" -echo -e "See ${YEL}sphinx_doc/_build/html/${NC} for sphinx html files" \ No newline at end of file +echo -e "See ${YEL}sphinx_doc/_build/html/${NC} for sphinx html files" diff --git a/docs/requirement_docs.txt b/docs/requirement_docs.txt index 3c166124..02306dcc 100644 --- a/docs/requirement_docs.txt +++ b/docs/requirement_docs.txt @@ -2,4 +2,4 @@ recommonmark sphinx>=1.4 sphinx-argparse sphinx_rtd_theme -sphinx-gallery \ No newline at end of file +sphinx-gallery diff --git a/docs/sphinx_doc/Makefile b/docs/sphinx_doc/Makefile index 6ce0d3c0..17354e4f 100644 --- a/docs/sphinx_doc/Makefile +++ b/docs/sphinx_doc/Makefile @@ -222,4 +222,4 @@ pseudoxml: dummy: $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy @echo - @echo "Build finished. Dummy builder generates no files." \ No newline at end of file + @echo "Build finished. Dummy builder generates no files." diff --git a/docs/sphinx_doc/conf.py b/docs/sphinx_doc/conf.py index b3a7d7fb..1ec8aa2a 100644 --- a/docs/sphinx_doc/conf.py +++ b/docs/sphinx_doc/conf.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- # # import os -import sys + + # sys.path.insert(0, os.path.abspath('.')) -#sys.path.append("../breathe") +# sys.path.append("../breathe") # -- General configuration ------------------------------------------------ @@ -14,49 +15,49 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [ 'sphinx.ext.mathjax'] +extensions = ["sphinx.ext.mathjax"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] -#breathe_projects = {"NDSL": "../doxygen_output/xml/"} -#breathe_default_project = "NDSL" +templates_path = ["_templates"] +# breathe_projects = {"NDSL": "../doxygen_output/xml/"} +# breathe_default_project = "NDSL" -#fortran_src ='../../Source/Src_2d/' -#fortran_ext =[' 'F90'] +# fortran_src ='../../Source/Src_2d/' +# fortran_ext =[' 'F90'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The encoding of source files. # # source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = u'NDSL' -copyright = u' ' -author = u'NOAA/NASA NDSL development team' +project = u"NDSL" +copyright = u" " +author = u"NOAA/NASA NDSL development team" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = u'0.1' +version = u"0.1" # The full version, including alpha/beta/rc tags. -release = u'0.1' +release = u"0.1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = 'en' +language = "en" # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: @@ -70,7 +71,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The reST default role (used for this markup: `text`) to use for all # documents. @@ -92,7 +93,7 @@ # show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] @@ -104,15 +105,15 @@ todo_include_todos = False numfig = True -numfig_format = {'figure': '%s', 'table': '%s', 'code-block': '%s'} +numfig_format = {"figure": "%s", "table": "%s", "code-block": "%s"} # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -#html_theme = 'nature' -html_theme = 'sphinx_rtd_theme' +# html_theme = 'nature' +html_theme = "sphinx_rtd_theme" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -146,7 +147,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['static'] +html_static_path = ["static"] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied @@ -226,7 +227,7 @@ # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. -htmlhelp_basename = 'ndsl document' +htmlhelp_basename = "ndsl document" # -- Options for LaTeX output --------------------------------------------- @@ -234,15 +235,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -252,8 +250,7 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'NDSL.tex', u'NDSL Documentation', - author, 'manual'), + (master_doc, "NDSL.tex", u"NDSL Documentation", author, "manual"), ] # The name of an image file (relative to this directory) to place at the top of @@ -293,10 +290,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'ndsl', u'NDSL Documentation', - [author], 1) -] +man_pages = [(master_doc, "ndsl", u"NDSL Documentation", [author], 1)] # If true, show URL addresses after external links. # @@ -309,9 +303,15 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'ndsl', u'NDSL Documentation', - author, 'NDSL', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "ndsl", + u"NDSL Documentation", + author, + "NDSL", + "One line description of project.", + "Miscellaneous", + ), ] # Documents to append as an appendix to all manuals. @@ -328,4 +328,4 @@ # If true, do not generate a @detailmenu in the "Top" node's menu. # -# texinfo_no_detailmenu = False \ No newline at end of file +# texinfo_no_detailmenu = False diff --git a/docs/sphinx_doc/dace.rst b/docs/sphinx_doc/dace.rst index 231cacdf..3c7ed191 100644 --- a/docs/sphinx_doc/dace.rst +++ b/docs/sphinx_doc/dace.rst @@ -1,9 +1,9 @@ Dace ============ -DaCe is a parallel programming framework developed at Scalable Parallel Computing Laboratory (SPCL), DaCe is a high level intermediate representation (IR) that parses most of the Python/NumPy semantcs, and Fortran programming languages in the frontend to DaCe IR, and then optimizes the IR by passes/transformations, the DaCe IRs then used by the backend codegen to generate highly efficient C++ code for high-performance CPU, GPU, and FPGA hardware devices. +DaCe is a parallel programming framework developed at Scalable Parallel Computing Laboratory (SPCL), DaCe is a high level intermediate representation (IR) that parses most of the Python/NumPy semantcs, and Fortran programming languages in the frontend to DaCe IR, and then optimizes the IR by passes/transformations, the DaCe IRs then used by the backend codegen to generate highly efficient C++ code for high-performance CPU, GPU, and FPGA hardware devices. DaCe IR uses the Stateful Dataflow multiGraphs (SDFG) data-centric intermediate representation: A transformable, interactive representation of code based on data movement. Since the input code and the SDFG are separate, it is possible to optimize a program without changing its source, so that it stays readable. On the other hand, the used optimizations are customizable and user-extensible, so they can be written once and reused in many applications. With data-centric parallel programming, we enable direct knowledge transfer of performance optimization, regardless of the application or the target processor. For more detailed document about DaCe, please refer to the following link: -https://spcldace.readthedocs.io/en/latest/index.html \ No newline at end of file +https://spcldace.readthedocs.io/en/latest/index.html diff --git a/docs/sphinx_doc/docker.rst b/docs/sphinx_doc/docker.rst index e76a9ae7..702dad46 100644 --- a/docs/sphinx_doc/docker.rst +++ b/docs/sphinx_doc/docker.rst @@ -20,4 +20,4 @@ Then build the `pace` docker image at the top level: $ make build -.. _`Docker Desktop`: https://www.docker.com/ \ No newline at end of file +.. _`Docker Desktop`: https://www.docker.com/ diff --git a/docs/sphinx_doc/gt4py.rst b/docs/sphinx_doc/gt4py.rst index 5469d08a..d67b31ff 100644 --- a/docs/sphinx_doc/gt4py.rst +++ b/docs/sphinx_doc/gt4py.rst @@ -1,7 +1,7 @@ -Gt4py +Gt4py ========== pace-physics includes the Python implementation of GFS physics built using the GT4Py domain-specific language. Currently, only GFDL cloud microphysics is integrated into Pace. Additional physics schemes (NOAH land surface, GFS sea ice, scale-aware mass-flux shallow convection, hybrid eddy-diffusivity mass-flux PBL and free atmospheric turbulence, and rapid radiative transfer model) have been ported indendepently and are available in the `physics-standalone`_ repository. -Additional work is required to integrate these schemes. \ No newline at end of file +Additional work is required to integrate these schemes. diff --git a/docs/sphinx_doc/index.rst b/docs/sphinx_doc/index.rst index dc2dc926..7bca8c73 100644 --- a/docs/sphinx_doc/index.rst +++ b/docs/sphinx_doc/index.rst @@ -24,4 +24,4 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` -* :ref:`search` \ No newline at end of file +* :ref:`search` diff --git a/docs/sphinx_doc/make.bat b/docs/sphinx_doc/make.bat index 1ae0138d..9a939bdb 100644 --- a/docs/sphinx_doc/make.bat +++ b/docs/sphinx_doc/make.bat @@ -278,4 +278,4 @@ if "%1" == "dummy" ( goto end ) -:end \ No newline at end of file +:end diff --git a/docs/sphinx_doc/overview.rst b/docs/sphinx_doc/overview.rst index c90c0a88..869db000 100644 --- a/docs/sphinx_doc/overview.rst +++ b/docs/sphinx_doc/overview.rst @@ -123,4 +123,4 @@ Install Pace with different NDSL backend: $ pip3 install -r requirements_dev.txt -c constraints.txt - - There are also separate requirements files which can be installed for linting (`requirements_lint.txt`) and building documentation (`requirements_docs.txt`). \ No newline at end of file + - There are also separate requirements files which can be installed for linting (`requirements_lint.txt`) and building documentation (`requirements_docs.txt`). diff --git a/docs/sphinx_doc/program_guid.rst b/docs/sphinx_doc/program_guid.rst index 6eff3a64..d95ad724 100644 --- a/docs/sphinx_doc/program_guid.rst +++ b/docs/sphinx_doc/program_guid.rst @@ -1,4 +1,4 @@ Program Guide ============= -This page will include general introductory information about NDSL, including external links to docs. \ No newline at end of file +This page will include general introductory information about NDSL, including external links to docs. diff --git a/docs/sphinx_doc/test.rst b/docs/sphinx_doc/test.rst index 7837929f..d077738f 100644 --- a/docs/sphinx_doc/test.rst +++ b/docs/sphinx_doc/test.rst @@ -62,4 +62,4 @@ We suggest reading the Makefile for a full list of translate test targets. Check $ make test_savepoint -.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation \ No newline at end of file +.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation diff --git a/docs/sphinx_doc/testing.rst b/docs/sphinx_doc/testing.rst index 7837929f..d077738f 100644 --- a/docs/sphinx_doc/testing.rst +++ b/docs/sphinx_doc/testing.rst @@ -62,4 +62,4 @@ We suggest reading the Makefile for a full list of translate test targets. Check $ make test_savepoint -.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation \ No newline at end of file +.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation diff --git a/docs/sphinx_doc/users_guide.rst b/docs/sphinx_doc/users_guide.rst index 8972ce20..d5e3d5e8 100644 --- a/docs/sphinx_doc/users_guide.rst +++ b/docs/sphinx_doc/users_guide.rst @@ -3,11 +3,11 @@ Users Guide 1: Introduction ---------------- -Recently, Python has became the dominant programming language in machine learning and data sciences community since it is easy to learn and program, however the performance of Python is still the major concern in scientific computing and HPC community. In scientific computing and HPC community, the most widely used programming language is C/C++ and Fortran, Python is often used as script language for pre- and post-processing. Although, many complains about Python program performance happened from time to time, and obviously, Python program community didn't take it seriously in the language standard consideration. +Recently, Python has became the dominant programming language in machine learning and data sciences community since it is easy to learn and program, however the performance of Python is still the major concern in scientific computing and HPC community. In scientific computing and HPC community, the most widely used programming language is C/C++ and Fortran, Python is often used as script language for pre- and post-processing. Although, many complains about Python program performance happened from time to time, and obviously, Python program community didn't take it seriously in the language standard consideration. The major performance issue in Python programming language, especially in computation-intensive applications, are loops, which are often the performance bottlenecks of an application in other programming languages too, such as C++ and Fortran. However, Python program often observes 10x to 100x slower than C, C++ and Fortran program. In order to achieve peak hardware performance, the scientific computing community have tried different programming model, such as OpenMP, Cilk+, Thread Building Blocks (TBB) as well as Linux p-threads for multi/many-core processors and GPUs, and Kokkos, RAJA, OpenMP offload, and OpenACC for highest performance on CPU/GPUs heterogeneous system, all these programming models are only available for C, C++ and Fortran. Only a few works that target to high perfromance for Python programming language. -The Python based NDSL programming model described in this users guide provides an alternative solution to reach peak hardware performance with relatively little programming effort by using the stencil semantics. A stencil is similar to parallel for kernel that used in Kokkos and RAJA, to update array elements according to a fixed access pattern. With the stencil semantics in mind, NDSL, for example, can be used to write matrix multiplication kernels that match the performance of cuBLAS/hipBLAS that many GPU programmers can’t do in Cuda/HiP using only about 30 lines of code. It greatly reduces the programmer's effort, and NDSL has already been successfully used in Pace global climate model, which achieves up to 4x speedup, more efficient than the original Fortran implementations. +The Python based NDSL programming model described in this users guide provides an alternative solution to reach peak hardware performance with relatively little programming effort by using the stencil semantics. A stencil is similar to parallel for kernel that used in Kokkos and RAJA, to update array elements according to a fixed access pattern. With the stencil semantics in mind, NDSL, for example, can be used to write matrix multiplication kernels that match the performance of cuBLAS/hipBLAS that many GPU programmers can’t do in Cuda/HiP using only about 30 lines of code. It greatly reduces the programmer's effort, and NDSL has already been successfully used in Pace global climate model, which achieves up to 4x speedup, more efficient than the original Fortran implementations. 2: Programming model ---------------------------------------------------- @@ -23,7 +23,7 @@ The programming model of NDSL is composed of backend execution spaces, performan -In NDSL, the python frontend code takes the user defined stencils to python AST using builtin ast module. In an AST, each node is an object defined in python AST grammar class (for more details, please refer: https://docs.python.org/3/library/ast.html). the AST node visitor (the NDSL/external/gt4py/src/gt4py/cartesian/frontend/gtscript_frontend.py) IRMaker class traverses the AST of a python function decorated by @gtscript.function and/or stencil objects, the Python AST of the program is then lowing to the Definition IR. The definition IR is high level IR, and is composed of high level program, domain-specific information, and the structure of computational operations which are independent of low level hardware platform. The definition of high level IR allows transformation of the IRs without lossing the performance of numerical libraries. However, the high level IR doesn't contains detailed information that required for performance on specific low level runtime hardware. Specificially, the definition IR only preserves the necessary information to lower operations to runtime platform hardware instructions implementing coarse-grained vector operations, or to numerical libraries — such as cuBLAS/hipBLAS and Intel MKL. +In NDSL, the python frontend code takes the user defined stencils to python AST using builtin ast module. In an AST, each node is an object defined in python AST grammar class (for more details, please refer: https://docs.python.org/3/library/ast.html). the AST node visitor (the NDSL/external/gt4py/src/gt4py/cartesian/frontend/gtscript_frontend.py) IRMaker class traverses the AST of a python function decorated by @gtscript.function and/or stencil objects, the Python AST of the program is then lowing to the Definition IR. The definition IR is high level IR, and is composed of high level program, domain-specific information, and the structure of computational operations which are independent of low level hardware platform. The definition of high level IR allows transformation of the IRs without lossing the performance of numerical libraries. However, the high level IR doesn't contains detailed information that required for performance on specific low level runtime hardware. Specificially, the definition IR only preserves the necessary information to lower operations to runtime platform hardware instructions implementing coarse-grained vector operations, or to numerical libraries — such as cuBLAS/hipBLAS and Intel MKL. The definition IR is then transformed to GTIR (gt4py/src/gt4py/cartesian/frontend/defir_to_gtir.py), the GTIR stencils is defined as in NDSL @@ -47,7 +47,7 @@ The definition IR is then transformed to GTIR (gt4py/src/gt4py/cartesian/fronten -GTIR is also a high level IR, it contains `vertical_loops` loop statement, in the climate applications, the vertical loops usually need special treatment as the numerical unstability is arison. The `vertical_loops` in GTIR as separate code block and help the following performance pass and transofrmation implementation. The program analysis pass/transformation is applied on the GTIR to remove the redunant nodes, and prunning the unused parameters, and data type and shape propogations of the symbols, and loop extensions. +GTIR is also a high level IR, it contains `vertical_loops` loop statement, in the climate applications, the vertical loops usually need special treatment as the numerical unstability is arison. The `vertical_loops` in GTIR as separate code block and help the following performance pass and transofrmation implementation. The program analysis pass/transformation is applied on the GTIR to remove the redunant nodes, and prunning the unused parameters, and data type and shape propogations of the symbols, and loop extensions. The GTIR is then further lowered to optimization IR (OIR), which is defined as @@ -66,12 +66,12 @@ The GTIR is then further lowered to optimization IR (OIR), which is defined as _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) -The OIR is particularly designed for performance optimization, the performation optimization algorithm are carried out on OIR by developing pass/transorformations. Currently, the vertical loop merging, and horizonal execution loop merging, and loop unrolling and vectorization, statement fusion and pruning optimizations are available and activated by the environmental variable in the oir_pipeline module. +The OIR is particularly designed for performance optimization, the performation optimization algorithm are carried out on OIR by developing pass/transorformations. Currently, the vertical loop merging, and horizonal execution loop merging, and loop unrolling and vectorization, statement fusion and pruning optimizations are available and activated by the environmental variable in the oir_pipeline module. -After the optimization pipeline finished, the OIR is then converted to different backend IR, for example, DACE IR (SDFG). The DACE SDFG can be further optimizated by its embeded pass/transormations algorithm, but in PACE application, we didn't activate this optimization step. It should be pointed out that, during the OIR to SDFG process, the `horizontal execution` node is serialized to SDFG library node, within which the loop expansion information is encrypted. +After the optimization pipeline finished, the OIR is then converted to different backend IR, for example, DACE IR (SDFG). The DACE SDFG can be further optimizated by its embeded pass/transormations algorithm, but in PACE application, we didn't activate this optimization step. It should be pointed out that, during the OIR to SDFG process, the `horizontal execution` node is serialized to SDFG library node, within which the loop expansion information is encrypted. -When using GT backend, the OIR is then directly used by the `gt4py` code generator to generate the C++ gridtool stencils (computation code), and the python binding code. In this backend, each `horizontal execution` node will be passed to and generate a seperate gridtool stencil. +When using GT backend, the OIR is then directly used by the `gt4py` code generator to generate the C++ gridtool stencils (computation code), and the python binding code. In this backend, each `horizontal execution` node will be passed to and generate a seperate gridtool stencil. NDSL also supports the whole program optimization model, this is called orchestration model in NDSL, currently it only supports DaCe backend. Whole program optimziation with DaCe is the process of turning all Python and GT4Py code in generated C++. Only _orchestrate_ the runtime code of the model is applied, e.g. everything in the `__call__` method of the module and all code in `__init__` is executed like a normal GT backend. @@ -94,7 +94,7 @@ The orchestration has two parameters: config (will expand later) and `dace_compi DaCe needs to be described all memory so it can interface it in the C code that will be executed. Some memory is automatically parsed (e.g. numpy, cupy, scalars) and others need description. In our case `Quantity` and others need to be flag as `dace.compiletime` which tells DaCe to not try to AOT the memory and wait for JIT time. The `dace_compiletime_args` helps with tagging those without having to change the type hint. -Figure 2 shows the hierarchy levels of intermediate representations (IR) and the lowing process when orchestration option is activated. +Figure 2 shows the hierarchy levels of intermediate representations (IR) and the lowing process when orchestration option is activated. .. Figure 2: @@ -106,7 +106,7 @@ Figure 2 shows the hierarchy levels of intermediate representations (IR) and the -When the orchestrated option is turned on, the call method object is patched in place, replacing the orignal Callable with a wrapper that will trigger orchestration at call time. If the model configuration doesn't demand orchestration, this won't do anything. The orchestrated call methods and the computational stencils (lazy computational stencils) which are cached in a container, will be parsed to python AST by the frontend code during the runtime, then the python AST code will be converted to DaCe SDFG. The analysis and optimization will be applied before the C++ code is generated by the codegen, this process is called Just In Time (JIT) build, compared with the non-orchestration model, which is eagerly compiled and build. The JIT build caches the build information of computational stencils, and orchestrated methods, and it is more convenient to apply the analysis and optimization pass to the overall code, such as the merging of neighbor stencils made easy. Therefore, more optimized code can be generated, and better performance can be achieved during runtime. +When the orchestrated option is turned on, the call method object is patched in place, replacing the orignal Callable with a wrapper that will trigger orchestration at call time. If the model configuration doesn't demand orchestration, this won't do anything. The orchestrated call methods and the computational stencils (lazy computational stencils) which are cached in a container, will be parsed to python AST by the frontend code during the runtime, then the python AST code will be converted to DaCe SDFG. The analysis and optimization will be applied before the C++ code is generated by the codegen, this process is called Just In Time (JIT) build, compared with the non-orchestration model, which is eagerly compiled and build. The JIT build caches the build information of computational stencils, and orchestrated methods, and it is more convenient to apply the analysis and optimization pass to the overall code, such as the merging of neighbor stencils made easy. Therefore, more optimized code can be generated, and better performance can be achieved during runtime. 3: Analysis and Optimization @@ -114,7 +114,7 @@ When the orchestrated option is turned on, the call method object is patched in One of the major features of NDSL is that users can develop a new pass/transformation for the backend with new hardware, the passes and/or transformations are the key integrates in order to have good performance on the new hardware. In different abstract level, the passes and/or transformations perform different levels of optimization. For example, the loop level of optimization is independent of hardware, and can be applied to any backend, while the optimization of device placement, and memory and caches optimizations are dependent on different backend and hardware. In this section, we only focused on the optimizations that are independent of the backend hardware. -The general procedure of code optimization has two steps, in the first step, a filter function is called to find the pattern that need to apply the pass and/or transformation, then apply the pass and/or transoformation to the filtered pattern to insert or delte or replace the existing node with the optimizated node. In NDSL, the following passes and/transorformations are provided. +The general procedure of code optimization has two steps, in the first step, a filter function is called to find the pattern that need to apply the pass and/or transformation, then apply the pass and/or transoformation to the filtered pattern to insert or delte or replace the existing node with the optimizated node. In NDSL, the following passes and/transorformations are provided. 3.1: Prune Unused Parameters From 1272f90b7b6a95eab35a6b398d1bd85ba8399a8c Mon Sep 17 00:00:00 2001 From: Frank Malatino Date: Tue, 18 Feb 2025 11:43:28 -0500 Subject: [PATCH 4/5] Updated docs to reflect changes requested in PR 97 --- docs/sphinx_doc/conf.py | 4 +- docs/sphinx_doc/dace.rst | 4 +- docs/sphinx_doc/developer_guide.rst | 161 ++++++++++++++++++++++++++++ docs/sphinx_doc/docker.rst | 2 +- docs/sphinx_doc/fortran_porting.rst | 16 +++ docs/sphinx_doc/gt4py.rst | 6 +- docs/sphinx_doc/index.rst | 6 +- docs/sphinx_doc/overview.rst | 2 +- docs/sphinx_doc/program_guid.rst | 4 - docs/sphinx_doc/test.rst | 8 +- docs/sphinx_doc/testing.rst | 65 ----------- docs/sphinx_doc/users_guide.rst | 161 +--------------------------- 12 files changed, 195 insertions(+), 244 deletions(-) create mode 100644 docs/sphinx_doc/developer_guide.rst create mode 100644 docs/sphinx_doc/fortran_porting.rst delete mode 100644 docs/sphinx_doc/program_guid.rst delete mode 100644 docs/sphinx_doc/testing.rst diff --git a/docs/sphinx_doc/conf.py b/docs/sphinx_doc/conf.py index 1ec8aa2a..e31cccc9 100644 --- a/docs/sphinx_doc/conf.py +++ b/docs/sphinx_doc/conf.py @@ -48,9 +48,9 @@ # built documents. # # The short X.Y version. -version = u"0.1" +version = u"2025.01.00" # The full version, including alpha/beta/rc tags. -release = u"0.1" +release = u"2025.01.00" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/sphinx_doc/dace.rst b/docs/sphinx_doc/dace.rst index 3c7ed191..43057918 100644 --- a/docs/sphinx_doc/dace.rst +++ b/docs/sphinx_doc/dace.rst @@ -1,9 +1,9 @@ Dace ============ -DaCe is a parallel programming framework developed at Scalable Parallel Computing Laboratory (SPCL), DaCe is a high level intermediate representation (IR) that parses most of the Python/NumPy semantcs, and Fortran programming languages in the frontend to DaCe IR, and then optimizes the IR by passes/transformations, the DaCe IRs then used by the backend codegen to generate highly efficient C++ code for high-performance CPU, GPU, and FPGA hardware devices. +DaCe is a parallel programming framework developed at Scalable Parallel Computing Laboratory (SPCL). DaCe is a high level intermediate representation (IR) that parses most of the Python/NumPy semantics and Fortran programming languages in the frontend to DaCe IR, and then optimizes the IR by passes/transformations, the DaCe IRs are then used by the backend codegen to generate highly efficient C++ code for high-performance CPU, GPU, and FPGA hardware devices. -DaCe IR uses the Stateful Dataflow multiGraphs (SDFG) data-centric intermediate representation: A transformable, interactive representation of code based on data movement. Since the input code and the SDFG are separate, it is possible to optimize a program without changing its source, so that it stays readable. On the other hand, the used optimizations are customizable and user-extensible, so they can be written once and reused in many applications. With data-centric parallel programming, we enable direct knowledge transfer of performance optimization, regardless of the application or the target processor. +DaCe IR's use the Stateful Dataflow multiGraphs (SDFG) data-centric intermediate representation: A transformable, interactive representation of code based on data movement. Since the input code and the SDFG are separate, it is possible to optimize a program without changing its source, so that it stays readable. On the other hand, the used optimizations are customizable and user-extensible, so they can be written once and reused in many applications. With data-centric parallel programming, we enable direct knowledge transfer of performance optimization, regardless of the application or the target processor. For more detailed document about DaCe, please refer to the following link: https://spcldace.readthedocs.io/en/latest/index.html diff --git a/docs/sphinx_doc/developer_guide.rst b/docs/sphinx_doc/developer_guide.rst new file mode 100644 index 00000000..bc600d6a --- /dev/null +++ b/docs/sphinx_doc/developer_guide.rst @@ -0,0 +1,161 @@ +Developer Guide +============= + +1: Introduction +---------------- +Recently, Python has became the dominant programming language in the machine learning and data sciences communities since it is easy to learn and program. However, the performance of Python is still a major concern in scientific computing and HPC community. In the scientific computing and HPC community, the most widely used programming languages are C/C++ and Fortran, Python is often used as script language for pre- and post-processing. + +The major performance issue in Python programming language, especially in computation-intensive applications, are loops, which are often the performance bottlenecks of an application in other programming languages too, such as C++ and Fortran. However, Python programs are often observed to be 10x to 100x slower than C, C++ and Fortran programs. In order to achieve peak hardware performance, the scientific computing communities have tried different programming models, such as OpenMP, Cilk+, and Thread Building Blocks (TBB), as well as Linux p-threads for multi/many-core processors and GPUs, Kokkos, RAJA, OpenMP offload, and OpenACC for highest performance on CPU/GPUs heterogeneous system. All of these programming models are only available for C, C++ and Fortran. Only a few work that target to high perfromance for Python programming language. + +The Python based NDSL programming model described in this developer's guide provides an alternative solution to reach peak hardware performance with relatively little programming effort by using the stencil semantics. A stencil is similar to parallel for kernels that are used in Kokkos and RAJA, to update array elements according to a fixed access pattern. With the stencil semantics in mind, NDSL, for example, can be used to write matrix multiplication kernels that match the performance of cuBLAS/hipBLAS that many GPU programmers can’t do in Cuda/HiP using only about 30 lines of code. It greatly reduces the programmer's effort, and NDSL has already been successfully used in the Pace global climate model, which achieves up to 4x speedup, more efficient than the original Fortran implementations. + +2: Programming model +---------------------------------------------------- +The programming model of NDSL is composed of backend execution spaces, performance optimization pass and transformations, and memory spaces, memory layout. These abstraction semantics allow the formulation of generic algorithms and data structures which can then be mapped to different types of hardware architectures. Effectively, they allow for compile time transformation of algorithms to allow for adaptions of varying degrees of hardware parallelism as well as of the memory hierarchy. Figure 1 shows the high level architecture of NDSL (without orchestration option), From Fig. 1, it is shown that NDSL uses hierarchy levels intermediate representation (IR) to abstract the structure of computational program, whcih reduces the complexity of application code, and maintenance cost, while the code portability and scalability are increased. This method also avoids raising the information from lower level representations by means of static analysis, and memory leaking, where feasible, and performaing optimizations at the high possible level of abstraction. The methods primarily leverages structural information readily available in the source code, it enables to apply the optimization, such as loop fusion, tiling and vectorization without the need for complicated analysis and heuristics. + +.. Figure 1: + +.. figure:: static/ndsl_flow.png + :width: 860 + :align: center + + the high-level architecture of NDSL stencil life cycle for non-orchestration run. + + + +In NDSL, the python frontend code takes the user defined stencils to python AST using builtin ast module. In an AST, each node is an object defined in python AST grammar class (for more details, please refer: https://docs.python.org/3/library/ast.html). the AST node visitor (the NDSL/external/gt4py/src/gt4py/cartesian/frontend/gtscript_frontend.py) IRMaker class traverses the AST of a python function decorated by @gtscript.function and/or stencil objects, the Python AST of the program is then lowing to the Definition IR. The definition IR is high level IR, and is composed of high level program, domain-specific information, and the structure of computational operations which are independent of low level hardware platform. The definition of high level IR allows transformation of the IRs without lossing the performance of numerical libraries. However, the high level IR doesn't contains detailed information that required for performance on specific low level runtime hardware. Specificially, the definition IR only preserves the necessary information to lower operations to runtime platform hardware instructions implementing coarse-grained vector operations, or to numerical libraries — such as cuBLAS/hipBLAS and Intel MKL. + + +The definition IR is then transformed to GTIR (gt4py/src/gt4py/cartesian/frontend/defir_to_gtir.py), the GTIR stencils is defined as in NDSL + +.. code-block:: none + + class Stencil(LocNode, eve.ValidatedSymbolTableTrait): + name: str + api_signature: List[Argument] + params: List[Decl] + vertical_loops: List[VerticalLoop] + externals: Dict[str, Literal] + sources: Dict[str, str] + docstring: str + + @property + def param_names(self) -> List[str]: + return [p.name for p in self.params] + + _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) + + + +GTIR is also a high level IR, it contains `vertical_loops` loop statement, in the climate applications, the vertical loops usually need special treatment as the numerical unstability is arison. The `vertical_loops` in GTIR as separate code block and help the following performance pass and transofrmation implementation. The program analysis pass/transformation is applied on the GTIR to remove the redunant nodes, and prunning the unused parameters, and data type and shape propogations of the symbols, and loop extensions. + + +The GTIR is then further lowered to optimization IR (OIR), which is defined as + + +.. code-block:: none + + class Stencil(LocNode, eve.ValidatedSymbolTableTrait): + name: str + # TODO: fix to be List[Union[ScalarDecl, FieldDecl]] + params: List[Decl] + vertical_loops: List[VerticalLoop] + declarations: List[Temporary] + + _validate_dtype_is_set = common.validate_dtype_is_set() + _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) + + +The OIR is particularly designed for performance optimization, the performation optimization algorithm are carried out on OIR by developing pass/transorformations. Currently, the vertical loop merging, and horizonal execution loop merging, and loop unrolling and vectorization, statement fusion and pruning optimizations are available and activated by the environmental variable in the oir_pipeline module. + + +After the optimization pipeline finished, the OIR is then converted to different backend IR, for example, DACE IR (SDFG). The DACE SDFG can be further optimizated by its embeded pass/transormations algorithm, but in PACE application, we didn't activate this optimization step. It should be pointed out that, during the OIR to SDFG process, the `horizontal execution` node is serialized to SDFG library node, within which the loop expansion information is encrypted. + +When using GT backend, the OIR is then directly used by the `gt4py` code generator to generate the C++ gridtool stencils (computation code), and the python binding code. In this backend, each `horizontal execution` node will be passed to and generate a seperate gridtool stencil. + + +NDSL also supports the whole program optimization model, this is called orchestration model in NDSL, currently it only supports DaCe backend. Whole program optimziation with DaCe is the process of turning all Python and GT4Py code in generated C++. Only _orchestrate_ the runtime code of the model is applied, e.g. everything in the `__call__` method of the module and all code in `__init__` is executed like a normal GT backend. + +At the highest level in Pace, to turn on orchestration you need to flip the `FV3_DACEMODE` to an orchestrated options _and_ run a `dace:*` backend (it will error out if run anything else). Option for `FV3_DACEMODE` are: + +- _Python_: default, turns orchestration off. +- _Build_: build the SDFG then exit without running. See Build for limitation of build strategy. +- _BuildAndRun_: as above, but distribute the build and run. +- _Run_: tries to execute, errors out if the cache don't exists. + +Code is orchestrated two ways: + +- functions are orchestrated via `orchestrate_function` decorator, +- methods are orchestrate via the `orchestrate` function (e.g. `pace.driver.Driver._critical_path_step_all`) + +The later is the way we orchestrate in our model. `orchestrate` is often called as the first function in the `__init__`. It patches _in place_ the methods and replace them with a wrapper that will deal with turning it all into executable SDFG when call time comes. + +The orchestration has two parameters: config (will expand later) and `dace_compiletime_args`. + +DaCe needs to be described all memory so it can interface it in the C code that will be executed. Some memory is automatically parsed (e.g. numpy, cupy, scalars) and others need description. In our case `Quantity` and others need to be flag as `dace.compiletime` which tells DaCe to not try to AOT the memory and wait for JIT time. The `dace_compiletime_args` helps with tagging those without having to change the type hint. + +Figure 2 shows the hierarchy levels of intermediate representations (IR) and the lowing process when orchestration option is activated. + +.. Figure 2: + +.. figure:: static/ndsl_orchestration.png + :width: 860 + :align: center + + the high-level architecture of NDSL stencil life cycle for orchestration run. + + + +When the orchestrated option is turned on, the call method object is patched in place, replacing the orignal Callable with a wrapper that will trigger orchestration at call time. If the model configuration doesn't demand orchestration, this won't do anything. The orchestrated call methods and the computational stencils (lazy computational stencils) which are cached in a container, will be parsed to python AST by the frontend code during the runtime, then the python AST code will be converted to DaCe SDFG. The analysis and optimization will be applied before the C++ code is generated by the codegen, this process is called Just In Time (JIT) build, compared with the non-orchestration model, which is eagerly compiled and build. The JIT build caches the build information of computational stencils, and orchestrated methods, and it is more convenient to apply the analysis and optimization pass to the overall code, such as the merging of neighbor stencils made easy. Therefore, more optimized code can be generated, and better performance can be achieved during runtime. + + +3: Analysis and Optimization +---------------------------------------------------- +One of the major features of NDSL is that users can develop a new pass/transformation for the backend with new hardware, the passes and/or transformations are the key integrates in order to have good performance on the new hardware. In different abstract level, the passes and/or transformations perform different levels of optimization. For example, the loop level of optimization is independent of hardware, and can be applied to any backend, while the optimization of device placement, and memory and caches optimizations are dependent on different backend and hardware. In this section, we only focused on the optimizations that are independent of the backend hardware. + + +The general procedure of code optimization has two steps, in the first step, a filter function is called to find the pattern that need to apply the pass and/or transformation, then apply the pass and/or transoformation to the filtered pattern to insert or delte or replace the existing node with the optimizated node. In NDSL, the following passes and/transorformations are provided. + + + 3.1: Prune Unused Parameters + ----------------------------------------- + + .. code-block:: none + + def prune_unused_parameters(node: gtir.Stencil) -> gtir.Stencil: + assert isinstance(node, gtir.Stencil) + used_variables = ( + node.walk_values() + .if_isinstance(gtir.FieldAccess, gtir.ScalarAccess) + .getattr("name") + .to_list() + ) + used_params = list(filter(lambda param: param.name in used_variables, node.params)) + return node.copy(update={"params": used_params}) + + + 3.2: Dead Node Removal + -------------------------- + + 3.3: Propogate Shapes and Types + ------------------------------------ + + + 3.3: Function Inlining + ------------------------------------ + + 3.4: Vertical Loop Merging + ------------------------------------ + + 3.5: Horizontal Execution Loop Merging + ---------------------------------------------- + + 3.6: Cache Optimization + ------------------------------------ + + 3.8: Pruning + ------------------------------------ + + +4: Code Generators +---------------------------------------------------- \ No newline at end of file diff --git a/docs/sphinx_doc/docker.rst b/docs/sphinx_doc/docker.rst index 702dad46..a355653e 100644 --- a/docs/sphinx_doc/docker.rst +++ b/docs/sphinx_doc/docker.rst @@ -5,7 +5,7 @@ Docker ====== While it is possible to install and build pace bare-metal, we can ensure all system libraries are installed with the correct versions by using a Docker container to test and develop pace. -This requires you have Docker installed (we recommend `Docker Desktop`_ for most users). +This requires that Docker is installed (we recommend `Docker Desktop`_ for most users). You may need to increase memory allocated to Docker in its settings. Before building the Docker image, you will need to update the git submodules so that any dependencies are cloned and at the correct version: diff --git a/docs/sphinx_doc/fortran_porting.rst b/docs/sphinx_doc/fortran_porting.rst new file mode 100644 index 00000000..7f2b08f3 --- /dev/null +++ b/docs/sphinx_doc/fortran_porting.rst @@ -0,0 +1,16 @@ +Fortran Interoperability +============= + +Alongside NDSL there are Fortran based methods that are currently leveraged by the physics and dynamics packages from which GEOS, pace, pySHiELD, and pyFV3 are ported, that handle aspects such as domain generation and data communication. + +Packages are currently in development to introduce interfaces which will enable the use of these methods within a Python environment. + +One of the ways this is possible is through the use of the ISO_C_BINDING module in Fortan, enabling Fortran-C interoperability, and the ctypes package in Python. + +Fortran-C interoperable objects are compiled into a shared object library, and then access to these objects is possible after loading the library into a Python module via ctypes. + +The ctypes package contains methods for converting Python objects into C-like objects for use by the Fortran-C source methods. + +The `pyFMS ` package is under development and will contains methods from the `Flexible Modeling System (FMS) `, which are made accesible by the `cFMS ` C-interface to FMS package, by the methods described above. + +The methods included in pyFMS have been selected based on the needs of pace, pySHiELD, and pyFV3, but is designed to be independent of these packages. \ No newline at end of file diff --git a/docs/sphinx_doc/gt4py.rst b/docs/sphinx_doc/gt4py.rst index d67b31ff..2d4adc09 100644 --- a/docs/sphinx_doc/gt4py.rst +++ b/docs/sphinx_doc/gt4py.rst @@ -1,7 +1,7 @@ -Gt4py +`Gt4Py `` ========== -pace-physics includes the Python implementation of GFS physics built using the GT4Py domain-specific language. +The pySHiELD package includes the Python implementation of GFS physics built using the GT4Py domain-specific language. Currently, only GFDL cloud microphysics is integrated into Pace. -Additional physics schemes (NOAH land surface, GFS sea ice, scale-aware mass-flux shallow convection, hybrid eddy-diffusivity mass-flux PBL and free atmospheric turbulence, and rapid radiative transfer model) have been ported indendepently and are available in the `physics-standalone`_ repository. +Additional physics schemes (NOAA land surface, GFS sea ice, scale-aware mass-flux shallow convection, hybrid eddy-diffusivity mass-flux PBL and free atmospheric turbulence, and rapid radiative transfer model) have been ported indendepently and are available in the `physics-standalone`_ repository. Additional work is required to integrate these schemes. diff --git a/docs/sphinx_doc/index.rst b/docs/sphinx_doc/index.rst index 7bca8c73..8cc27378 100644 --- a/docs/sphinx_doc/index.rst +++ b/docs/sphinx_doc/index.rst @@ -4,7 +4,7 @@ NDSL Documentation NDSL is domain-specific language for scientific computing in Python, it supports most of the Python language semantics, with performance compartible as the native C and C++ programming language. -NDSL has been used as the backend of Pace model (https://github.com/NOAA-GFDL/pace), which runs on a laptop using Python-based backend, and on thousands of heterogeneous compute nodes of a large supercomputer using C/C++ and Cuda/HiP backend. +NDSL has been used as the backend of the Pace model (https://github.com/NOAA-GFDL/pace), which can be run on a laptop using Python-based backend, and on thousands of heterogeneous compute nodes of a large supercomputer using C/C++ and Cuda/HiP backend. .. toctree:: :maxdepth: 2 @@ -12,11 +12,11 @@ NDSL has been used as the backend of Pace model (https://github.com/NOAA-GFDL/pa overview users_guide - program_guide + developer_guide test dace gt4py - pyfms + fortran_porting docker Indices and tables diff --git a/docs/sphinx_doc/overview.rst b/docs/sphinx_doc/overview.rst index 869db000..930ffd72 100644 --- a/docs/sphinx_doc/overview.rst +++ b/docs/sphinx_doc/overview.rst @@ -8,7 +8,7 @@ Python `3.11.x` is required for NDSL and all its third party dependencies for in NDSL submodules `gt4py` and `dace` to point to vetted versions, use `git clone --recurse-submodule` to update the git submodules. -NDSL is __NOT__ available on `pypi`. Installation of the package has to be local, via `pip install ./NDSL` (`-e` supported). The packages has a few options: +NDSL is __NOT__ available on `pypi`. Installation of the package has to be local, via `pip install ./NDSL` (`-e` supported). The packages have a few options: - `ndsl[test]`: installs the test packages (based on `pytest`) - `ndsl[develop]`: installs tools for development and tests. diff --git a/docs/sphinx_doc/program_guid.rst b/docs/sphinx_doc/program_guid.rst deleted file mode 100644 index d95ad724..00000000 --- a/docs/sphinx_doc/program_guid.rst +++ /dev/null @@ -1,4 +0,0 @@ -Program Guide -============= - -This page will include general introductory information about NDSL, including external links to docs. diff --git a/docs/sphinx_doc/test.rst b/docs/sphinx_doc/test.rst index d077738f..0900ebf6 100644 --- a/docs/sphinx_doc/test.rst +++ b/docs/sphinx_doc/test.rst @@ -2,7 +2,7 @@ Testing ======= -Savepoint tests are run automatically on every commit to the main branch. +Savepoint tests run automatically on every commit to the main branch. Savepoint data are generated from `fv3gfs-fortran`_ and can also be downloaded: .. code-block:: console @@ -13,7 +13,7 @@ Savepoint data are generated from `fv3gfs-fortran`_ and can also be downloaded: Savepoint data are used in the "translate" tests and in checkpointer tests. Developers should be aware that the "translate" tests are an older, initial design of the test infrastructure which has grown organically and may be difficult to understand or modify, but currently covers smaller parts of the code not tested independently by the checkpointer tests. -In the long run we suggest increasing the number of checkpoints and adding new checkpointer tests, and eventually removing the translate tests, which are considered deprecated. +In the long run we suggest increasing the number of checkpoints and adding new checkpointer tests, eventually removing the translate tests, which are considered deprecated. #. Individual translate tests @@ -24,7 +24,7 @@ In the long run we suggest increasing the number of checkpoints and adding new c #. Checkpointer tests - This tests the full model run where checkpoints are inserted throughout the model. + These test the full model run where checkpoints are inserted throughout the model. See ``tests/savepoint/test_checkpoints.py`` for an example. Checkpointers are given model state along with a label, and may implement any behavior they wish. For example, checkpointers have been written to: @@ -42,7 +42,7 @@ In the long run we suggest increasing the number of checkpoints and adding new c ----------- Limitations ----------- -While individual translate test can be run on all backends, checkpointer tests do not work for orchestrated DaCe backend. +While individual translate tests can be run on all backends, checkpointer tests do not work for the orchestrated DaCe backend. This is a limitation due to DaCe not accepting keyword arguments or a list of :py:class:`pace.util.Quantity`, causing the checkpointer calls to be overly complicated. A possible workaround is to follow the HaloUpdater example to wrap the variables at init time and called during DaCe callbacks. A better solution would be to have DaCe accept a list of :py:class:`pace.util.Quantity`. diff --git a/docs/sphinx_doc/testing.rst b/docs/sphinx_doc/testing.rst deleted file mode 100644 index d077738f..00000000 --- a/docs/sphinx_doc/testing.rst +++ /dev/null @@ -1,65 +0,0 @@ -======= -Testing -======= - -Savepoint tests are run automatically on every commit to the main branch. -Savepoint data are generated from `fv3gfs-fortran`_ and can also be downloaded: - -.. code-block:: console - - $ make get_test_data - $ # if you do not have access to the Google Cloud Storage bucket, use FTP: - $ make USE_FTP=yes get_test_data - -Savepoint data are used in the "translate" tests and in checkpointer tests. -Developers should be aware that the "translate" tests are an older, initial design of the test infrastructure which has grown organically and may be difficult to understand or modify, but currently covers smaller parts of the code not tested independently by the checkpointer tests. -In the long run we suggest increasing the number of checkpoints and adding new checkpointer tests, and eventually removing the translate tests, which are considered deprecated. - -#. Individual translate tests - - These test at the module level such as `c_sw` and `d_sw`, and the translate logic is shared among dynamical core and physics. - Larger tests also exist such as `translate_fvdynamics` which tests a full acoustic time step. - Manual thresholds are set for each savepoint test. Curerntly, maximum threshold is applied to all variables within the test. - Additionally, a near-zero value can be specified for a variable to ignore values that are very close to zero. - -#. Checkpointer tests - - This tests the full model run where checkpoints are inserted throughout the model. - See ``tests/savepoint/test_checkpoints.py`` for an example. - Checkpointers are given model state along with a label, and may implement any behavior they wish. - For example, checkpointers have been written to: - - #. compare the model state to a reference state (:py:class:`pace.util.ValidationCheckpointer`) - #. calibrate the threshold for each variable given a perturbed state (:py:class:`pace.util.ThresholdCalibrationCheckpointer`) - - Additional checkpoint behaviors could be implemented, for example to save reference test data directly from Python. - Thresholds are set automatically using a :py:class:`pace.util.ThresholdCalibrationCheckpointer` for each variable based on a round-off error perturbed initial state. - We run the model multiple times with a perturbed initial state and record the largest differences at each checkpoint for each variable. - The threshold is then set to the largest difference multiplied by a scaling factor. - Currently, only checkpoint tests within the dynamical core are tested. - There are two outstanding PRs to include driver and physics checkpoint tests. - ------------ -Limitations ------------ -While individual translate test can be run on all backends, checkpointer tests do not work for orchestrated DaCe backend. -This is a limitation due to DaCe not accepting keyword arguments or a list of :py:class:`pace.util.Quantity`, causing the checkpointer calls to be overly complicated. -A possible workaround is to follow the HaloUpdater example to wrap the variables at init time and called during DaCe callbacks. -A better solution would be to have DaCe accept a list of :py:class:`pace.util.Quantity`. - --------- -Examples --------- -Translate tests for the dynamical core can be run as follows: - -.. code-block:: console - - $ make savepoint_tests - -We suggest reading the Makefile for a full list of translate test targets. Checkpointer tests can be run as follows: - -.. code-block:: console - - $ make test_savepoint - -.. _`fv3gfs-fortran`: https://github.com/ai2cm/fv3gfs-fortran/tree/master/tests/serialized_test_data_generation diff --git a/docs/sphinx_doc/users_guide.rst b/docs/sphinx_doc/users_guide.rst index d5e3d5e8..fd621224 100644 --- a/docs/sphinx_doc/users_guide.rst +++ b/docs/sphinx_doc/users_guide.rst @@ -1,161 +1,4 @@ -Users Guide +User Guide ============= -1: Introduction ----------------- -Recently, Python has became the dominant programming language in machine learning and data sciences community since it is easy to learn and program, however the performance of Python is still the major concern in scientific computing and HPC community. In scientific computing and HPC community, the most widely used programming language is C/C++ and Fortran, Python is often used as script language for pre- and post-processing. Although, many complains about Python program performance happened from time to time, and obviously, Python program community didn't take it seriously in the language standard consideration. - -The major performance issue in Python programming language, especially in computation-intensive applications, are loops, which are often the performance bottlenecks of an application in other programming languages too, such as C++ and Fortran. However, Python program often observes 10x to 100x slower than C, C++ and Fortran program. In order to achieve peak hardware performance, the scientific computing community have tried different programming model, such as OpenMP, Cilk+, Thread Building Blocks (TBB) as well as Linux p-threads for multi/many-core processors and GPUs, and Kokkos, RAJA, OpenMP offload, and OpenACC for highest performance on CPU/GPUs heterogeneous system, all these programming models are only available for C, C++ and Fortran. Only a few works that target to high perfromance for Python programming language. - -The Python based NDSL programming model described in this users guide provides an alternative solution to reach peak hardware performance with relatively little programming effort by using the stencil semantics. A stencil is similar to parallel for kernel that used in Kokkos and RAJA, to update array elements according to a fixed access pattern. With the stencil semantics in mind, NDSL, for example, can be used to write matrix multiplication kernels that match the performance of cuBLAS/hipBLAS that many GPU programmers can’t do in Cuda/HiP using only about 30 lines of code. It greatly reduces the programmer's effort, and NDSL has already been successfully used in Pace global climate model, which achieves up to 4x speedup, more efficient than the original Fortran implementations. - -2: Programming model ----------------------------------------------------- -The programming model of NDSL is composed of backend execution spaces, performance optimization pass and transformations, and memory spaces, memory layout. These abstraction semantics allow the formulation of generic algorithms and data structures which can then be mapped to different types of hardware architectures. Effectively, they allow for compile time transformation of algorithms to allow for adaptions of varying degrees of hardware parallelism as well as of the memory hierarchy. Figure 1 shows the high level architecture of NDSL (without orchestration option), From Fig. 1, it is shown that NDSL uses hierarchy levels intermediate representation (IR) to abstract the structure of computational program, whcih reduces the complexity of application code, and maintenance cost, while the code portability and scalability are increased. This method also avoids raising the information from lower level representations by means of static analysis, and memory leaking, where feasible, and performaing optimizations at the high possible level of abstraction. The methods primarily leverages structural information readily available in the source code, it enables to apply the optimization, such as loop fusion, tiling and vectorization without the need for complicated analysis and heuristics. - -.. Figure 1: - -.. figure:: static/ndsl_flow.png - :width: 860 - :align: center - - the high-level architecture of NDSL stencil life cycle for non-orchestration run. - - - -In NDSL, the python frontend code takes the user defined stencils to python AST using builtin ast module. In an AST, each node is an object defined in python AST grammar class (for more details, please refer: https://docs.python.org/3/library/ast.html). the AST node visitor (the NDSL/external/gt4py/src/gt4py/cartesian/frontend/gtscript_frontend.py) IRMaker class traverses the AST of a python function decorated by @gtscript.function and/or stencil objects, the Python AST of the program is then lowing to the Definition IR. The definition IR is high level IR, and is composed of high level program, domain-specific information, and the structure of computational operations which are independent of low level hardware platform. The definition of high level IR allows transformation of the IRs without lossing the performance of numerical libraries. However, the high level IR doesn't contains detailed information that required for performance on specific low level runtime hardware. Specificially, the definition IR only preserves the necessary information to lower operations to runtime platform hardware instructions implementing coarse-grained vector operations, or to numerical libraries — such as cuBLAS/hipBLAS and Intel MKL. - - -The definition IR is then transformed to GTIR (gt4py/src/gt4py/cartesian/frontend/defir_to_gtir.py), the GTIR stencils is defined as in NDSL - -.. code-block:: none - - class Stencil(LocNode, eve.ValidatedSymbolTableTrait): - name: str - api_signature: List[Argument] - params: List[Decl] - vertical_loops: List[VerticalLoop] - externals: Dict[str, Literal] - sources: Dict[str, str] - docstring: str - - @property - def param_names(self) -> List[str]: - return [p.name for p in self.params] - - _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) - - - -GTIR is also a high level IR, it contains `vertical_loops` loop statement, in the climate applications, the vertical loops usually need special treatment as the numerical unstability is arison. The `vertical_loops` in GTIR as separate code block and help the following performance pass and transofrmation implementation. The program analysis pass/transformation is applied on the GTIR to remove the redunant nodes, and prunning the unused parameters, and data type and shape propogations of the symbols, and loop extensions. - - -The GTIR is then further lowered to optimization IR (OIR), which is defined as - - -.. code-block:: none - - class Stencil(LocNode, eve.ValidatedSymbolTableTrait): - name: str - # TODO: fix to be List[Union[ScalarDecl, FieldDecl]] - params: List[Decl] - vertical_loops: List[VerticalLoop] - declarations: List[Temporary] - - _validate_dtype_is_set = common.validate_dtype_is_set() - _validate_lvalue_dims = common.validate_lvalue_dims(VerticalLoop, FieldDecl) - - -The OIR is particularly designed for performance optimization, the performation optimization algorithm are carried out on OIR by developing pass/transorformations. Currently, the vertical loop merging, and horizonal execution loop merging, and loop unrolling and vectorization, statement fusion and pruning optimizations are available and activated by the environmental variable in the oir_pipeline module. - - -After the optimization pipeline finished, the OIR is then converted to different backend IR, for example, DACE IR (SDFG). The DACE SDFG can be further optimizated by its embeded pass/transormations algorithm, but in PACE application, we didn't activate this optimization step. It should be pointed out that, during the OIR to SDFG process, the `horizontal execution` node is serialized to SDFG library node, within which the loop expansion information is encrypted. - -When using GT backend, the OIR is then directly used by the `gt4py` code generator to generate the C++ gridtool stencils (computation code), and the python binding code. In this backend, each `horizontal execution` node will be passed to and generate a seperate gridtool stencil. - - -NDSL also supports the whole program optimization model, this is called orchestration model in NDSL, currently it only supports DaCe backend. Whole program optimziation with DaCe is the process of turning all Python and GT4Py code in generated C++. Only _orchestrate_ the runtime code of the model is applied, e.g. everything in the `__call__` method of the module and all code in `__init__` is executed like a normal GT backend. - -At the highest level in Pace, to turn on orchestration you need to flip the `FV3_DACEMODE` to an orchestrated options _and_ run a `dace:*` backend (it will error out if run anything else). Option for `FV3_DACEMODE` are: - -- _Python_: default, turns orchestration off. -- _Build_: build the SDFG then exit without running. See Build for limitation of build strategy. -- _BuildAndRun_: as above, but distribute the build and run. -- _Run_: tries to execute, errors out if the cache don't exists. - -Code is orchestrated two ways: - -- functions are orchestrated via `orchestrate_function` decorator, -- methods are orchestrate via the `orchestrate` function (e.g. `pace.driver.Driver._critical_path_step_all`) - -The later is the way we orchestrate in our model. `orchestrate` is often called as the first function in the `__init__`. It patches _in place_ the methods and replace them with a wrapper that will deal with turning it all into executable SDFG when call time comes. - -The orchestration has two parameters: config (will expand later) and `dace_compiletime_args`. - -DaCe needs to be described all memory so it can interface it in the C code that will be executed. Some memory is automatically parsed (e.g. numpy, cupy, scalars) and others need description. In our case `Quantity` and others need to be flag as `dace.compiletime` which tells DaCe to not try to AOT the memory and wait for JIT time. The `dace_compiletime_args` helps with tagging those without having to change the type hint. - -Figure 2 shows the hierarchy levels of intermediate representations (IR) and the lowing process when orchestration option is activated. - -.. Figure 2: - -.. figure:: static/ndsl_orchestration.png - :width: 860 - :align: center - - the high-level architecture of NDSL stencil life cycle for orchestration run. - - - -When the orchestrated option is turned on, the call method object is patched in place, replacing the orignal Callable with a wrapper that will trigger orchestration at call time. If the model configuration doesn't demand orchestration, this won't do anything. The orchestrated call methods and the computational stencils (lazy computational stencils) which are cached in a container, will be parsed to python AST by the frontend code during the runtime, then the python AST code will be converted to DaCe SDFG. The analysis and optimization will be applied before the C++ code is generated by the codegen, this process is called Just In Time (JIT) build, compared with the non-orchestration model, which is eagerly compiled and build. The JIT build caches the build information of computational stencils, and orchestrated methods, and it is more convenient to apply the analysis and optimization pass to the overall code, such as the merging of neighbor stencils made easy. Therefore, more optimized code can be generated, and better performance can be achieved during runtime. - - -3: Analysis and Optimization ----------------------------------------------------- -One of the major features of NDSL is that users can develop a new pass/transformation for the backend with new hardware, the passes and/or transformations are the key integrates in order to have good performance on the new hardware. In different abstract level, the passes and/or transformations perform different levels of optimization. For example, the loop level of optimization is independent of hardware, and can be applied to any backend, while the optimization of device placement, and memory and caches optimizations are dependent on different backend and hardware. In this section, we only focused on the optimizations that are independent of the backend hardware. - - -The general procedure of code optimization has two steps, in the first step, a filter function is called to find the pattern that need to apply the pass and/or transformation, then apply the pass and/or transoformation to the filtered pattern to insert or delte or replace the existing node with the optimizated node. In NDSL, the following passes and/transorformations are provided. - - - 3.1: Prune Unused Parameters - ----------------------------------------- - - .. code-block:: none - - def prune_unused_parameters(node: gtir.Stencil) -> gtir.Stencil: - assert isinstance(node, gtir.Stencil) - used_variables = ( - node.walk_values() - .if_isinstance(gtir.FieldAccess, gtir.ScalarAccess) - .getattr("name") - .to_list() - ) - used_params = list(filter(lambda param: param.name in used_variables, node.params)) - return node.copy(update={"params": used_params}) - - - 3.2: Dead Node Removal - -------------------------- - - 3.3: Propogate Shapes and Types - ------------------------------------ - - - 3.3: Function Inlining - ------------------------------------ - - 3.4: Vertical Loop Merging - ------------------------------------ - - 3.5: Horizontal Execution Loop Merging - ---------------------------------------------- - - 3.6: Cache Optimization - ------------------------------------ - - 3.8: Pruning - ------------------------------------ - - -4: Code Generators ----------------------------------------------------- +This page will include general introductory information about NDSL and its, including external links to docs. \ No newline at end of file From 60dcbaa64fc2d08c841a73510f5ee619e372b992 Mon Sep 17 00:00:00 2001 From: Frank Malatino Date: Tue, 18 Feb 2025 11:45:57 -0500 Subject: [PATCH 5/5] Linting --- docs/sphinx_doc/developer_guide.rst | 2 +- docs/sphinx_doc/fortran_porting.rst | 2 +- docs/sphinx_doc/users_guide.rst | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/sphinx_doc/developer_guide.rst b/docs/sphinx_doc/developer_guide.rst index bc600d6a..e44a6f12 100644 --- a/docs/sphinx_doc/developer_guide.rst +++ b/docs/sphinx_doc/developer_guide.rst @@ -158,4 +158,4 @@ The general procedure of code optimization has two steps, in the first step, a f 4: Code Generators ----------------------------------------------------- \ No newline at end of file +---------------------------------------------------- diff --git a/docs/sphinx_doc/fortran_porting.rst b/docs/sphinx_doc/fortran_porting.rst index 7f2b08f3..f4335131 100644 --- a/docs/sphinx_doc/fortran_porting.rst +++ b/docs/sphinx_doc/fortran_porting.rst @@ -13,4 +13,4 @@ The ctypes package contains methods for converting Python objects into C-like ob The `pyFMS ` package is under development and will contains methods from the `Flexible Modeling System (FMS) `, which are made accesible by the `cFMS ` C-interface to FMS package, by the methods described above. -The methods included in pyFMS have been selected based on the needs of pace, pySHiELD, and pyFV3, but is designed to be independent of these packages. \ No newline at end of file +The methods included in pyFMS have been selected based on the needs of pace, pySHiELD, and pyFV3, but is designed to be independent of these packages. diff --git a/docs/sphinx_doc/users_guide.rst b/docs/sphinx_doc/users_guide.rst index fd621224..b3070843 100644 --- a/docs/sphinx_doc/users_guide.rst +++ b/docs/sphinx_doc/users_guide.rst @@ -1,4 +1,4 @@ User Guide ============= -This page will include general introductory information about NDSL and its, including external links to docs. \ No newline at end of file +This page will include general introductory information about NDSL and its, including external links to docs.