From 790f619375f7de065a357f5e7dd12082e332aa37 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 11:01:18 +0200 Subject: [PATCH 01/19] Remove badge of non-longer existing service. --- README.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 1dd572e..5b59bc2 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ rdata ===== -|build-status| |docs| |coverage| |landscape| |pypi| |zenodo| +|build-status| |docs| |coverage| |pypi| |zenodo| Read R datasets from Python. @@ -123,10 +123,6 @@ Pandas `Categorical` objects: :scale: 100% :target: https://codecov.io/gh/vnmabus/rdata/branch/develop -.. |landscape| image:: https://landscape.io/github/vnmabus/rdata/develop/landscape.svg?style=flat - :target: https://landscape.io/github/vnmabus/rdata/develop - :alt: Code Health - .. |pypi| image:: https://badge.fury.io/py/rdata.svg :alt: Pypi version :scale: 100% From e4e14ad7774413c67686915e02b94c04813ad701 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 11:09:12 +0200 Subject: [PATCH 02/19] Update documentation badges. --- docs/index.rst | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 7ae2fb3..f253804 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,7 +1,7 @@ rdata version |version| ======================= -|build-status| |docs| |coverage| |landscape| |pypi| +|build-status| |docs| |coverage| |pypi| |zenodo| Open :code:`.rda` R data files containing datasets and convert them to the appropiate Python objects. @@ -24,10 +24,10 @@ Indices and tables * :ref:`modindex` * :ref:`search` -.. |build-status| image:: https://api.travis-ci.org/vnmabus/rdata.svg?branch=master +.. |build-status| image:: https://github.com/vnmabus/rdata/actions/workflows/main.yml/badge.svg?branch=master :alt: build status :scale: 100% - :target: https://travis-ci.org/vnmabus/rdata + :target: https://github.com/vnmabus/rdata/actions/workflows/main.yml .. |docs| image:: https://readthedocs.org/projects/rdata/badge/?version=latest :alt: Documentation Status @@ -39,11 +39,12 @@ Indices and tables :scale: 100% :target: https://codecov.io/gh/vnmabus/rdata/branch/develop -.. |landscape| image:: https://landscape.io/github/vnmabus/rdata/develop/landscape.svg?style=flat - :target: https://landscape.io/github/vnmabus/rdata/develop - :alt: Code Health - .. |pypi| image:: https://badge.fury.io/py/rdata.svg :alt: Pypi version :scale: 100% :target: https://pypi.python.org/pypi/rdata/ + +.. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.6382237.svg + :alt: Zenodo DOI + :scale: 100% + :target: https://doi.org/10.5281/zenodo.6382237 From 99837639fa1548653938141689eaf6704913d9a4 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 11:25:45 +0200 Subject: [PATCH 03/19] Update project configuration. --- pyproject.toml | 63 ++++++++++++++++++++++++++++++++++-- rdata/VERSION | 1 - rdata/__init__.py | 13 +------- readthedocs-requirements.txt | 3 -- readthedocs.yml | 30 +++++++++++++++++ requirements.txt | 4 --- setup.py | 1 + 7 files changed, 93 insertions(+), 22 deletions(-) delete mode 100644 rdata/VERSION delete mode 100644 readthedocs-requirements.txt create mode 100644 readthedocs.yml delete mode 100644 requirements.txt diff --git a/pyproject.toml b/pyproject.toml index b7e2a57..c23670e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,62 @@ +[project] +name = "rdata" +description = "Read R datasets from Python." +readme = "README.rst" +requires-python = ">=3.9" +license = {file = "LICENSE"} +keywords = [ + "rdata", + "r", + "dataset", +] +maintainers = [ + {name = "Carlos Ramos Carreño", email = "vnmabus@gmail.com"}, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Topic :: File Formats", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed", +] + +dynamic = ["version"] + +dependencies = [ + "numpy", + "xarray", + "pandas", +] + +[project.optional-dependencies] +docs = [ + "sphinx>=3.1", + "sphinx_rtd_theme", +] +test = [ + "pytest", + "pytest-cov", + "numpy>=1.14", +] + +[project.urls] +homepage = "https://github.com/vnmabus/rdata" +documentation = "https://rdata.readthedocs.io" +repository = "https://github.com/vnmabus/rdata" + [build-system] -# Minimum requirements for the build system to execute. -requires = ["setuptools"] \ No newline at end of file +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[tool.setuptools.packages.find] +include = ["rdata*"] + +[tool.setuptools.dynamic] +version = {attr = "rdata.__version__"} \ No newline at end of file diff --git a/rdata/VERSION b/rdata/VERSION deleted file mode 100644 index 9a7d84f..0000000 --- a/rdata/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.9 \ No newline at end of file diff --git a/rdata/__init__.py b/rdata/__init__.py index c83f931..ce4b9df 100644 --- a/rdata/__init__.py +++ b/rdata/__init__.py @@ -1,5 +1,4 @@ """rdata: Read R datasets from Python.""" -import errno as _errno import os as _os import pathlib as _pathlib @@ -16,14 +15,4 @@ def _get_test_data_path() -> _pathlib.Path: """ -try: - with open( - _pathlib.Path(_os.path.dirname(__file__)) / 'VERSION', - 'r', - ) as version_file: - __version__ = version_file.read().strip() -except IOError as e: - if e.errno != _errno.ENOENT: - raise - - __version__ = "0.0" +__version__ = "0.9.1.dev1" diff --git a/readthedocs-requirements.txt b/readthedocs-requirements.txt deleted file mode 100644 index fbf879c..0000000 --- a/readthedocs-requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ --r requirements.txt -Sphinx>=3.1 -sphinx_rtd_theme \ No newline at end of file diff --git a/readthedocs.yml b/readthedocs.yml new file mode 100644 index 0000000..46689c3 --- /dev/null +++ b/readthedocs.yml @@ -0,0 +1,30 @@ +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.9" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + builder: html + configuration: docs/conf.py + +# Build documentation with MkDocs +#mkdocs: +# configuration: mkdocs.yml + +# Optionally build your docs in additional formats such as PDF + +# Optionally set the version of Python and requirements required to build your docs +python: + install: + - method: pip + path: . + extra_requirements: + - docs \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 59f3601..0000000 --- a/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -numpy -xarray -pandas -setuptools \ No newline at end of file diff --git a/setup.py b/setup.py index 2e8bfe4..e7011bd 100644 --- a/setup.py +++ b/setup.py @@ -47,6 +47,7 @@ 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Topic :: File Formats', 'Topic :: Scientific/Engineering :: Mathematics', 'Topic :: Software Development :: Libraries :: Python Modules', 'Typing :: Typed', From 321c2736c767645bd81d9a436332f2d49e505b8d Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 11:52:45 +0200 Subject: [PATCH 04/19] Remove setup.py --- MANIFEST.in | 1 - setup.py | 68 ----------------------------------------------------- 2 files changed, 69 deletions(-) delete mode 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in index 4e06f8e..b2a9ec4 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,4 @@ include MANIFEST.in -include rdata/VERSION include LICENSE include rdata/py.typed include *.txt \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index e7011bd..0000000 --- a/setup.py +++ /dev/null @@ -1,68 +0,0 @@ -# encoding: utf-8 - -""" -Read R datasets from Python. - -This package parses .rda datasets used in R. It does not depend on the R -language or its libraries, and thus it is released under a MIT license. -""" -import os -import pathlib -import sys - -from setuptools import find_packages, setup - -needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv) -pytest_runner = ['pytest-runner'] if needs_pytest else [] - -DOCLINES = (__doc__ or '').split("\n") - -with open( - pathlib.Path(os.path.dirname(__file__)) / 'rdata' / 'VERSION', - 'r', -) as version_file: - version = version_file.read().strip() - -setup( - name='rdata', - version=version, - description=DOCLINES[1], - long_description="\n".join(DOCLINES[3:]), - url='https://github.com/vnmabus/rdata', - author='Carlos Ramos Carreño', - author_email='vnmabus@gmail.com', - include_package_data=True, - platforms=['any'], - license='MIT', - packages=find_packages(), - python_requires='>=3.7, <4', - classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: MIT License', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Topic :: File Formats', - 'Topic :: Scientific/Engineering :: Mathematics', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Typing :: Typed', - ], - keywords=['rdata', 'r', 'dataset'], - install_requires=[ - 'numpy', - 'xarray', - 'pandas', - ], - setup_requires=pytest_runner, - tests_require=[ - 'pytest-cov', - 'numpy>=1.14', # The printing format for numpy changes - ], - test_suite='rdata.tests', - zip_safe=False, -) From e0d734f39bad6e2f655e543d6d76ea5d89564879 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 12:05:29 +0200 Subject: [PATCH 05/19] Fix tests. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 82f1468..a3abd85 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ['3.7', '3.8', '3.9'] + python-version: ['3.9', '3.10', '3.11'] steps: - uses: actions/checkout@v2 From 5ae5d2a541774835fb5bfd8269378bb51d442d8f Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 12:08:34 +0200 Subject: [PATCH 06/19] Fix tests again. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a3abd85..86a7301 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,7 +28,7 @@ jobs: - name: Run tests run: | pip3 install . - coverage run --source=rdata/ --omit=rdata/tests/ setup.py test; + coverage run --source=rdata/ --omit=rdata/tests/ pytest; - name: Generate coverage XML run: | From 3995228fb64c97372ca33757518d3b2b66bfd68f Mon Sep 17 00:00:00 2001 From: VNMabus Date: Mon, 16 Oct 2023 12:16:58 +0200 Subject: [PATCH 07/19] Upgrade tests workflow. --- .github/workflows/main.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 86a7301..37acbb7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,16 +23,13 @@ jobs: - name: Install dependencies run: | - pip3 install codecov pytest-cov || pip3 install --user codecov pytest-cov; + pip3 install pytest-cov || pip3 install --user pytest-cov; - name: Run tests run: | - pip3 install . - coverage run --source=rdata/ --omit=rdata/tests/ pytest; - - - name: Generate coverage XML - run: | - coverage xml + pip3 debug --verbose . + pip3 install ".[test]" + pytest --cov=rdata/ --cov-report=xml - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v3 From 92339e7bbb2afc08515ecabd088bc41e66929013 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Tue, 17 Oct 2023 09:27:10 +0200 Subject: [PATCH 08/19] Revamping documentation page. --- docs/__init__.py | 0 docs/_static/switcher.json | 13 ++ docs/_templates/autosummary/class.rst | 22 ++- docs/_templates/autosummary/module.rst | 64 -------- docs/conf.py | 212 +++++++++++++------------ docs/index.rst | 1 - docs/internalapi.rst | 11 -- docs/simpleusage.rst | 19 ++- pyproject.toml | 2 +- 9 files changed, 145 insertions(+), 199 deletions(-) create mode 100644 docs/__init__.py create mode 100644 docs/_static/switcher.json delete mode 100644 docs/_templates/autosummary/module.rst delete mode 100644 docs/internalapi.rst diff --git a/docs/__init__.py b/docs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json new file mode 100644 index 0000000..c25ebb2 --- /dev/null +++ b/docs/_static/switcher.json @@ -0,0 +1,13 @@ +[ + { + "name": "dev", + "version": "dev", + "url": "https://rdata.readthedocs.io/en/latest/" + }, + { + "name": "0.9 (stable)", + "version": "stable", + "url": "https://rdata.readthedocs.io/en/stable/", + "preferred": true + } +] \ No newline at end of file diff --git a/docs/_templates/autosummary/class.rst b/docs/_templates/autosummary/class.rst index ad62005..92c62e1 100644 --- a/docs/_templates/autosummary/class.rst +++ b/docs/_templates/autosummary/class.rst @@ -1,29 +1,25 @@ {{ objname | escape | underline}} + .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} {% if methods %} - .. rubric:: Methods + .. rubric:: {{ _('Methods') }} .. autosummary:: {% for item in methods %} - ~{{ name }}.{{ item }} + {% if item != "__init__" %} + ~{{ name }}.{{ item }} + {% endif %} {%- endfor %} {% endif %} - .. automethod:: __init__ - {% endblock %} - - {% block attributes %} - {% if attributes %} - .. rubric:: Attributes - - .. autosummary:: - {% for item in attributes %} - ~{{ name }}.{{ item }} + {% for item in methods %} + {% if item != "__init__" %} + .. automethod:: {{ item }} + {% endif %} {%- endfor %} - {% endif %} {% endblock %} \ No newline at end of file diff --git a/docs/_templates/autosummary/module.rst b/docs/_templates/autosummary/module.rst deleted file mode 100644 index 069e85f..0000000 --- a/docs/_templates/autosummary/module.rst +++ /dev/null @@ -1,64 +0,0 @@ -{{ objname | escape | underline}} - -.. automodule:: {{ fullname }} - - {% block attributes %} - {% if attributes %} - .. rubric:: {{ _('Module Attributes') }} - - .. autosummary:: - :toctree: - {% for item in attributes %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - - {% block functions %} - {% if functions %} - .. rubric:: {{ _('Functions') }} - - .. autosummary:: - :toctree: - {% for item in functions %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - - {% block classes %} - {% if classes %} - .. rubric:: {{ _('Classes') }} - - .. autosummary:: - :toctree: - {% for item in classes %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - - {% block exceptions %} - {% if exceptions %} - .. rubric:: {{ _('Exceptions') }} - - .. autosummary:: - :toctree: - {% for item in exceptions %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - -{% block modules %} -{% if modules %} -.. rubric:: Modules - -.. autosummary:: - :toctree: - :recursive: -{% for item in modules %} - {{ item }} -{%- endfor %} -{% endif %} -{% endblock %} \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 04d31bb..55648dd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# dcor documentation build configuration file, created by +# rdata documentation build configuration file, created by # sphinx-quickstart on Tue Aug 7 12:49:32 2018. # # This file is execfile()d with the current directory set to its @@ -17,25 +17,42 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -# import os -# import sys -# sys.path.insert(0, '/home/carlos/git/rdata/rdata') - +import os import sys import pkg_resources +import rdata + +# General information about the project. +project = "rdata" +author = "Carlos Ramos Carreño" +copyright = "2018, Carlos Ramos Carreño" +github_url = "https://github.com/vnmabus/rdata" +rtd_version = os.environ.get("READTHEDOCS_VERSION") +rtd_version_type = os.environ.get("READTHEDOCS_VERSION_TYPE") + +switcher_version = rtd_version +if switcher_version == "latest": + switcher_version = "dev" +elif rtd_version_type not in {"branch", "tag"}: + switcher_version = rdata.__version__ + +rtd_branch = os.environ.get(" READTHEDOCS_GIT_IDENTIFIER", "develop") +language = "en" try: - release = pkg_resources.get_distribution('rdata').version + release = pkg_resources.get_distribution("rdata").version except pkg_resources.DistributionNotFound: - print('To build the documentation, The distribution information of rdata\n' - 'Has to be available. Either install the package into your\n' - 'development environment or run "setup.py develop" to setup the\n' - 'metadata. A virtualenv is recommended!\n') + print( + f"To build the documentation, The distribution information of\n" + f"{project} has to be available. Either install the package\n" + f"into your development environment or run 'setup.py develop'\n" + f"to setup the metadata. A virtualenv is recommended!\n", + ) sys.exit(1) del pkg_resources -version = '.'.join(release.split('.')[:2]) +version = ".".join(release.split(".")[:2]) # -- General configuration ------------------------------------------------ @@ -46,126 +63,96 @@ # 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.autodoc', - 'sphinx.ext.autosummary', - 'sphinx.ext.todo', - 'sphinx.ext.viewcode', - 'sphinx.ext.napoleon', - 'sphinx.ext.mathjax', - 'sphinx.ext.intersphinx'] +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.intersphinx", + "sphinx.ext.mathjax", + "sphinx.ext.napoleon", + "sphinx.ext.todo", + "sphinx.ext.viewcode", +] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # 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 master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'rdata' -copyright = '2018, Carlos Ramos Carreño' -author = 'Carlos Ramos Carreño' - -# 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 = '' -# The full version, including alpha/beta/rc tags. -# release = '' - -# 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' +master_doc = "index" # 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 name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True add_module_names = False -autosummary_generate = True - # -- 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 = 'sphinx_rtd_theme' +html_theme = "pydata_sphinx_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 = {} +html_theme_options = { + "use_edit_page_button": True, + "github_url": github_url, + "switcher": { + "json_url": ( + "https://rdata.readthedocs.io/en/latest/_static/switcher.json" + ), + "version_match": switcher_version, + }, + "show_version_warning_banner": True, + "navbar_start": ["navbar-logo", "version-switcher"], + "icon_links": [ + { + "name": "PyPI", + "url": "https://pypi.org/project/rdata", + "icon": "https://avatars.githubusercontent.com/u/2964877", + "type": "url", + }, + { + "name": "Anaconda", + "url": "https://anaconda.org/conda-forge/rdata", + "icon": "https://avatars.githubusercontent.com/u/3571983", + "type": "url", + }, + ], +} + +html_context = { + "github_user": "vnmabus", + "github_repo": "rdata", + "github_version": "develop", + "doc_path": "docs", +} # 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'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# This is required for the alabaster theme -# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars -html_sidebars = { - '**': [ - 'about.html', - 'navigation.html', - 'relations.html', # needs 'show_related': True theme option to display - 'searchbox.html', - 'donate.html', - ] -} - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'rdatadoc' +html_static_path = ["_static"] # -- 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', -} +latex_engine = "lualatex" # 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, 'rdata.tex', 'rdata Documentation', - 'Carlos Ramos Carreño', 'manual'), + (master_doc, "rdata.tex", + "rdata Documentation", author, "manual"), ] # -- Options for manual page output --------------------------------------- @@ -173,8 +160,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'rdata', 'rdata Documentation', - [author], 1) + (master_doc, "rdata", "rdata Documentation", [author], 1) ] # -- Options for Texinfo output ------------------------------------------- @@ -183,9 +169,15 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'rdata', 'rdata Documentation', - author, 'rdata', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "rdata", + "rdata documentation", + author, + "rdata", + "Read R datasets from Python.", + "Miscellaneous", + ), ] # -- Options for Epub output ---------------------------------------------- @@ -206,10 +198,28 @@ # epub_uid = '' # A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] +epub_exclude_files = ["search.html"] -intersphinx_mapping = {'python': ('https://docs.python.org/3', None), - 'pandas': ('http://pandas.pydata.org/pandas-docs/dev', None)} +# -- Options for "sphinx.ext.autodoc.typehints" -- autodoc_preserve_defaults = True autodoc_typehints = "description" + +# -- Options for "sphinx.ext.autosummary" -- + +autosummary_generate = True + +# -- Options for "sphinx.ext.intersphinx" -- + +intersphinx_mapping = { + "matplotlib": ("https://matplotlib.org/stable", None), + "numpy": ("https://numpy.org/doc/stable", None), + "pandas": ("https://pandas.pydata.org/pandas-docs/stable", None), + "python": (f"https://docs.python.org/{sys.version_info.major}", None), + "scipy": ("https://docs.scipy.org/doc/scipy", None), + "sklearn": ("https://scikit-learn.org/stable", None), +} + +# -- Options for "sphinx.ext.todo" -- + +todo_include_todos = True diff --git a/docs/index.rst b/docs/index.rst index f253804..14adf49 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,7 +12,6 @@ Open :code:`.rda` R data files containing datasets and convert them to the appro installation simpleusage apilist - internalapi rdata is developed `on Github `_. Please report `issues `_ there as well. diff --git a/docs/internalapi.rst b/docs/internalapi.rst deleted file mode 100644 index aa7ad7d..0000000 --- a/docs/internalapi.rst +++ /dev/null @@ -1,11 +0,0 @@ -Internal documentation -====================== - -List of modules ---------------- -.. autosummary:: - :toctree: modules - :recursive: - - rdata.parser._parser - rdata.conversion._conversion \ No newline at end of file diff --git a/docs/simpleusage.rst b/docs/simpleusage.rst index 968cc25..898f484 100644 --- a/docs/simpleusage.rst +++ b/docs/simpleusage.rst @@ -32,7 +32,7 @@ Convert custom R classes The basic :func:`~rdata.conversion.convert` routine only constructs a :class:`~rdata.conversion.SimpleConverter` objects and calls its -:func:`~rdata.conversion.SimpleConverter.convert` method. All arguments of +:meth:`~rdata.conversion.SimpleConverter.convert` method. All arguments of :func:`~rdata.conversion.convert` are directly passed to the :class:`~rdata.conversion.SimpleConverter` initialization method. @@ -55,18 +55,21 @@ Pandas :class:`~pandas.Categorical` objects: >>> import rdata >>> def factor_constructor(obj, attrs): -... values = [bytes(attrs['levels'][i - 1], 'utf8') -... if i >= 0 else None for i in obj] +... values = [ +... bytes(attrs['levels'][i - 1], 'utf8') +... if i >= 0 else None for i in obj +... ] ... ... return values >>> new_dict = { -... **rdata.conversion.DEFAULT_CLASS_MAP, -... "factor": factor_constructor -... } +... **rdata.conversion.DEFAULT_CLASS_MAP, +... "factor": factor_constructor +... } ->>> parsed = rdata.parser.parse_file(rdata.TESTDATA_PATH -... / "test_dataframe.rda") +>>> parsed = rdata.parser.parse_file( +... rdata.TESTDATA_PATH / "test_dataframe.rda" +... ) >>> converted = rdata.conversion.convert(parsed, new_dict) >>> converted {'test_dataframe': class value diff --git a/pyproject.toml b/pyproject.toml index c23670e..3a35ec1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,8 +37,8 @@ dependencies = [ [project.optional-dependencies] docs = [ + "pydata-sphinx-theme", "sphinx>=3.1", - "sphinx_rtd_theme", ] test = [ "pytest", From 833356e72fd99c85a4c684e8a755185992bf495b Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 11:42:12 +0200 Subject: [PATCH 09/19] Try Jupylite. --- docs/auto_examples/auto_examples_jupyter.zip | Bin 0 -> 2080 bytes docs/auto_examples/auto_examples_python.zip | Bin 0 -> 687 bytes .../images/jupyterlite_badge_logo.svg | 3 + .../thumb/sphx_glr_plot_example_thumb.png | Bin 0 -> 26794 bytes docs/auto_examples/index.rst | 60 ++++++++++ docs/auto_examples/plot_example.ipynb | 72 ++++++++++++ docs/auto_examples/plot_example.py | 25 ++++ docs/auto_examples/plot_example.py.md5 | 1 + docs/auto_examples/plot_example.rst | 109 ++++++++++++++++++ .../auto_examples/plot_example_codeobj.pickle | Bin 0 -> 2220 bytes docs/auto_examples/searchindex.dat | Bin 0 -> 31135 bytes docs/auto_examples/searchindex.dir | 3 + docs/auto_examples/sg_execution_times.rst | 13 +++ docs/conf.py | 31 +++++ docs/index.rst | 1 + .../auto_examples/plot_example.ipynb | 72 ++++++++++++ examples/README.txt | 4 + examples/plot_example.py | 25 ++++ pyproject.toml | 3 + setup.cfg | 1 + 20 files changed, 423 insertions(+) create mode 100644 docs/auto_examples/auto_examples_jupyter.zip create mode 100644 docs/auto_examples/auto_examples_python.zip create mode 100644 docs/auto_examples/images/jupyterlite_badge_logo.svg create mode 100644 docs/auto_examples/images/thumb/sphx_glr_plot_example_thumb.png create mode 100644 docs/auto_examples/index.rst create mode 100644 docs/auto_examples/plot_example.ipynb create mode 100644 docs/auto_examples/plot_example.py create mode 100644 docs/auto_examples/plot_example.py.md5 create mode 100644 docs/auto_examples/plot_example.rst create mode 100644 docs/auto_examples/plot_example_codeobj.pickle create mode 100644 docs/auto_examples/searchindex.dat create mode 100644 docs/auto_examples/searchindex.dir create mode 100644 docs/auto_examples/sg_execution_times.rst create mode 100644 docs/jupyterlite_contents/auto_examples/plot_example.ipynb create mode 100644 examples/README.txt create mode 100644 examples/plot_example.py diff --git a/docs/auto_examples/auto_examples_jupyter.zip b/docs/auto_examples/auto_examples_jupyter.zip new file mode 100644 index 0000000000000000000000000000000000000000..b2c722e0e55c999923b0063728729df65c3e1812 GIT binary patch literal 2080 zcmd5;&1%~~5O$jWK#nE7FIxh3aMc927egQ=PzY(kqzOG#L2RUvvt+fqtX6T{kVCJ1 zgx>oGeTu$JU!gNA$#$Id5PFG>C2MAOcIKPeZ#+6!eZ1bG>*wC#=NG*{-+w&obm;pW zWmXxVz@;dxf=Jq_KD}CFjHjSf$%pI94Fe}n?F@}=m(v?0!N3o9e zhLv_^roI+pN#rP_B^hEkk=Yn9<|dhw@N80QlfMaNA>4UpCVCF%B3^Se?n<1JK4cUL zQ$}P`k16y|XJ%3|yiukkN1HZDOz$4CJ+v~vtNfX9L$)WJG9^0{1>W(+L0oNZ<=ch; z`5;r!B@Efe{iA#2`ag9zE+Mp1E)}o}&y~o)5&Ego7vMa$mcj-@!DxyZXsiN#?h)O? zs)Q`8!K|7ykULYbdGE7E`yO*X4p{W@AbD^i^_2B)`_c`l?9A=DB2B^iotSS%F58TG zpB0tz68UN8$W_qm#X5t$MKz&~6LL~}>J4K}e2^Q*a@?{;y%Cba3Wt2dcIv>R@apPE zLWiiEM_4cq+T%vFfUc&53+rl0iF`-qRNrpxd0`dBa1PTxyAY}hd^GbDNe@NYZKJJs z!QdR?(#>Ojh3l?|F<n$}7l1v~-zQ`Pbd3eozrG<2XeR(EJtHdh=el-PEg#guG(^SQg^AR;S=^I4xRA~nmlQNTZVZFgC3X>= zkJ(;0ClFtP8tn%Ssm?i(YL62PE7q9s$WCXAc_9&yW@33Xdwuz8$vV@v9 z*TLO|gq@BH?3OZ7I0A!3lfVL!^Z5B7+TM=dHh5t&ArY=mu~`a1WAhD-xtSm-q&DPr qYwdb;u<~eq_208R40*i$`bNKQPxjHllc%Iv!Ot!}f8&3EPUkNzjY)z4 literal 0 HcmV?d00001 diff --git a/docs/auto_examples/auto_examples_python.zip b/docs/auto_examples/auto_examples_python.zip new file mode 100644 index 0000000000000000000000000000000000000000..4a9e3ab9cf6ef6a8c033fa198c9e9af8c7e4f3cf GIT binary patch literal 687 zcmZ`%!D`$<40W<;4|C}yA0WI0?65d@gCQYMD4W2tP1s9e8Enn&5Zg1%jFT=QhhF<1 z{eVFJpg)pNiDYlOO&~JXjHJ=ilhABBIyj72{+!PjzZVD3C;L&v{}=Mv+Jq(kl#Q)1 zvzsxfCgfn05^)@hIaD%8sEw?2yAs745#syW+<71c!Ss({4px>oa)mzY0mK;2y0A7b zhjZy_<6$lv(quUN`)DYBp-XH%=5YD#N|1eYMC#fjgf)WFH9|)uWrdEbl%~B!7y5u_ z$81CJZ6?M-H`Y+ZF=e5gX+Yb}ovv0GJZyts3Gcdxn}BWuI#~uGPG7GH*Ym~hRU*q0 zZ7Aa7%vHzn1e&f6nr2m8xen7*RH$A#ExG2B5eAqv7eJzn14YFK%7c&nRyvOr6a(R` zH{Eb7xrIb!)NH^uq&*JjY`gz2ZSZ(aBiII$0eF|h1a5FMfm>O3$V~phWIABulPy!O zz+xTEBT?}^Wj*Ba4rv$cp;9rM?(H9rKHjc=?MOZS;@i7jn@vA`X7?U_1)V==C8OvC DD#ywY literal 0 HcmV?d00001 diff --git a/docs/auto_examples/images/jupyterlite_badge_logo.svg b/docs/auto_examples/images/jupyterlite_badge_logo.svg new file mode 100644 index 0000000..5de36d7 --- /dev/null +++ b/docs/auto_examples/images/jupyterlite_badge_logo.svg @@ -0,0 +1,3 @@ + + +launchlaunchlitelite \ No newline at end of file diff --git a/docs/auto_examples/images/thumb/sphx_glr_plot_example_thumb.png b/docs/auto_examples/images/thumb/sphx_glr_plot_example_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5fed589d17fe6ee62d6a9788519dba471fbd65 GIT binary patch literal 26794 zcmd3N^;cV6&~zU%f(#fBBGMqQ6{mHpumQ z^~%~w0VJvEnR)nlooKF`yb|H}xA|C<^cUE&K&!B{#ar*%RrUI{fOnuSCL$03!--#| zXbLuXBIIR=G00EgrNBb5!{Wg0L?-(}Cu?Haf+0F7%3dlH!I7q$mL$Yecj9<`jSzfT z^D5Zgt0)_Z#Ecth&8aB^q#^tt+jp*g;+l3Kuta%Af{32Sylxr^V1hg&jmnR}mkXfv zAbI2;{|#XPvE=`E0PeA)C<&;HFH;EcKm_ss4Tt~~BwnThPbCg5(+AS2SjXlQXBFG6FYU#Fiz_d=HGDi{5xv>!;RVHaotlES;Y{+4GrXjSnu(wiwX$)Rm{msq2XKT(PDE-xEgi z_(VivIE9l($F=w;5%X502cyd9S;o)?@*@IUt%-#RKi)is3GxWf#e9B1a0p}-K^GkH zE#RcLH-hEomo}wtS-`xST`geg^-vL1i@Xk;hL(*ihFVL8OfGro z7;=ZwLXX%~LDV&-I)%f^Zc@iBUPr)DOdL&SY8Fe4jRr0M^?OY#0}B$nzJ&L1In9Al zQOK9T4G@xxBY?1&=&}M<$uJ+xfTKBW>PRAN(VR;B>we1G_F=pv`)g>`Z^uYRx_jEF zLgunT}hWZL=J)o}-tSc-H43?kvu z2VGc#wT9ESOGB&rE@vy9Zz3|&#)3Ae*}ua?Sht~cbom|GLpPlTSm&X z8g90~9$!qLFeLh!xc`P0$(R$Ja&h&6EezoO__ACMkpyr*-p^zc6Sxuga|EOJ~>i$53|i zk3uPR?4WZH-H$~ya%J$=ipQkS-owRa4tw(P{%YPDc|taynH>AT=I|^o0}49wU~C{J zauK2=H85m@3Fzliq*hcd5LX*{uUE#$CpBIVU20AE#`cp-cs73fa2V=^W|F4HJO04v zh?+`+`1w}s-C)?|2Q&Bi)%tp}=My{T_L}AL?X!5%*(mp1+HX=ICa0VpGHL53#n?|w zrsVN!1h2aM0663#mGa+wr{K=E&1QL;2u+|ml4!Vcv|H~i8eectf>jNDUkq^angTdW z)#m!O%sOuC%7f^!Qht!qCw#tfe81zkyyL#c-mQq;u_=hU8Y&X0P3ZX%SuC=j%cBp_ zr)IOhDL^juo$ys}!om$%Q`tjo6J*I-hLpYq;KY(EwP$7&><+R6Cs-uf#l&-#?&}Uc z2}fsB6#K32O!O58@ksbMFteP}G2(2lnU(Xx0EQ{|6Fyl`z1ErflfT{pGkLUjTO->; z)k=c&e_nqG{-=f;xxac&YcIobydWM*>-WCPDRj}<`M?J$>U-1W=e@wPjOqn`WB6h3 zK~jXSxO+anw%MV<(bYq5#QL@?&$9}E9mOt!yYPhfLyOPk<($)-DALZ(Z<${Ys2e!I zEf@cqbht`&4b(^c=S@?tyU^-%7nsg>47yyUusdaMN|9?WoX_ry|GMNc@rE*&1ZWvhRi z_S3m-n`bk(@O+$m8Kp&CbTqx#!3Ro^Y+#WD0wD>iyApzndvKsR&ejCNHW0D$L?Y{& z-+!(ex(HR2t+z8ezJ13p%e#_pEzeK4BMasjYdnwJ?s{s>RYi;(GFI&ez1i>3C&Ca}f(#daZAeX;DyOc))i?10TL3cyU9coSu% z)362xbDc4*fSbB%;E}Qhj(t3Y;h0y44|>PJ{Wnh8tcJHxpgfb*cWZ`3JyR%I1eX@D zhJN6ES7k-g^nBRA6+Lz{hr;f=v9U%{mDsRr?D`_~Bl#>!q2hGpQrdVLN8GXyT@?Oz z+7-##Pu6db%j-<<)!r^-I*w+`UXXo=8fYr1;~kdxDdbuG7#=k3gnwVoy*Pse*8?CP{EM4h zidh=Lh5n)*Bd=X5LAxl_{94L7yp5$zMl^#3{EGwW`CdAsJZjClo-A{sUr5=r94uSOqPi$Bx2XqwJ0Xj>oqW`wvg3e07J z)B$YP_^e2>9eu-`H$Ilmv=_G3H|}OW)AT=Y3o&4{OAN>c@maT9IRH=16i5c13XIbq z?_;?AkC)0lxBghxk!|c14fTiYk`u>n>GBPA8g4GyLuofED1?CZ_ogTPNTn=*7Rz>` ztYLiEcuec^&_!PYFq(!2r=O|z#Ft@!biey30#@bucj&Ux#$iwD(4dukXbV1&1KhNt zqjE7f0?G2qOI$YC4rS^$^olhr+rM>-n6e_o=%}lSws$wIa?!a=?|&NpC0eU;zsWc{ zKWScWoG(_FP6kwvxFXl0Buq*6*?NA&t1N%CNhYQxAHE>%%=x@2fFKMkfr^ZzsGxgw zHOYm3bg4i(w(q;Sv}7U`6Pvh6Lm7Ptpx?d8)x>^1RQ1|vuG zD|M?Wx8nh#9<4K3^p^ z+tzr;24w)=wRU5Hn4~bhvixzHRwBbhqo*XVUm->z)SC1la7x*{$-z(_ak+M#+ZP-g zeJQP$k`X`41*d?oW^%4JZH z`2Ld2K6XjjT~MILbr{_xL>OfMd9;zSl*--#DwbWDM4Mp%J~N_%)nv|~hmH9@ z)4zT59opehPLJ^KJ6=VVO6Ho)jzT3gR98(NX*61GGVm56{>rj2M18)d^HhPG&iNrA zw3~jo&)!0v{GJE>iXI;ylLdla?z?dM+T(hzjWMg#Y7nngVIY8XR3%u9|L|1IzJP2% ztaEj&!l5_dWLvR#((N&`TQ%Z_aD4=0dIY1oPwr0rTMp@~krDj&qrOo>N7s>&+3e2# zj!pO%Q}P>}{K5VvO(@IX)|C%9o-~d!1M>GPa$u9}~ znp>y9i{nXjS1MjmdxDO!=)mKBA}-}mBp?edtY>D#G4~`p;ncc6ZCuu^9162{V`}LD z1V6Z{i6Rj#_U_ZbKJm)mqBY>vgDo5E5hb5`g#UiRW{W{;Yv3BoGE+jQunVS36Np2enN*G1C~E`p6Rz z{j*O=Hr16UEyfQtZjl0gr^mQuLw~P`!;^`G!)B$eL?HKwuJHg*Av%bEfp+&rI#S6h3Du-ZF@PZN*czynUs7CxrIzi<4CKW$DVUDZp4t@iHd(8;)$gN|7tcwXZ*}bVfvjelr52^Z_wbOI56$NP(NgU%iVHE zF4%~Q^N)t*gCUrPDQc6o=jm9zod2D$s=kAl9(4KKJVtQbESUEoxkjYn)gw9Hf$ zxkomp*C}$oszKqQn1bcxZ?n$jcvSPa-%+!QHfnAo#hP0@4Eu7#;_sn^YAFm}a5$kj zR>ve*17@Gze8vcL$w+E@`m5(=Qy*Q~>OI;1*l|C1v1PMWOw3eL9{)(8=9b%IM}6!U zMcHwGU&b-gd%E#WWQ1W&us{G=3v*Gczbd>nU~XA+RYmPvAK8xKIjItpke-|6DHLM? zV^m(Trt~H3n8Djvl-rxNw5%%KO97+CBR|c6-1xk!_MSCj{y-=Tl)@CO+~o2vmxWhz zY)tX$O0oEU#QKS|IP#9wssiTL8{ zJD#*5d^it313T$)w|h}CIq*lseFB}(#~)6PjENhpg?^8Xm3F>+oFgAQ0$j`746Z8! z4T=vRkY=AQ@V*?NvGxTdbw)Lbpeb#Hwn$jEkRl=kfxy_mFdnIZZ|v?Bk47e(MA6iu z=n4|Yw5OvgD)#Z`yIX8TL)kRf#j_X&X!Xre9^FbrGeT&ua~Ez z;L~rWd6P4b4BJHLCtjp5IQbK@Yn5nt(u(A%E*th>PWT9zmg#$i405 z1u)h5>|%j;2S6YL!d+3OTS>AcGo{_X_PRbtC^cZ~OZKy980j48DF6mKe0`ShOy)%)$Gpx&xYS;yMa=?0Luop+4>{HHg<+3oxDAZ>#%N{Z}PF z*y2V1MAwfF%&zQdI+R~N;zar?o(NK19$nQ&-1jXxMS(~iDLANz^Z7LflHO0Vw(S<{ z-&6fR1v zwYJ=7+&AQJkPZmGr9o>Y;3Dk51T1!Wny3eOhpSrVHP)r8j)n->0clR9O!IoX`MucX z^Zwiy9^o(E6WZ-Mwy{?YbRia8Hzm{^kdB^~ULyM{?&zV&+;rnvab{}4=iyZAU08O5 z@MV3_6vpe|{fU%r_^adQ-fn4Eqe6TqJ&VNr&47I)qv~~M_?mkg8<^CFz(S?YiNc&J zF8sSlt6VZ89ZVI=m8J2(?|e_Ih#V2_^euv=$5qy@pDZ&CU`?d!{!Xjfsm*EywtUo{ z7M`bz>Lm*;&#qzeUCS&pM&I|_VXXi>@ekIJ%6OP-srY6;NEm+rQ*Vm2SP=dpg`9v=8of0 zhOkW8VtL8ieYY31ECO7=oqO;@Z;1Kzm!dv@X`5}nJ?l8#I_`)#C(=D2%+*Mp=89va z5suRsE0+)2#jpPQZ^r2U4e8Tn0Artnx(_PB{~E_^f3atL)FN~J89#@h6>YEJ)SkOU zkVI-6t3OWeJfD)pik~F|nR+pV9ikPTcqm+4>0E|mxI>`U=jt6gulFW~I2NBxSomP5IND~h{YMxG>1blL@4eF^{6 zk#UK;tX9dPQL#jH$V)FC!y~DdwEKH`o^W&`SzLFoKY%L61$Od-y6mNtoA!97 zb$UD;2B^}_laB+luIKy^Uxf-;n)u=5i3a`beLsWhyI-)zg6gb&zCf*CjB)ffyJji% zQ#_YU?1e#Jdx!n7Hh(Ev_|i!PMx4H_`%&raZn?l8`iT!XKN5a0UHxpS!xGFhTNf+u zxpL3g?fDyTpaY9;=4WvgLgnhu2&s^lz|K2HyQC6^rpuT~EyYofcy)zpZBfmg;sx&O zRGn#3W%*3Vl+k#uA^Ks&Nc5APO_6`soi1jM35BHy;tl(LIhwN&a^a`% zJuR6vsJ;uQlY9qsuOj!Xa9BQ;(SH{l%NmW8PkWZ6_$5iF;!BonGJlTSxyBnademO^ z=BG6}B=bz`T7Vp#E}gK#fA=$pv=-a?p8toJvm3oLf8KYg@E~;oi^ZJM)2> z@1e%vtsSw=PX_(a0OjVZhHr*B{g*Z;W~=k%vO2VPhKypEAzx81pO<(tom_IjrLqcK z@zif`H$2E)oZV2FE-3#8Buc{2P?839y z#~{t0*VWy@2eH+)q@uti{*C6u-6YLDb<8RHk){z#wL@!tX{(Ia1#tU zO(0i6^t)Ueq*UJ0(u~F1x&}Xc`0a@7^&Z~y#d7ER`@Xo6>+bhoC<@-^DTsWJz$8O@ zE6q6A|0WUD9M91pzApN8$^s8ZUZ_$??^mFi= z)P@l=?Y7Lm!mt}6Km%zR(K8vzVwM*Cph$R+Xh-GcA2iO3omIER78s5{b=pAhf9(?R z=jTLCaD?TmqKr8OI!4VC|q!DCP=dfL9nazg#oyW^g{NeK5d*yo|ECkDoA zntQ_k_T^y$F%++7ZZFRcq6{D9EFXT)`{k$vq&&@tPha9Z|9HA1$islU8DzR5%*4N_ z8DoCrp?%1ld;gLWA)zb^F16gFV+?4T=W$cQrr1dXp6_NT3tcXsDig~m+Mf7k+r5{4 zaX`hIACv4>RGTPbo0)OUixoJ^mShV!I=(iQq{0#r8*6Kg8efTj75)X$kJM+F@I}UK zUT6J1kRe_tI*P!@&+7A20@t?a1+@I_mNWPu$Azzu(L~LJHNe5}vc>A0`ZhB2cvGWA zAP_fmED`+(u^vqY)Gl~k>@lkPE7s{N6Gk9+#3TqD@!RmIUBVFrL?mpY%{jeTz>Ul# z^|pRz2~Co5>*5Vwzu~?e8!^P_RU&lWU@N*MZCSemvk~1wkWh+dwBQK1rWMVqOV=%v zyWG(np@yt5?UDMjtFamAdo2)+Vqc~!LSR~pYD@3!kZumq_zz#BBQJsnet2!E?A{p`ONN@Od?Dfmf(G#Pe1^hkYDJ<6WdPOs0PO-=ay0Yv^)oC(`N1#}Xo#K?6jVUH7&Y zt>ZCkQuHIG`z{jqel&L+J&lkI(N??MwcMzEWwuRE z#tsWN%OvjLGsAyYLoMu0+RDt)d<{d{D_#C6oX)J(P(ujhKG$ds$ObrB+81&6HEUZK z6)Ny?G2BiOc@i>AX>0zY@kpJT=631_c&}0lHb_-=K+_#y@r3`Ov!QI~A~_f2I%EKS zJ7emxmhe7MD5eWcXU=kDb2?}pJ=Z2ixgDeUC)Cr0Dgk+Xip@@Z?fW>sIrSfsd3iKl zA^E2N1so#Rx-^RoLChMgcI*of<7Fc`lfSl9eUto$^I#>M(!@{8#<(NM6gWSTnNcQu z#F(n@U$X%u^XVuNW%;9#eG{+J3*S0eDbzOK*JU^!PFZiL;WG-ghu)JglFs-`?gx{0 zg^83973w0~@wfomO4tTCaGoAw5ySDvK+M&*B-%3F6upN6405V@Led1c)Ncz<5n^(< zPiF~QP0i%xt-8+Ans2bE6p^{j(LYwh4VMN%1BUMdM~=lxfRktQVj7Tbz4GRfJ5l**g7#AP{Ll zg26O4>0syPBWE01LOh{Vto8R|+hzwxjMgaa+4w4znI|@APC}4r- z_j-3kt^W!$v8L)O)(h**BQ`G7xTp5~*cIxL$Cbd!4BDqq1iG#K=~9AS9TqsXP_zV8f-mKeyL`)N8UjxE6ah@%CHBRjiYY zIAN$UE$g3x=1lf{!xt1ZRgVcz_({~_;ON4pN2KG(x>7`@%V6tAaX}iC*iEyNuh{Z< zP4>B7WT23ha(YzwOadZ+-><%ECjXix zzBw)Eg|m*luIPw7+s=KKGbMdlsp~TSU^^P?aC>~6uI9b%gV=r|dD=H2?R4lgxOouS z4y$=lE(0JSD=3f=cism*huq^ph>fl#eruAl&Qgel9&OAcjRk)uVWD_8t)s7{ATQEaE!nr^~>g=%(4pS8+Bu z5=G_(yS2XmS6Y<<>th8PL}|H=vh_+`rF++VgzfHwF?)POOi$iLaTu-X)KFZf9*u?T z?)}Bqv}%JriAp(#fdiklAyZx}iL7=i?Yhzm53*70oyBuUiOR%j>5$SfU;Qg4%7qnxL^X zxI~FR3wjB?`nEIEh!feQ?EB5fxl_Xbb9SubMyRuRRP*Q$EOTP&drs zY?gCRJmNK?Yq1V9fe#~p=K6_U2~;O55mu0P&seC38CLy+tv~Wp-x`q#x&>ZM7-Q3m zW4eD3)V})uA3+zGj}#kgL19Tb|B00v_HN*#OGe|6oD8pH=^tCuMly2~^7SO4!t)?g zy6@oxDL?L3C~3=371z7zURp$Z`m{P~37?4aXWtd&fX+CBi)^dH8Pk?Ah@fkZ()!`) z1X0mZu{ka}gkauYDfc*`#Qvobr##rtiB{U4PY809iCvoe)JrGm!V8g_?{9}sjEN0= zJ7$GABFPts7amvF?Wxg3FuLN{L~fQO2Ji_C{H?Zr zfx1Mn>%xiT^c%1j?7^kj&;Ai(5oLtxTKUAKq*cME;>S!-zWFU`$Q5Qp+Y6LFt-d-* zI|Yi&1D5sozyVt6Io*3Y(QbMUH6Zt&!WxBbM#)2%rL4sK&J$q7R-gKw`9Ij&^fvO1 zmLCl&t)>E;}-txS})rj3hexI>&3B9Lw&HJr;em;dp7)6hFSx)BpE zDm*>V;wiw)K?Qc**$GE$ELU6tzKjmkL)s zu`UM#;VDh!tL`#Wf4#+=lYGrdZfsUx$JbO|r4oTwXfXkrg4`=3V%Izv8Kj(cTDGhf z58eQ=^xq<-^r*F|u>!{;_Em2^J)jAy{&s94JOl#v*YHux@HFrJNuq_KMj{cd4B!GI zyQy%L+U#GslYhy*L&uRMJLVUA4D-9ylSREQjKgNu|8-2>jqtiW+McHya%Ket_zkuj zm3$1|$Ks(pmrP4EkMi}jCyvG+`NH5bpZ;|q0Y&){coHggK%;uf=ygA9Gjg@-z<06? z?Ix4=xt4ntSo@+9oy6cjU5elzD4ubWSy9ggSr6AII%4s~kygw*$EfUf zCY$#?+H2MPU7Dk3nKJ$X=vT#P&+45%*v>a)aJH8>pmXiNa08~ z#uSsyGl@a`R z?7#3vi8E>bKryMKl1od9W2}*q@jjedoHB;K~H? z;h{>mbHAOQ?yR})5R|r$vm|$Ig$ZnnL#t*8KK5}E+@@Kv8^(9yG?EfT5PU1;lin{4 zLSUjS%c8>N;~$k2tlzG=zm*BM6jW_WNrM*T)#Gz|3{UBi_BFO`gWIeuu7`n7qJ7!+ zoB49j8dB$kFYl%CkKkQAyfMq60G`QsWATY0(n^Qq0MqRiwat%l{@qJH_O!Wp|2ASV zp~0AbnKEINW-+Zod_NkA)8QUU3OqKkv6{WUv7umiWmN6w4y`-SB|;BV;-wz#^2nX) z8^1f-0CkHspK8Awr2)AoVa;dY`-(cwmj-#a^qWnY@txS1{hgb=G>2m7{0c%!)H zbs=y!>P=MRpDu#0WZhGe0hmuS$N;@)mS|*4E~72mu{YNq`RZI2l38VG; z&9cBZbIPwX$TSBPKN?k&W?cZIRHxaR)9Ch}tUXnw4yeb9w9Y0HH=?rzg6qU0_kXX& zikwQyBcGjclOqS5tHEx2(=0Eyz4ua<7wa614t|PXbnX@1^gG5j4}b>F?#wG?KKQUL z>D3%@JC#ak1x48sS1KpB=kC_yJ!7{-np@4coMInIt48ux_LJd7=zo%8N)@-)@Mqn? zCB{TDMLie03HEs~sahW1-369Q7k;$b8PLlKc|e60hl^hIV7!27_os@JOqQ{&^m@It zOU+BY&Kd1I<4B8XNEOGQ1fxpfLKZXxc`gJZVp(4YLUrlS#O3!F;mrX!*VfOSO6<2k839IE#ij3B6`Z33p3V1pDGW)z||*)hzf4| z#5U$te~Ik~F3J|qKe`0sb25<>Dt`sQv!b)&q;?!Q=CJ{$~>URp+ihe!Y>>%EQdotYO8c58TuoTLmkppGqebiz(tbA&68SL)Ym2PBh`wyUU1P7^o-V&xxQ%&I z1`AGU3bH%$YNuf^IXQ&0!Tdb$I7(3)vaau0-GLq!gUc*E{8a*|5H8aRMZy`Da}U;Q zk0R&2Y^ra(MQ4s*7$;THElm5vNno7%&0ev8lfW&rjt8_-k;O9IROA2H67|DhXL*}G z{w0f8xhpks8E$F1j1p#xIWiXZjBfJ5^IaMxafGqW`53v4sVk*MQwPMFnyS<{K}hw@ zd!wvxfN`sRTTVb-x;RGfyoA$6%2mq}{0gGHfQRm0M9P^IUVT{HFSh1`bO^0`(macn znI;iM@Bp<>s_2kCwF=JY z&PSrL)N>3YjsOL_gI3lipNJ2XrOul1Wkw+f?&ac$$3qPNi@V_?<6r^H*bU;p$q=>> z1HvZjJge#_N_vj=kpT^tx;Xz>wFlov3AYhs1rZwWA82QuRk~@988N#nN1&YOzQHa3 zdf&p06k#ycU~rClDyg|%s8er0F|}lCP@)Z{v-VzuK5T>5<=`+i$=M^zg~GidW{KUn8}&u^k7nksXyJs5{jRl`tHwI4aOs5*?ya1z}BK`rSbW4Osuwk zzP!7-44zPQ)BpsgLeCxhiNT!Za_>?f*CXJ;7qQ8#<^K=Qzj13VkbE1||LKI?N#Dgz zIi7fmv}!*%-MEm8-?F^f%-T%3{*>l+mq_<~HYo0Jb>M|QdT}F~I?YSYm@dv}bQ}pW zFz@r0I@tf#7ANC?Q{`j!@F@?F3h&0m;LY#5vfPc>xE`I4U`@X&vyP-}ERVw+47+d* z8XbB2sGh5Hd+{W*%UR)T5f#vG^F8`sWtR@~8)B#C?QQLfjP@T}EoZ+c4rjM1ZjGme zhKp}sp}+!o1JpBW<=)Fa2TtF_-3=QXVIC2VH8rTfxH&^ZfK)EC-4LZ7vc)gt$j;&B zE7W-upbGnrXAHR~IRB-K{$r25*hy70%I93yIb>rw9p~$V7vkmchY;zmv47Gi0=ZcH zG-@I9F(-ru^j;GAl76&@L6#uC9|fE$kv7K>zz5BI7}0z>OgtK##ulGp-w47^V_Q0# zHuCjpJ4->8o$~7oo7i0@Y29LCCw36}NAQbYir!Nzr3tMo>~3U^4m{^j8Rl_h?YAiE zyhGp#8%ummkQ_Q>=-qTpeH?NTNV6{LaTjc#b_*38J~BuhbgN0&^W0t-1FuH~#hhC1 zMn{OGvG&h*`xt>KB~YjZM>i)`Nsmwxb)F$$rXEa__@Kz+APMRe*11R#?(&0!_hWIB<((OfR`TY$wQ>BK1O&x$6u zr8b-zG`lss-&MNJ83H{XmrzrxLCXP3zx616s_fK!t~=CSlew@PbyMR61D!a| zsLmv7%{S${Gp_IQYMXWX0v;SV?H^Pci3At^G0=Y~46@dK00jSvyO&zMzs`y%Yr2nYu6#9Y z*YTghKFZCC2=D}K1OtgE7My;a;3 zsO4r0%Bicd7q4#W5 zm+Xvgm|hj6LwVVX7t5zeMTOVcpsaPSw)$>PxMkvdb`kyB?G;aGW z#kZjiTUtq)U|p}b)@9@V#PZn`{gD1Td0g|}}0wF!xU=e0hy zHyG}uiLnRu=sn7Bh;pjoG`}Fdv!-#0vnYegTi{ni^fepVyOqj1R+r>Tla9W>4-K)UAhR`x5(nWp0izSdW$kHF1DHoWrOr2;ljn~@&VXv z!;to}?n^_JyK~TjZwrA8#KSX8dc!BRrSBlPOK7p;OZB1NX&jQUu>3+zhyr%DF>>dQ*Vj_VXb;zX( zIo_JSRUrlqS!=a;rg_c(E}I>bRiUcdPKf);b;qbq#k^^jYshOCbOAWZUqIUnQ9fUKBEK$&)hXv1&qdgv{1eugEQ%@G{a2OG^*wXuG3b~$Zv(2H3pToh28)cr zYev{el;D$^5k5A9V}#~b=H}vTS^YGz0)O@*21Z`O0#~2 zm-{BE`O_B3P}xZhi&+@oFrY>(h+qjmQno+gN&jLJZ+iW2Lp5>J!M6k+iEQybApKr0+#up4UogAeoM;JMHEB#{VVG0Br(~t z;o<{@RWdi)*lYX)(Ellg;`^QWQ~uKqQPcgOc8HPgMHiIdN%#N6MK-MwOPxW=U$AsA z6hD+|C?>Sb{SdlDXTqSEA{YPm#r(u&eVOc1!~;E`A@Ii?TO5jMV6eX7U#3^=(KbJw z)X$50!WpsTP5Ivi;dG`1(Q1Mn-iO$?#VW{dUm|NOB$ja@QE>~Ph#-mNJ6c1`0#bL8 zb^;qmJmr$E@2Yme^?T-@OSlKhpe$oGY@`wSL5|#*;yAw8FZzoULOkIY8Pjn%67i)} z{l}6W>Jt9?%jS@lTQ|d>jTNm#PJF*w6sHB{j<*k-*5Fdj_2a$#24~eH=jC%yHg2!H z2%3x{t~SIdKK>vjhfqvt_1%^QjO=(dj%>Ar?0bGs(A!D$zPa)z8Xsv49exN|7Z+O6 zQRUPUKl+X}fXYb+dctaPfkRo?R%^7-e7>~5?UUu~$KcRYt<>l?;Xf7hVW&f)4q zKa7KyF0KN+?^GbTpU)om1euxNw5TZ^rg5oVeTlQIZ`^tJb~Uv$0s|b;q%9c&;>51e z`c$)xs>`*eJ`x%qvrd4^9+drc4!I@NZrA_@HNnBsw{F1nVkF8z@ec`yiSEx14LDqy z(CcM#uu}3QSi0JRtqHAV&yzQlJ+KM6c}f*i3M;DrmHQUjI^~nLX$wx^x;4UaN$FVt z&Pmm5(XnW;jlm;3k}hAJAQFW@KVom}CA#H78GhaYQ}k-~GuPz3;-Eyv;kR5brwy=B zfR_?_yPB`{N!wjgu_j5w7@JOz2OZGu;OL@xz{Q;*pimlR!y=pCB{#+t5AL z32+inpvA+yi-KRXMGWNP^XPZAp}vroYP!sQG4E;+EVla%vHfn| z#|EaX2j^1(GZJzEND26^KBVP~l=+=c^IXE0_g9ivk#n7S?_xastD0^LpRc#-hdV_0 z{hMS2L%wspFLfHM`AppRfmS04pWmTbkzSqy*eo0l65!CmA7^`)_Abq90Nw2}UpR@b zjs1LC*2a%m*M;*QVbo&1a^QSx7#|CBpliq@NG4%{O(l;%KbSXgE&km>;pUK}O#LY7 z=hKdHY$ZPGW{US;_!1p?0+d#mw!Ifo*>HlFQT4NYKK3Xx=%8w}&z^)%lHyL5sH{iV zQlF5F9w7Upp0rr!ed-P?%I&>cfx#jb4Y6>zdKeJ+1*oh}oS%=)jNbSgBl(?h{7G(h z3mkpT=d=<%WB8h)flTzOV9O;(hB8mL9kMwruOktKJSwJobi9HGFIkOasl_Se(vrzI z%21W_{aWwfkgZ?Y-lndle*~}utqX+WJJEhlYJk+i+X|(+ms~(05=ByP)FJUvJ{*@t zA0UuB_vEcydLk(s6&v~4(`h))Cc`&Un_zxPiYeT<0))7e6|JO%vqVKb!nHdzRPQar^O`$jL}9z zcyBLNT;7G_UWPng87D7{$!@~X$jtVVDcw-^!O--QX8KHDsde0RJpzB=Dl8CGTWVX; z@z}4;-=5e^MKO4ZMW5ZX8QNt)v*|Dr=8Jk=B(Ie^;aW$=do+aqxqxHb|3JavGWra5 zNAiX(4t5fh7us?>RPI#)^Zbo>R|As>Q{=BSGd7fKNt-!1Ld6HSL-vHePI$O@TM*k}5G zq^A`yH&o-#vlckF*uR?APTJx>E?Zt)SPk|+!z72N4GVeicTyS;X^jnzEuc?(yP3P> zlN08Op$ef~naLYyYId-keedgm&K9%#VT>(izue;kL43eqt%)>!v%o88*#7LwDY|8_^$tgu9%gq<`i_mHPkDUVII;Qtw_RB+^7)5mC zCO)~}!GYsE*TkmRB3s_G>oXw8BYs`AY5sg;!geCmo1pHIex)aefr2!DvA#Du%ja7g zDT(m(jrA81Ja0NuFR4?npk#SW=Tgxj>f>|w4$m(>3*rxA$Nt%CR|a@Y`UTlmzk=`{ zlJa_LK&$aMpOzv$X4@i{)S2$*P^*VjVyi`d>`~!zR2>ac!W2?GYJ3BA%brp-`1T-|#o!YMKf7{>+eEb0 z!+5L{^jYlE?$bB4;fJkXuVVT8R&evJ-b|1^3j?y}_DNB@Qmhb~hIpqim9aAH5+>c)Y#7rpKts zZ(aG`MU5}{u>`^kuxaA4s219GVYtPiXZkO2mN)&g2(3*85 zekL#c#|vwqsPkYpbh%Qbr(NbNcExY?J_YDh8Z^w7#{*G;43yA?l`OC2K^dy!{v6SH zps#MZGnK;JmJV?nmvaY@bw2t4~(UEcWEs7l%MB_4?CHKX#Q!hWaXl6K6-TZ5uZ=I^?gOjBz|5}r&69B4}z_Tzld}wGy z?b%1(T+-Xdvq{HW@~S}iyt|ILpxD5FIltHoy%AD(m<*-9OrjE#=`&No~h z&a5kP)IFE8-cJKe!KPQ3n0;~FRcZ(VX?#sEJ~^5!nlJ&J+T5a$c0~u#e_WY-)+gKH z{YZ+(zrN=FbSpBh_D&uHpO)o?oyPXOrEcIeidyH1wR_`PpE?ueekOtlSq zD?*Um=U0_Q!WP0HmHr;0IDH($;EznIm)1y;*Uw?!R{{+X&=}A!?<5WRid`iRdZFm& zs+(j3E{U~_ZlOKp%p!IEGLh?yA26aZ^Jr+5KW(&=>FBfk$ha?qWhR^MGpKL!pMKr$ z7H_L>>D%j8#_jS#U#seThtMgb!S$HNFps~D>K6`Rg~$(tc6ZusJL_?`wc1}j9}iJbfaut)2sEk--+ z=k|Oi_(_-E>o54eBAm;1UF`l>4h<9QdG{*Q0M!SAvrL_28w3V~MH0;eJIaZKp0v29 z&8L=>zYp8bg30W+;VutS>>Hof2%kjM&0lXT{-?6DY-;oS+IEp5#jUsnEAH+Nh2lYq z6{p2DxVr_~QrtbbyA>}E#e;i+;BI$*|C#3lJTLPmbIoM!wXeO`ah$Pjy|bz4_Md;~ z1pC@Ph0t7v#4(dWv8uN^bN0A5tHRbFqD*Fu_d=(_{>f6i@-qE|xqU7m}YZ4OB1(@)vk7l|OabbzUsXrP!g8cW9xZUgV;}&7FRAIGETMG4Qrc z@Rcqr_DE;dhCVJEZw@J!9ZD-9!<^q9?2uEH5}_nyZc=qL*#3$=-TZa@m4Q!GdR6EU zY4dEtdO*_8qNu$V?|#l`$KVS~E7m$SZ(prQt+X8QNkep)GiGJi&2G26{L^daEZycT z0URxTOx4*qHtXF&(amaJTQ(5U6R32nkJcNKyGF-aYJi~Z%rhUGfjt8)G*Wh_n4ye| zZ5=c1H%zCvqvVahp$pm$Mk{QSf!7M&wdCw*V-Q<*DX?w&RYHw_PTRtKRD@@Cq(zii zt?u$wxSHhJF;K4=a%UZOB&L8KibDYJ`ufhIDyMtYH6BaRStSfkIWkwNG4l&t(SxYJ zQLQF`xN_vv{wyCaZ3~tpf^SRmTuiH&-0V_x6!%xw6rX|$3ILYPtUHWr;FSzYX&~@n6+zWdPH@-*=_8Us~~T#}hK z@N*_gzQ2b^ zx|WPHq$4pL3fGtHr0?`l)0fV5ivu;yzAajO`U^J&U;4RYQ!5P{U%oY7%`9|Wu8HJR z(-Gzn&XqZwD{+HyJ~^i-OJi@j#631hjddE()`yHmt57~FEo>vS_;W7Y*7Lb0Gi9*k zn6ht=38plebV1|SSqhBbd_+mA=y(3l&F!asQT$W6(CKy$(Z6pXFhQ1N`5w<2w)15j z9odK{jC;(c*JjE&C%`l3cN!Le0fv>-!1OqU$tH*A(E5nr5y;}!?O8NyN;W%q`bp56 zU+>u<+@g=_-?kcDzZ^l_9i(>K7B!WJfCp&eEp4?|?8Okn+GS zT>@*2p4(bjyL&ZTzw2()&PmDGE;^QvR2&Le553=b5P>jB87lho$Vtn?l+lg~B_KxR z%i|BP(Tzs6D+sv*OVrpQ)s;aY6pdCX&P7H}O~-L`b=Z(tWHAO; z0SjPieNi@v_gnd&TD;`@&{MWwPoa7#qokn6N#O3+-VD&~dsROYw)rA29lkd|5CR?R z(!8zwUPV>1syn!rUoQL%UwMJqj8@iI;X5^}PCrMF*a9p@%>$|C_N5b0vDn?GY5L>x`NI|S=4kN8UhC-(u8?-#qWPk>GvY!hTsQ3>$elCyZ1wiFoM=6^zt53mj_xLUqaDdBI*2;&ndxKcbao6CnTY5RGuXUdiv!~|-l`MzV}lS+#5;zJ-IVr*U%&TC*u|K0^ zf}G~(aVqCOX;9?~8S=Gm%SmpysOc;p#n2FFL+_-qi6T)j0v^vhY97Ye|3{p8cC3X>-o}cd&TX9WRcHtwxh2 ze~ZRP9M;=crn5a~#rp#|M{`;hwOYO^_%dziUVV)v8hoIco9tODo1YCDXl76J4dkHs zJH|uIgFy6&y2vc=8okc|G~xbf@a2A>Qf0xX(+!2Zk80(AxF-L5UPvX<_+d%5TpcgA zqP!(O(--EWZ=7YKE7&jl`82e-2$#Mk=OIx_xb!V}a)k5)RX6E|4p?EoHZNl`{meSf zElFi(<2+}sSK$)C+7E*{(ZZzzZS(WOzBm*IT!+MBAvn<76h#vfH7~=|ALqjKjTES@TEU0!YgbU~Rgb@O-&BENqDu=QN24{s@~={eReNU6E4=aQBoJ zzI1Eo9rrzlHmvAQ_pT8W)21an2KAa{)?y|A9Zk|x!u5+hSi>x1juF3}FZ0^t#hMmC zTk?1Rl`0FN@ZeBs%}*q{pq``Yw4`h#`F;oqqW#>abcnmkW{@bmgRNqTdHaKWnv?Tp zi<)ShZ8BM%r9)_kR^mH7aE)~=mmKIomZ5(N1(F&ceUC9UU;u$?qz?Ai4JImr~!Cdmrn(% zu2>#`Z36A`a6A`pZ(gfeo5zzY_B*8_>1=Lqr=v;|31BZsE;nqdPa^0o;xzjW-b08E z47SBlhPGEj5|*c#eE35?#=v_aeN<$j4l4(6aT zV&CYNpDouTGUyjCi1~8B)6iSIvL3A4GX(q={PrkFOw>mrUyHOm+EBK(61DJlxa}Y= zvpU3;AD4pDx3XhMir#gllFyHPVBc%u< zIh0{{Q4)H6;%620zIBt{BW8Mru zG0#P>RK_T=)G^~KMfa>G_|GE;A7Ur_*1uo1drGF38p_<^QW3E@9}!zoGx1zVLFb-K zHy13$*N*>Fr3O2qj}Vp>9|2}$wy{d$r|=3x*aCzS9Hh&~kS6BdE*riDGG1ni$r0zd ze<-U=Y|AifYm)6-Eo)bqks@)j6Y`?jS8~tbvd~zfuO)y#p99oYEMYrOrVxuTKXkq% zdQ(gA)Yawm!!m77y7@&vM%W&6u2*-YH5aIZ)MSx_SwZiSXxb0S_J@S_V~BL@<_2(% zkVMalhm5@ruCOY%ErBRG&ASCDhgov5@S83%31k&=CA#qzFb$Y8gbK&gCJP?ur+n6j zScb?LO@*dr>ImjWXMO>#pm{~#CnB(8MdF)1=^*bI3CS#>z+%>Byr~@v=zrpf04!XI zpK=_lh{0lECh@VP*o-AD@r)(1tWldjgD#k zK}+*BMMMV%5!m_}!(R44G`0JHo9DMNDUT~4yOG|iC?^WL^W<wRcpCpbZ&tw1EYJ#W=mWT|tW?TCwVq%jHJ zZ5KS~_XlicZ_m(Ff<)Eoc0DP3&ouUna3KCA;!{(JC%^V#j@Ed2+jk$ox}cAWLT!99 zV{S6`Sf5E!pbkhSHnkJeY92(9pB&KAeQ|F$V7FrHKUySb>|r7t@3da`;o2QjYJ2-E zl0eP3xq|9^GmNV)WVzfw{1vw%PvvYEccJ>Gs@sPY-40sv7BDqlLtb5#lERvjv2ldvj|V@y1W4oI5q?6foBgkH zDYz9~77WRA3H2zcWY}o{$s6S{99wPto*QrJpn(T6L<$P;6w-mrj^)^~3HEc<$@Ar# zu1BGaCecg=ii9d_l>Il^PFOmd`>1Qb~ z3pRU>UF}qc89%|)49*uDH*dNz!cq)(u{KS#VmiE! z#z$qe#Kt&K+kHG1Um>#0Piq}wKO=`$y!#L z5HC`{Dt5pvJN{Q(&OJYw_BM@;#1qD%k!V==&6QG%_nQBu7E_mv2C|uqtcIY9)u)?u z5sMY0Mfw`Z@GsxhOV(Q6|9WU)zdO;8+(8lH8ZB*5YiQ-W8*FdZMDP=0dd^~WiJm*= zt~Pt=;N_Vj$9W{M!4vHQ`Or;(Pp*_=$=ODDBkM23%0^kMV@2tJ)=W7|KG%?Vh5QM~ zBj=eVy1zJvbxCgG*l|2zr?j|uzMwrE+R?2008;tk7UB*)p8qn#u z=9A~A=hKKPEt8%IZ3FM0FhuPIo5z8pGu~ccK>W+co^5~{Mp86<2`P0( zkvNV<88MPGlZyLr@fBNZEM3R{2{76PN$I^S*wI1vKvJB^%mra3@5vK!Vs5)Qz zKxPI(x%&x-3=2WCh;6hn0N5$<-9|5mWU`)a+#XO$g{YP!XE_8PCpi{~AdTh5f5M_O z<*Dk791XVh6f68NJVB?GLtFtlxQp?<{#8(I>vpkiIj+uXRt@t;heRS#P;ovb%XpWa zdJ30Pu{=JH(2$iHQWjNI824mVzTe)$?T-J1fKX*KY)`TS+`t;+iqol z;mIsxo+5kX)byt1*akU;m|zZjd(20OcPS>rCAaW{cUnf6CRwPR2=+ewrIo2y7W-VF zFS7;ROoKQKJNuVuOz-*04Uk0oNVFL3Gs&2L8Gh=7oE5ir@4{k%K!#b1l0~(2u0FP# zRfF1t6rL-;Vpogd0$)qGX)Z3?W*d+_errbl^3cWsSyyFJ2TWMw9<}NIV~* ziQ$ZD{ys+0Bst9nhuif+JFy#Wo^0?g5Y3&j?IsouNsM;Z`kKNO1HtFxceUu1Kd~|^xTRhcc#Vb;5k~SsfFAZZxddhLo0G} z3XQ~ZBoc-(SrF)~O4ph4UCZZ*ti_wXrY-J2jmOlhiis*74U^XGDF#o|;_$zr)y@`6 zw8?qBzn>RP5rBm6&UEAVOJscQxOX$9`!*+qW8l9X zl5jG0%>Q@h5l6c*)llUKpMT03e3@C%=U3Jh3r`HSr_QCkk)ozTX`djmh^}FCtR8ZG zR+$m09T<-8{%9MBmt0E=zEEQ%PkR|m(%sfdJkBxhXuIFF-ULoL!_6H$65z-;kZK!_ z1a9-*N96h_x>)h%1)TQ=r(d)K=^~jl86(6e6q79lPbq~DD9ExIoj{%4*L6b|9@16X zgV|}qEQj`+s8Tw1M}1<0ERG>reUIxh_04_#vknTAnY0br@_k|l!!<*`sA<3Lsk}U! z@UkCvjE;sa=?oLjDp?*_9iegDH>;F$iE8D6Z{!H^dd(}?mLaV<>&K5c>C$U%^qoD!jRaumQ)@)(XA$Dkz zT(^4T&z~#)WDnRDwi%qp4jcf1$$LhSF%#wxlY8}q2Bw6@OQdw8t9G^Y4RJ+9nT-Y6 z%O1u2;bw>3cGDkqMzqvv&h@`@i&zkP*uSDfu@mtLPZfv!NzXCNJ2|zh{CQRV-Lr3M z;Wdz@&=+h5z76>Bb5e|ZO-N`7ZT+cNYk$-(xkE(rpgMI)(I^#%)(-tkDB*fTcPXhp zWvU_bZ*%x?;7BvzwN;Zn+nzX3P)`);;cv~*ed&MKE?5$&W8?2sBO-h#U z`lPO986`baZ#KaN@%x(30G!*1gOlu~1wG&M#uUBg056Bpl^@=B7zSsPAADrwOX|h? z%==Mq`?o=+f0Y>lA=aeN0Z!%Q&y!LnBGVHP0*irT+o@UU`+OPh<7o+Ou`%iv#h|kW z>rLj=$8^D8fw7SK=;7J-+X&I~J{6!$SfdwNi{UOzQ2vT2(#g=~yxi>SjQ?|_q{{q5 z`(FbAoJULXX$^7Sl_^O-myl|I3$tfb>NGU(2xK?Z=KSN7f(@{Lx>MY=MO;G7F>K!z z-Dcl#iD@YGCE^3Y!`V6p4%P_b5{`a{7g`dB{IWl$iz2o|JuJUm%mzTSZ+2dV>L zQEWu8EL9JzW@1$jlXLDdjKH{?Wk)I-;(;o8Q~5Pi!XcEv5Ii zLotVmMB92J%aVoMyogWLL7dnwcfP$mi?8L{hk_~P7fPHD^@5_@hHP|J4WZt}On=i9 zQ%CstnpM(7#dutJlU61^2=elpvTXWQxmp2+<3lTr_E$E4ROWJGg9^c%@OMmNBHc<{ zU%|z;JF8#oEw%{2c-Eoc7O|@&k5f)`zriTO=`BbF2evcx?_>0iIKAimc}4GL zC#NJXniI{}M4=wMb|iedDvu{l?4W@C2L*l}13n4ks6cvT6Er}i ztbj9P%Qkq}1%O40*57v0tMK*wI{r_$dkv)k{N=2RD>8_LDw5s?hpI>D|x;Z$>2{`J`HFhlE-+GF!3m0x2SB_RP1;euJ+`AzN7xNlP#=50gBf~U_7@K{1mI2 z%l-*CsG7lZe?0Vc%nxxy7ubgq_LWae`ohJ+c_|(vIpgQvEO`-UXFKqDq-cE2M|)>m zzL*-%68p9`aaS7UeRc*GKG#jPo!trmsL6+%57dvN1a;4YFHWv`UX~7PJMQ~!&v`9c zGe<(GfF#s6E!3dzZ|fvA`9y;)nQSTiLg$wuS5BF4t$Uh#)CWugKj!wJ13Z+|pW#7e z^IqR_I?SjjS)ji8b#ONdmf}3o-ZU98-y1XE%b4fkvuLpn{y-rujITk4K-N1!D&I^F z2X}VEH>}(xtMXATDh5|O(Fs|QK{`!DR^1N#C|^e$_Z0Zdfx`AJE6KSJY7yNoHOZ#p z+*+C0Y`^QJwY_hiW#DU7{6@s;)ZvIdz*H~r&gZx~PI>-;B+u*Jh?*!*bw2wDO8D&< zis|h{r$JM8TD5)7v*=M{=h%6>m8Skx;#@my@P{oN zedyIcBCmG;^A9>O{?BgRP`{gm>^`q)nAc!Rc55tlI8Sw_CQ9AfAR%hYen|OCA`+(a zgl=SidR`qiAW#GpGdr~@r(DyH_FVyW_>VS+bq!R?fz%R7suiHW@xz{ z8CIvW51-`xL?0(B#qw+|BTTtYii*ml&&Ra*-%ZV$i@9Kl?{#I1i$fnj1<|;AOjut6 zg}a$irou3fbij@gEUR6u`zQr;Mlk=ATDe`mlpPbqRV{iLog(BP2|V{2AFmSLeT!x% z;Z{TE*7G zKtgA&5zq=-5h;Mal$0cS zR=;iPz&p#?@PR*1kXBO`ZKU*9etEeQ~p5yf^s1rwyc+V@2!>n4x#3^on?vQ1R;{;!(WHM2(v8>E>0~5u=l*uyjU@q z0%VeEVryW-eGNHWQ07XoAFmroP^W$4C<;n=9t*ihNb9PdNY7cj^j(A(`FcgoePUj9> zdPOl%N)P2ev>9A5M;(aUkGf68?n!gQC(&)6yz+2s6er7&7QHkT=k@ zAv#aC?b@|MG z^jL1#?NMpCTavL<2H;9ASBLzgA1s8Zeo+NTZ~!b4z#CdL$as|leV<&2rR+s9rnq%f zpiRyOAiutW1s4O*G_ZdG@}d0w_6%fHH1??TDDZjgPM!K2(Q9K{mezFk-yxGhT1sp` z5+&=+J{6R)wQnqC2r(nus{Sv0+nn~AgGglM%nf9-B#N2}e><&ezl8`obK*`0VG>(y zY~Yt=VPZb%07yc|V|lcEi7*>)|V$PmwLm zbN=#(XnC+0j572(e}1m50%Ul<`{n9eN1T9T826Ck_}2{I*~|#(O)p0^#{8It5^pFF zb&?q-ai=CnK|F1gD3hD_k3kJHU7j{SUn^007#_v0QO<9CFrq5_?qTZMRT<7-YHpJ) zT8+_pVKgI(^@+=(wal$=_oA4hN}w+#fJt(Z3=3aOpeXlQEDx_v`w1?9h+wX`m+ivb z+)ZTY>t}c9n-fNE`Jm+73>4iCCV59~xd%SAO!1LyGDEF>;QIW|_rDAl-l`WA1Vg57 z^xneX7r@l_5@Qrcs`J8^7UDb$-WeK4m+XtJ3&KZ7S6+^$NZ>!&X`PU!KTz#P_GAY} zUxpQ}?a#t%EUg?CV!M87FVE7`zVtM28Ws)SA`7AtOq~2ECaAz`qv_?F~C3qSUCUM{7shv@F07{vSkdl;zdrs${-|{2xkbS>yl! literal 0 HcmV?d00001 diff --git a/docs/auto_examples/index.rst b/docs/auto_examples/index.rst new file mode 100644 index 0000000..1a51225 --- /dev/null +++ b/docs/auto_examples/index.rst @@ -0,0 +1,60 @@ +:orphan: + +Examples +======== + +Examples of the package functionality. + + + +.. raw:: html + +
+ + +.. raw:: html + +
+ +.. only:: html + + .. image:: /auto_examples/images/thumb/sphx_glr_plot_example_thumb.png + :alt: + + :ref:`sphx_glr_auto_examples_plot_example.py` + +.. raw:: html + +
R data loading
+
+ + +.. raw:: html + +
+ + +.. toctree:: + :hidden: + + /auto_examples/plot_example + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: auto_examples_python.zip ` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: auto_examples_jupyter.zip ` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/docs/auto_examples/plot_example.ipynb b/docs/auto_examples/plot_example.ipynb new file mode 100644 index 0000000..dda9ba0 --- /dev/null +++ b/docs/auto_examples/plot_example.ipynb @@ -0,0 +1,72 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%\n# If we are in a Pyodide kernel, we need to install the packages first.\n#\n\n%pip install lzma\n%pip install rdata\n%pip install ipywidgets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# R data loading\n\nShows how to load R packages.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Author: Carlos Ramos Carre\u00f1o\n# License: MIT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use the file uploader to convert files to Python.\n\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import rdata\nfrom ipywidgets import FileUpload, interact\n\n@interact(files=FileUpload(accept=\"*.rd*\", multiple=True))\ndef convert_from_file(files):\n for f in files:\n parsed = rdata.parser.parse_data(f.content)\n converted = rdata.conversion.convert(parsed)\n for key, value in converted.items():\n print(f\"{key}:\")\n print(value)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/docs/auto_examples/plot_example.py b/docs/auto_examples/plot_example.py new file mode 100644 index 0000000..793e98d --- /dev/null +++ b/docs/auto_examples/plot_example.py @@ -0,0 +1,25 @@ +# fmt: off +""" +R data loading +============== + +Shows how to load R packages. +""" + +# Author: Carlos Ramos Carreño +# License: MIT + +# %% +# Use the file uploader to convert files to Python. +# +import rdata +from ipywidgets import FileUpload, interact + +@interact(files=FileUpload(accept="*.rd*", multiple=True)) +def convert_from_file(files): + for f in files: + parsed = rdata.parser.parse_data(f.content) + converted = rdata.conversion.convert(parsed) + for key, value in converted.items(): + print(f"{key}:") + print(value) diff --git a/docs/auto_examples/plot_example.py.md5 b/docs/auto_examples/plot_example.py.md5 new file mode 100644 index 0000000..210ce86 --- /dev/null +++ b/docs/auto_examples/plot_example.py.md5 @@ -0,0 +1 @@ +a1050de4f5519fc0d67bed3e8c4b53ae \ No newline at end of file diff --git a/docs/auto_examples/plot_example.rst b/docs/auto_examples/plot_example.rst new file mode 100644 index 0000000..7b270b6 --- /dev/null +++ b/docs/auto_examples/plot_example.rst @@ -0,0 +1,109 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/plot_example.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + :ref:`Go to the end ` + to download the full example code or to run this example in your browser via JupyterLite + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_plot_example.py: + + +R data loading +============== + +Shows how to load R packages. + +.. GENERATED FROM PYTHON SOURCE LINES 8-12 + +.. code-block:: default + + + # Author: Carlos Ramos Carreño + # License: MIT + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 13-15 + +Use the file uploader to convert files to Python. + + +.. GENERATED FROM PYTHON SOURCE LINES 15-26 + +.. code-block:: default + + import rdata + from ipywidgets import FileUpload, interact + + @interact(files=FileUpload(accept="*.rd*", multiple=True)) + def convert_from_file(files): + for f in files: + parsed = rdata.parser.parse_data(f.content) + converted = rdata.conversion.convert(parsed) + for key, value in converted.items(): + print(f"{key}:") + print(value) + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + interactive(children=(FileUpload(value=(), accept='*.rd*', description='Upload', multiple=True), Output()), _dom_classes=('widget-interact',)) + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** (0 minutes 0.622 seconds) + + +.. _sphx_glr_download_auto_examples_plot_example.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + + + .. container:: lite-badge + + .. image:: images/jupyterlite_badge_logo.svg + :target: ../lite/lab/?path=auto_examples/plot_example.ipynb + :alt: Launch JupyterLite + :width: 150 px + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_example.py ` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_example.ipynb ` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/docs/auto_examples/plot_example_codeobj.pickle b/docs/auto_examples/plot_example_codeobj.pickle new file mode 100644 index 0000000000000000000000000000000000000000..56341a53fcbea60607ab7a23b1fce48814c88511 GIT binary patch literal 2220 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 literal 0 HcmV?d00001 diff --git a/docs/auto_examples/searchindex.dir b/docs/auto_examples/searchindex.dir new file mode 100644 index 0000000..e23a7cd --- /dev/null +++ b/docs/auto_examples/searchindex.dir @@ -0,0 +1,3 @@ +'/home/carlos/git/rdata/docs/_build/html/index.html', (0, 21128) +'/home/carlos/git/rdata/docs/_build/html/_static/documentation_options.js', (21504, 343) +'/home/carlos/git/rdata/docs/_build/html/searchindex.js', (22016, 9119) diff --git a/docs/auto_examples/sg_execution_times.rst b/docs/auto_examples/sg_execution_times.rst new file mode 100644 index 0000000..0fd297d --- /dev/null +++ b/docs/auto_examples/sg_execution_times.rst @@ -0,0 +1,13 @@ + +:orphan: + +.. _sphx_glr_auto_examples_sg_execution_times: + + +Computation times +================= +**00:00.622** total execution time for **auto_examples** files: + ++---------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_plot_example.py` (``plot_example.py``) | 00:00.622 | 0.0 MB | ++---------------------------------------------------------------------+-----------+--------+ diff --git a/docs/conf.py b/docs/conf.py index 55648dd..64260f3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,9 +19,11 @@ # import os import sys +import warnings import pkg_resources import rdata +import textwrap # General information about the project. project = "rdata" @@ -64,6 +66,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ + "jupyterlite_sphinx", "sphinx.ext.autodoc", "sphinx.ext.autosummary", "sphinx.ext.intersphinx", @@ -71,6 +74,7 @@ "sphinx.ext.napoleon", "sphinx.ext.todo", "sphinx.ext.viewcode", + "sphinx_gallery.gen_gallery", ] # Add any paths that contain templates here, relative to this directory. @@ -129,6 +133,9 @@ "type": "url", }, ], + "logo": { + "text": "🗃 rdata", + }, } html_context = { @@ -223,3 +230,27 @@ # -- Options for "sphinx.ext.todo" -- todo_include_todos = True + + +# -- Options for "sphinx_gallery.gen_gallery" -- + +sphinx_gallery_conf = { + "examples_dirs": ["../examples"], + "gallery_dirs": ["auto_examples"], + "reference_url": { + "rdata": None, + }, + "doc_module": "rdata", + "jupyterlite": { + "use_jupyter_lab": True, + }, + "first_notebook_cell": textwrap.dedent("""\ + # %% + # If we are in a Pyodide kernel, we need to install the packages first. + # + + %pip install lzma + %pip install rdata + %pip install ipywidgets + """), +} diff --git a/docs/index.rst b/docs/index.rst index 14adf49..f6e387b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,6 +12,7 @@ Open :code:`.rda` R data files containing datasets and convert them to the appro installation simpleusage apilist + Try online! rdata is developed `on Github `_. Please report `issues `_ there as well. diff --git a/docs/jupyterlite_contents/auto_examples/plot_example.ipynb b/docs/jupyterlite_contents/auto_examples/plot_example.ipynb new file mode 100644 index 0000000..dda9ba0 --- /dev/null +++ b/docs/jupyterlite_contents/auto_examples/plot_example.ipynb @@ -0,0 +1,72 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%\n# If we are in a Pyodide kernel, we need to install the packages first.\n#\n\n%pip install lzma\n%pip install rdata\n%pip install ipywidgets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# R data loading\n\nShows how to load R packages.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Author: Carlos Ramos Carre\u00f1o\n# License: MIT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use the file uploader to convert files to Python.\n\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import rdata\nfrom ipywidgets import FileUpload, interact\n\n@interact(files=FileUpload(accept=\"*.rd*\", multiple=True))\ndef convert_from_file(files):\n for f in files:\n parsed = rdata.parser.parse_data(f.content)\n converted = rdata.conversion.convert(parsed)\n for key, value in converted.items():\n print(f\"{key}:\")\n print(value)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/examples/README.txt b/examples/README.txt new file mode 100644 index 0000000..8a8b9a8 --- /dev/null +++ b/examples/README.txt @@ -0,0 +1,4 @@ +Examples +======== + +Examples of the package functionality. diff --git a/examples/plot_example.py b/examples/plot_example.py new file mode 100644 index 0000000..793e98d --- /dev/null +++ b/examples/plot_example.py @@ -0,0 +1,25 @@ +# fmt: off +""" +R data loading +============== + +Shows how to load R packages. +""" + +# Author: Carlos Ramos Carreño +# License: MIT + +# %% +# Use the file uploader to convert files to Python. +# +import rdata +from ipywidgets import FileUpload, interact + +@interact(files=FileUpload(accept="*.rd*", multiple=True)) +def convert_from_file(files): + for f in files: + parsed = rdata.parser.parse_data(f.content) + converted = rdata.conversion.convert(parsed) + for key, value in converted.items(): + print(f"{key}:") + print(value) diff --git a/pyproject.toml b/pyproject.toml index 3a35ec1..eb870c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,8 +37,11 @@ dependencies = [ [project.optional-dependencies] docs = [ + "jupyterlite-sphinx", + "jupyterlite-pyodide-kernel", "pydata-sphinx-theme", "sphinx>=3.1", + "sphinx-gallery", ] test = [ "pytest", diff --git a/setup.cfg b/setup.cfg index a53dbc5..5daa58f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -10,6 +10,7 @@ multi_line_output = 3 include_trailing_comma = true use_parentheses = true combine_as_imports = 1 +skip_glob = **/plot_*.py plot_*.py [flake8] ignore = From 2092382fb9d96795876cd783c0b4bf7d4299139d Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 12:00:50 +0200 Subject: [PATCH 10/19] Change to classic notebook. --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 64260f3..0c4df3d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -242,7 +242,7 @@ }, "doc_module": "rdata", "jupyterlite": { - "use_jupyter_lab": True, + "use_jupyter_lab": False, }, "first_notebook_cell": textwrap.dedent("""\ # %% From a18b2dacd4b65e92e9ed3826d66d2b4ca39b2ff8 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 12:06:28 +0200 Subject: [PATCH 11/19] Fix tests. --- conftest.py | 1 - setup.cfg | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/conftest.py b/conftest.py index 98c75b2..e69de29 100644 --- a/conftest.py +++ b/conftest.py @@ -1 +0,0 @@ -collect_ignore = ['setup.py'] diff --git a/setup.cfg b/setup.cfg index 5daa58f..546144f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,6 +4,7 @@ test=pytest [tool:pytest] addopts = --doctest-modules --doctest-glob="*.rst" doctest_optionflags = NORMALIZE_WHITESPACE ELLIPSIS +norecursedirs = .* build dist *.egg venv .svn _build docs/auto_examples examples [isort] multi_line_output = 3 From 372a31ff9762b3c6cea7218ace398d0955a23966 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 12:51:12 +0200 Subject: [PATCH 12/19] Add ipywidgets to docs config. --- docs/conf.py | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 0c4df3d..64260f3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -242,7 +242,7 @@ }, "doc_module": "rdata", "jupyterlite": { - "use_jupyter_lab": False, + "use_jupyter_lab": True, }, "first_notebook_cell": textwrap.dedent("""\ # %% diff --git a/pyproject.toml b/pyproject.toml index eb870c0..bcc51a1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ dependencies = [ [project.optional-dependencies] docs = [ + "ipywidgets", "jupyterlite-sphinx", "jupyterlite-pyodide-kernel", "pydata-sphinx-theme", From 5bfeae7b2f001fd17ba6f8e1f49b0afb8f6ceacc Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 13:01:17 +0200 Subject: [PATCH 13/19] Remove verbosity from example. --- docs/conf.py | 4 ---- examples/plot_example.py | 9 +-------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 64260f3..abe613e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -245,10 +245,6 @@ "use_jupyter_lab": True, }, "first_notebook_cell": textwrap.dedent("""\ - # %% - # If we are in a Pyodide kernel, we need to install the packages first. - # - %pip install lzma %pip install rdata %pip install ipywidgets diff --git a/examples/plot_example.py b/examples/plot_example.py index 793e98d..ae2761f 100644 --- a/examples/plot_example.py +++ b/examples/plot_example.py @@ -3,15 +3,8 @@ R data loading ============== -Shows how to load R packages. +Use the file uploader to convert files to Python. """ - -# Author: Carlos Ramos Carreño -# License: MIT - -# %% -# Use the file uploader to convert files to Python. -# import rdata from ipywidgets import FileUpload, interact From 6cf343ee6c97d0c6a338df9daca8e78a31fa7994 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 13:02:12 +0200 Subject: [PATCH 14/19] Remove generated files. --- docs/auto_examples/auto_examples_jupyter.zip | Bin 2080 -> 0 bytes docs/auto_examples/auto_examples_python.zip | Bin 687 -> 0 bytes .../images/jupyterlite_badge_logo.svg | 3 - .../thumb/sphx_glr_plot_example_thumb.png | Bin 26794 -> 0 bytes docs/auto_examples/index.rst | 60 ---------- docs/auto_examples/plot_example.ipynb | 72 ------------ docs/auto_examples/plot_example.py | 25 ---- docs/auto_examples/plot_example.py.md5 | 1 - docs/auto_examples/plot_example.rst | 109 ------------------ .../auto_examples/plot_example_codeobj.pickle | Bin 2220 -> 0 bytes docs/auto_examples/searchindex.dat | Bin 31135 -> 0 bytes docs/auto_examples/searchindex.dir | 3 - docs/auto_examples/sg_execution_times.rst | 13 --- .../auto_examples/plot_example.ipynb | 72 ------------ 14 files changed, 358 deletions(-) delete mode 100644 docs/auto_examples/auto_examples_jupyter.zip delete mode 100644 docs/auto_examples/auto_examples_python.zip delete mode 100644 docs/auto_examples/images/jupyterlite_badge_logo.svg delete mode 100644 docs/auto_examples/images/thumb/sphx_glr_plot_example_thumb.png delete mode 100644 docs/auto_examples/index.rst delete mode 100644 docs/auto_examples/plot_example.ipynb delete mode 100644 docs/auto_examples/plot_example.py delete mode 100644 docs/auto_examples/plot_example.py.md5 delete mode 100644 docs/auto_examples/plot_example.rst delete mode 100644 docs/auto_examples/plot_example_codeobj.pickle delete mode 100644 docs/auto_examples/searchindex.dat delete mode 100644 docs/auto_examples/searchindex.dir delete mode 100644 docs/auto_examples/sg_execution_times.rst delete mode 100644 docs/jupyterlite_contents/auto_examples/plot_example.ipynb diff --git a/docs/auto_examples/auto_examples_jupyter.zip b/docs/auto_examples/auto_examples_jupyter.zip deleted file mode 100644 index b2c722e0e55c999923b0063728729df65c3e1812..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 zcmd5;&1%~~5O$jWK#nE7FIxh3aMc927egQ=PzY(kqzOG#L2RUvvt+fqtX6T{kVCJ1 zgx>oGeTu$JU!gNA$#$Id5PFG>C2MAOcIKPeZ#+6!eZ1bG>*wC#=NG*{-+w&obm;pW zWmXxVz@;dxf=Jq_KD}CFjHjSf$%pI94Fe}n?F@}=m(v?0!N3o9e zhLv_^roI+pN#rP_B^hEkk=Yn9<|dhw@N80QlfMaNA>4UpCVCF%B3^Se?n<1JK4cUL zQ$}P`k16y|XJ%3|yiukkN1HZDOz$4CJ+v~vtNfX9L$)WJG9^0{1>W(+L0oNZ<=ch; z`5;r!B@Efe{iA#2`ag9zE+Mp1E)}o}&y~o)5&Ego7vMa$mcj-@!DxyZXsiN#?h)O? zs)Q`8!K|7ykULYbdGE7E`yO*X4p{W@AbD^i^_2B)`_c`l?9A=DB2B^iotSS%F58TG zpB0tz68UN8$W_qm#X5t$MKz&~6LL~}>J4K}e2^Q*a@?{;y%Cba3Wt2dcIv>R@apPE zLWiiEM_4cq+T%vFfUc&53+rl0iF`-qRNrpxd0`dBa1PTxyAY}hd^GbDNe@NYZKJJs z!QdR?(#>Ojh3l?|F<n$}7l1v~-zQ`Pbd3eozrG<2XeR(EJtHdh=el-PEg#guG(^SQg^AR;S=^I4xRA~nmlQNTZVZFgC3X>= zkJ(;0ClFtP8tn%Ssm?i(YL62PE7q9s$WCXAc_9&yW@33Xdwuz8$vV@v9 z*TLO|gq@BH?3OZ7I0A!3lfVL!^Z5B7+TM=dHh5t&ArY=mu~`a1WAhD-xtSm-q&DPr qYwdb;u<~eq_208R40*i$`bNKQPxjHllc%Iv!Ot!}f8&3EPUkNzjY)z4 diff --git a/docs/auto_examples/auto_examples_python.zip b/docs/auto_examples/auto_examples_python.zip deleted file mode 100644 index 4a9e3ab9cf6ef6a8c033fa198c9e9af8c7e4f3cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmZ`%!D`$<40W<;4|C}yA0WI0?65d@gCQYMD4W2tP1s9e8Enn&5Zg1%jFT=QhhF<1 z{eVFJpg)pNiDYlOO&~JXjHJ=ilhABBIyj72{+!PjzZVD3C;L&v{}=Mv+Jq(kl#Q)1 zvzsxfCgfn05^)@hIaD%8sEw?2yAs745#syW+<71c!Ss({4px>oa)mzY0mK;2y0A7b zhjZy_<6$lv(quUN`)DYBp-XH%=5YD#N|1eYMC#fjgf)WFH9|)uWrdEbl%~B!7y5u_ z$81CJZ6?M-H`Y+ZF=e5gX+Yb}ovv0GJZyts3Gcdxn}BWuI#~uGPG7GH*Ym~hRU*q0 zZ7Aa7%vHzn1e&f6nr2m8xen7*RH$A#ExG2B5eAqv7eJzn14YFK%7c&nRyvOr6a(R` zH{Eb7xrIb!)NH^uq&*JjY`gz2ZSZ(aBiII$0eF|h1a5FMfm>O3$V~phWIABulPy!O zz+xTEBT?}^Wj*Ba4rv$cp;9rM?(H9rKHjc=?MOZS;@i7jn@vA`X7?U_1)V==C8OvC DD#ywY diff --git a/docs/auto_examples/images/jupyterlite_badge_logo.svg b/docs/auto_examples/images/jupyterlite_badge_logo.svg deleted file mode 100644 index 5de36d7..0000000 --- a/docs/auto_examples/images/jupyterlite_badge_logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -launchlaunchlitelite \ No newline at end of file diff --git a/docs/auto_examples/images/thumb/sphx_glr_plot_example_thumb.png b/docs/auto_examples/images/thumb/sphx_glr_plot_example_thumb.png deleted file mode 100644 index 8a5fed589d17fe6ee62d6a9788519dba471fbd65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26794 zcmd3N^;cV6&~zU%f(#fBBGMqQ6{mHpumQ z^~%~w0VJvEnR)nlooKF`yb|H}xA|C<^cUE&K&!B{#ar*%RrUI{fOnuSCL$03!--#| zXbLuXBIIR=G00EgrNBb5!{Wg0L?-(}Cu?Haf+0F7%3dlH!I7q$mL$Yecj9<`jSzfT z^D5Zgt0)_Z#Ecth&8aB^q#^tt+jp*g;+l3Kuta%Af{32Sylxr^V1hg&jmnR}mkXfv zAbI2;{|#XPvE=`E0PeA)C<&;HFH;EcKm_ss4Tt~~BwnThPbCg5(+AS2SjXlQXBFG6FYU#Fiz_d=HGDi{5xv>!;RVHaotlES;Y{+4GrXjSnu(wiwX$)Rm{msq2XKT(PDE-xEgi z_(VivIE9l($F=w;5%X502cyd9S;o)?@*@IUt%-#RKi)is3GxWf#e9B1a0p}-K^GkH zE#RcLH-hEomo}wtS-`xST`geg^-vL1i@Xk;hL(*ihFVL8OfGro z7;=ZwLXX%~LDV&-I)%f^Zc@iBUPr)DOdL&SY8Fe4jRr0M^?OY#0}B$nzJ&L1In9Al zQOK9T4G@xxBY?1&=&}M<$uJ+xfTKBW>PRAN(VR;B>we1G_F=pv`)g>`Z^uYRx_jEF zLgunT}hWZL=J)o}-tSc-H43?kvu z2VGc#wT9ESOGB&rE@vy9Zz3|&#)3Ae*}ua?Sht~cbom|GLpPlTSm&X z8g90~9$!qLFeLh!xc`P0$(R$Ja&h&6EezoO__ACMkpyr*-p^zc6Sxuga|EOJ~>i$53|i zk3uPR?4WZH-H$~ya%J$=ipQkS-owRa4tw(P{%YPDc|taynH>AT=I|^o0}49wU~C{J zauK2=H85m@3Fzliq*hcd5LX*{uUE#$CpBIVU20AE#`cp-cs73fa2V=^W|F4HJO04v zh?+`+`1w}s-C)?|2Q&Bi)%tp}=My{T_L}AL?X!5%*(mp1+HX=ICa0VpGHL53#n?|w zrsVN!1h2aM0663#mGa+wr{K=E&1QL;2u+|ml4!Vcv|H~i8eectf>jNDUkq^angTdW z)#m!O%sOuC%7f^!Qht!qCw#tfe81zkyyL#c-mQq;u_=hU8Y&X0P3ZX%SuC=j%cBp_ zr)IOhDL^juo$ys}!om$%Q`tjo6J*I-hLpYq;KY(EwP$7&><+R6Cs-uf#l&-#?&}Uc z2}fsB6#K32O!O58@ksbMFteP}G2(2lnU(Xx0EQ{|6Fyl`z1ErflfT{pGkLUjTO->; z)k=c&e_nqG{-=f;xxac&YcIobydWM*>-WCPDRj}<`M?J$>U-1W=e@wPjOqn`WB6h3 zK~jXSxO+anw%MV<(bYq5#QL@?&$9}E9mOt!yYPhfLyOPk<($)-DALZ(Z<${Ys2e!I zEf@cqbht`&4b(^c=S@?tyU^-%7nsg>47yyUusdaMN|9?WoX_ry|GMNc@rE*&1ZWvhRi z_S3m-n`bk(@O+$m8Kp&CbTqx#!3Ro^Y+#WD0wD>iyApzndvKsR&ejCNHW0D$L?Y{& z-+!(ex(HR2t+z8ezJ13p%e#_pEzeK4BMasjYdnwJ?s{s>RYi;(GFI&ez1i>3C&Ca}f(#daZAeX;DyOc))i?10TL3cyU9coSu% z)362xbDc4*fSbB%;E}Qhj(t3Y;h0y44|>PJ{Wnh8tcJHxpgfb*cWZ`3JyR%I1eX@D zhJN6ES7k-g^nBRA6+Lz{hr;f=v9U%{mDsRr?D`_~Bl#>!q2hGpQrdVLN8GXyT@?Oz z+7-##Pu6db%j-<<)!r^-I*w+`UXXo=8fYr1;~kdxDdbuG7#=k3gnwVoy*Pse*8?CP{EM4h zidh=Lh5n)*Bd=X5LAxl_{94L7yp5$zMl^#3{EGwW`CdAsJZjClo-A{sUr5=r94uSOqPi$Bx2XqwJ0Xj>oqW`wvg3e07J z)B$YP_^e2>9eu-`H$Ilmv=_G3H|}OW)AT=Y3o&4{OAN>c@maT9IRH=16i5c13XIbq z?_;?AkC)0lxBghxk!|c14fTiYk`u>n>GBPA8g4GyLuofED1?CZ_ogTPNTn=*7Rz>` ztYLiEcuec^&_!PYFq(!2r=O|z#Ft@!biey30#@bucj&Ux#$iwD(4dukXbV1&1KhNt zqjE7f0?G2qOI$YC4rS^$^olhr+rM>-n6e_o=%}lSws$wIa?!a=?|&NpC0eU;zsWc{ zKWScWoG(_FP6kwvxFXl0Buq*6*?NA&t1N%CNhYQxAHE>%%=x@2fFKMkfr^ZzsGxgw zHOYm3bg4i(w(q;Sv}7U`6Pvh6Lm7Ptpx?d8)x>^1RQ1|vuG zD|M?Wx8nh#9<4K3^p^ z+tzr;24w)=wRU5Hn4~bhvixzHRwBbhqo*XVUm->z)SC1la7x*{$-z(_ak+M#+ZP-g zeJQP$k`X`41*d?oW^%4JZH z`2Ld2K6XjjT~MILbr{_xL>OfMd9;zSl*--#DwbWDM4Mp%J~N_%)nv|~hmH9@ z)4zT59opehPLJ^KJ6=VVO6Ho)jzT3gR98(NX*61GGVm56{>rj2M18)d^HhPG&iNrA zw3~jo&)!0v{GJE>iXI;ylLdla?z?dM+T(hzjWMg#Y7nngVIY8XR3%u9|L|1IzJP2% ztaEj&!l5_dWLvR#((N&`TQ%Z_aD4=0dIY1oPwr0rTMp@~krDj&qrOo>N7s>&+3e2# zj!pO%Q}P>}{K5VvO(@IX)|C%9o-~d!1M>GPa$u9}~ znp>y9i{nXjS1MjmdxDO!=)mKBA}-}mBp?edtY>D#G4~`p;ncc6ZCuu^9162{V`}LD z1V6Z{i6Rj#_U_ZbKJm)mqBY>vgDo5E5hb5`g#UiRW{W{;Yv3BoGE+jQunVS36Np2enN*G1C~E`p6Rz z{j*O=Hr16UEyfQtZjl0gr^mQuLw~P`!;^`G!)B$eL?HKwuJHg*Av%bEfp+&rI#S6h3Du-ZF@PZN*czynUs7CxrIzi<4CKW$DVUDZp4t@iHd(8;)$gN|7tcwXZ*}bVfvjelr52^Z_wbOI56$NP(NgU%iVHE zF4%~Q^N)t*gCUrPDQc6o=jm9zod2D$s=kAl9(4KKJVtQbESUEoxkjYn)gw9Hf$ zxkomp*C}$oszKqQn1bcxZ?n$jcvSPa-%+!QHfnAo#hP0@4Eu7#;_sn^YAFm}a5$kj zR>ve*17@Gze8vcL$w+E@`m5(=Qy*Q~>OI;1*l|C1v1PMWOw3eL9{)(8=9b%IM}6!U zMcHwGU&b-gd%E#WWQ1W&us{G=3v*Gczbd>nU~XA+RYmPvAK8xKIjItpke-|6DHLM? zV^m(Trt~H3n8Djvl-rxNw5%%KO97+CBR|c6-1xk!_MSCj{y-=Tl)@CO+~o2vmxWhz zY)tX$O0oEU#QKS|IP#9wssiTL8{ zJD#*5d^it313T$)w|h}CIq*lseFB}(#~)6PjENhpg?^8Xm3F>+oFgAQ0$j`746Z8! z4T=vRkY=AQ@V*?NvGxTdbw)Lbpeb#Hwn$jEkRl=kfxy_mFdnIZZ|v?Bk47e(MA6iu z=n4|Yw5OvgD)#Z`yIX8TL)kRf#j_X&X!Xre9^FbrGeT&ua~Ez z;L~rWd6P4b4BJHLCtjp5IQbK@Yn5nt(u(A%E*th>PWT9zmg#$i405 z1u)h5>|%j;2S6YL!d+3OTS>AcGo{_X_PRbtC^cZ~OZKy980j48DF6mKe0`ShOy)%)$Gpx&xYS;yMa=?0Luop+4>{HHg<+3oxDAZ>#%N{Z}PF z*y2V1MAwfF%&zQdI+R~N;zar?o(NK19$nQ&-1jXxMS(~iDLANz^Z7LflHO0Vw(S<{ z-&6fR1v zwYJ=7+&AQJkPZmGr9o>Y;3Dk51T1!Wny3eOhpSrVHP)r8j)n->0clR9O!IoX`MucX z^Zwiy9^o(E6WZ-Mwy{?YbRia8Hzm{^kdB^~ULyM{?&zV&+;rnvab{}4=iyZAU08O5 z@MV3_6vpe|{fU%r_^adQ-fn4Eqe6TqJ&VNr&47I)qv~~M_?mkg8<^CFz(S?YiNc&J zF8sSlt6VZ89ZVI=m8J2(?|e_Ih#V2_^euv=$5qy@pDZ&CU`?d!{!Xjfsm*EywtUo{ z7M`bz>Lm*;&#qzeUCS&pM&I|_VXXi>@ekIJ%6OP-srY6;NEm+rQ*Vm2SP=dpg`9v=8of0 zhOkW8VtL8ieYY31ECO7=oqO;@Z;1Kzm!dv@X`5}nJ?l8#I_`)#C(=D2%+*Mp=89va z5suRsE0+)2#jpPQZ^r2U4e8Tn0Artnx(_PB{~E_^f3atL)FN~J89#@h6>YEJ)SkOU zkVI-6t3OWeJfD)pik~F|nR+pV9ikPTcqm+4>0E|mxI>`U=jt6gulFW~I2NBxSomP5IND~h{YMxG>1blL@4eF^{6 zk#UK;tX9dPQL#jH$V)FC!y~DdwEKH`o^W&`SzLFoKY%L61$Od-y6mNtoA!97 zb$UD;2B^}_laB+luIKy^Uxf-;n)u=5i3a`beLsWhyI-)zg6gb&zCf*CjB)ffyJji% zQ#_YU?1e#Jdx!n7Hh(Ev_|i!PMx4H_`%&raZn?l8`iT!XKN5a0UHxpS!xGFhTNf+u zxpL3g?fDyTpaY9;=4WvgLgnhu2&s^lz|K2HyQC6^rpuT~EyYofcy)zpZBfmg;sx&O zRGn#3W%*3Vl+k#uA^Ks&Nc5APO_6`soi1jM35BHy;tl(LIhwN&a^a`% zJuR6vsJ;uQlY9qsuOj!Xa9BQ;(SH{l%NmW8PkWZ6_$5iF;!BonGJlTSxyBnademO^ z=BG6}B=bz`T7Vp#E}gK#fA=$pv=-a?p8toJvm3oLf8KYg@E~;oi^ZJM)2> z@1e%vtsSw=PX_(a0OjVZhHr*B{g*Z;W~=k%vO2VPhKypEAzx81pO<(tom_IjrLqcK z@zif`H$2E)oZV2FE-3#8Buc{2P?839y z#~{t0*VWy@2eH+)q@uti{*C6u-6YLDb<8RHk){z#wL@!tX{(Ia1#tU zO(0i6^t)Ueq*UJ0(u~F1x&}Xc`0a@7^&Z~y#d7ER`@Xo6>+bhoC<@-^DTsWJz$8O@ zE6q6A|0WUD9M91pzApN8$^s8ZUZ_$??^mFi= z)P@l=?Y7Lm!mt}6Km%zR(K8vzVwM*Cph$R+Xh-GcA2iO3omIER78s5{b=pAhf9(?R z=jTLCaD?TmqKr8OI!4VC|q!DCP=dfL9nazg#oyW^g{NeK5d*yo|ECkDoA zntQ_k_T^y$F%++7ZZFRcq6{D9EFXT)`{k$vq&&@tPha9Z|9HA1$islU8DzR5%*4N_ z8DoCrp?%1ld;gLWA)zb^F16gFV+?4T=W$cQrr1dXp6_NT3tcXsDig~m+Mf7k+r5{4 zaX`hIACv4>RGTPbo0)OUixoJ^mShV!I=(iQq{0#r8*6Kg8efTj75)X$kJM+F@I}UK zUT6J1kRe_tI*P!@&+7A20@t?a1+@I_mNWPu$Azzu(L~LJHNe5}vc>A0`ZhB2cvGWA zAP_fmED`+(u^vqY)Gl~k>@lkPE7s{N6Gk9+#3TqD@!RmIUBVFrL?mpY%{jeTz>Ul# z^|pRz2~Co5>*5Vwzu~?e8!^P_RU&lWU@N*MZCSemvk~1wkWh+dwBQK1rWMVqOV=%v zyWG(np@yt5?UDMjtFamAdo2)+Vqc~!LSR~pYD@3!kZumq_zz#BBQJsnet2!E?A{p`ONN@Od?Dfmf(G#Pe1^hkYDJ<6WdPOs0PO-=ay0Yv^)oC(`N1#}Xo#K?6jVUH7&Y zt>ZCkQuHIG`z{jqel&L+J&lkI(N??MwcMzEWwuRE z#tsWN%OvjLGsAyYLoMu0+RDt)d<{d{D_#C6oX)J(P(ujhKG$ds$ObrB+81&6HEUZK z6)Ny?G2BiOc@i>AX>0zY@kpJT=631_c&}0lHb_-=K+_#y@r3`Ov!QI~A~_f2I%EKS zJ7emxmhe7MD5eWcXU=kDb2?}pJ=Z2ixgDeUC)Cr0Dgk+Xip@@Z?fW>sIrSfsd3iKl zA^E2N1so#Rx-^RoLChMgcI*of<7Fc`lfSl9eUto$^I#>M(!@{8#<(NM6gWSTnNcQu z#F(n@U$X%u^XVuNW%;9#eG{+J3*S0eDbzOK*JU^!PFZiL;WG-ghu)JglFs-`?gx{0 zg^83973w0~@wfomO4tTCaGoAw5ySDvK+M&*B-%3F6upN6405V@Led1c)Ncz<5n^(< zPiF~QP0i%xt-8+Ans2bE6p^{j(LYwh4VMN%1BUMdM~=lxfRktQVj7Tbz4GRfJ5l**g7#AP{Ll zg26O4>0syPBWE01LOh{Vto8R|+hzwxjMgaa+4w4znI|@APC}4r- z_j-3kt^W!$v8L)O)(h**BQ`G7xTp5~*cIxL$Cbd!4BDqq1iG#K=~9AS9TqsXP_zV8f-mKeyL`)N8UjxE6ah@%CHBRjiYY zIAN$UE$g3x=1lf{!xt1ZRgVcz_({~_;ON4pN2KG(x>7`@%V6tAaX}iC*iEyNuh{Z< zP4>B7WT23ha(YzwOadZ+-><%ECjXix zzBw)Eg|m*luIPw7+s=KKGbMdlsp~TSU^^P?aC>~6uI9b%gV=r|dD=H2?R4lgxOouS z4y$=lE(0JSD=3f=cism*huq^ph>fl#eruAl&Qgel9&OAcjRk)uVWD_8t)s7{ATQEaE!nr^~>g=%(4pS8+Bu z5=G_(yS2XmS6Y<<>th8PL}|H=vh_+`rF++VgzfHwF?)POOi$iLaTu-X)KFZf9*u?T z?)}Bqv}%JriAp(#fdiklAyZx}iL7=i?Yhzm53*70oyBuUiOR%j>5$SfU;Qg4%7qnxL^X zxI~FR3wjB?`nEIEh!feQ?EB5fxl_Xbb9SubMyRuRRP*Q$EOTP&drs zY?gCRJmNK?Yq1V9fe#~p=K6_U2~;O55mu0P&seC38CLy+tv~Wp-x`q#x&>ZM7-Q3m zW4eD3)V})uA3+zGj}#kgL19Tb|B00v_HN*#OGe|6oD8pH=^tCuMly2~^7SO4!t)?g zy6@oxDL?L3C~3=371z7zURp$Z`m{P~37?4aXWtd&fX+CBi)^dH8Pk?Ah@fkZ()!`) z1X0mZu{ka}gkauYDfc*`#Qvobr##rtiB{U4PY809iCvoe)JrGm!V8g_?{9}sjEN0= zJ7$GABFPts7amvF?Wxg3FuLN{L~fQO2Ji_C{H?Zr zfx1Mn>%xiT^c%1j?7^kj&;Ai(5oLtxTKUAKq*cME;>S!-zWFU`$Q5Qp+Y6LFt-d-* zI|Yi&1D5sozyVt6Io*3Y(QbMUH6Zt&!WxBbM#)2%rL4sK&J$q7R-gKw`9Ij&^fvO1 zmLCl&t)>E;}-txS})rj3hexI>&3B9Lw&HJr;em;dp7)6hFSx)BpE zDm*>V;wiw)K?Qc**$GE$ELU6tzKjmkL)s zu`UM#;VDh!tL`#Wf4#+=lYGrdZfsUx$JbO|r4oTwXfXkrg4`=3V%Izv8Kj(cTDGhf z58eQ=^xq<-^r*F|u>!{;_Em2^J)jAy{&s94JOl#v*YHux@HFrJNuq_KMj{cd4B!GI zyQy%L+U#GslYhy*L&uRMJLVUA4D-9ylSREQjKgNu|8-2>jqtiW+McHya%Ket_zkuj zm3$1|$Ks(pmrP4EkMi}jCyvG+`NH5bpZ;|q0Y&){coHggK%;uf=ygA9Gjg@-z<06? z?Ix4=xt4ntSo@+9oy6cjU5elzD4ubWSy9ggSr6AII%4s~kygw*$EfUf zCY$#?+H2MPU7Dk3nKJ$X=vT#P&+45%*v>a)aJH8>pmXiNa08~ z#uSsyGl@a`R z?7#3vi8E>bKryMKl1od9W2}*q@jjedoHB;K~H? z;h{>mbHAOQ?yR})5R|r$vm|$Ig$ZnnL#t*8KK5}E+@@Kv8^(9yG?EfT5PU1;lin{4 zLSUjS%c8>N;~$k2tlzG=zm*BM6jW_WNrM*T)#Gz|3{UBi_BFO`gWIeuu7`n7qJ7!+ zoB49j8dB$kFYl%CkKkQAyfMq60G`QsWATY0(n^Qq0MqRiwat%l{@qJH_O!Wp|2ASV zp~0AbnKEINW-+Zod_NkA)8QUU3OqKkv6{WUv7umiWmN6w4y`-SB|;BV;-wz#^2nX) z8^1f-0CkHspK8Awr2)AoVa;dY`-(cwmj-#a^qWnY@txS1{hgb=G>2m7{0c%!)H zbs=y!>P=MRpDu#0WZhGe0hmuS$N;@)mS|*4E~72mu{YNq`RZI2l38VG; z&9cBZbIPwX$TSBPKN?k&W?cZIRHxaR)9Ch}tUXnw4yeb9w9Y0HH=?rzg6qU0_kXX& zikwQyBcGjclOqS5tHEx2(=0Eyz4ua<7wa614t|PXbnX@1^gG5j4}b>F?#wG?KKQUL z>D3%@JC#ak1x48sS1KpB=kC_yJ!7{-np@4coMInIt48ux_LJd7=zo%8N)@-)@Mqn? zCB{TDMLie03HEs~sahW1-369Q7k;$b8PLlKc|e60hl^hIV7!27_os@JOqQ{&^m@It zOU+BY&Kd1I<4B8XNEOGQ1fxpfLKZXxc`gJZVp(4YLUrlS#O3!F;mrX!*VfOSO6<2k839IE#ij3B6`Z33p3V1pDGW)z||*)hzf4| z#5U$te~Ik~F3J|qKe`0sb25<>Dt`sQv!b)&q;?!Q=CJ{$~>URp+ihe!Y>>%EQdotYO8c58TuoTLmkppGqebiz(tbA&68SL)Ym2PBh`wyUU1P7^o-V&xxQ%&I z1`AGU3bH%$YNuf^IXQ&0!Tdb$I7(3)vaau0-GLq!gUc*E{8a*|5H8aRMZy`Da}U;Q zk0R&2Y^ra(MQ4s*7$;THElm5vNno7%&0ev8lfW&rjt8_-k;O9IROA2H67|DhXL*}G z{w0f8xhpks8E$F1j1p#xIWiXZjBfJ5^IaMxafGqW`53v4sVk*MQwPMFnyS<{K}hw@ zd!wvxfN`sRTTVb-x;RGfyoA$6%2mq}{0gGHfQRm0M9P^IUVT{HFSh1`bO^0`(macn znI;iM@Bp<>s_2kCwF=JY z&PSrL)N>3YjsOL_gI3lipNJ2XrOul1Wkw+f?&ac$$3qPNi@V_?<6r^H*bU;p$q=>> z1HvZjJge#_N_vj=kpT^tx;Xz>wFlov3AYhs1rZwWA82QuRk~@988N#nN1&YOzQHa3 zdf&p06k#ycU~rClDyg|%s8er0F|}lCP@)Z{v-VzuK5T>5<=`+i$=M^zg~GidW{KUn8}&u^k7nksXyJs5{jRl`tHwI4aOs5*?ya1z}BK`rSbW4Osuwk zzP!7-44zPQ)BpsgLeCxhiNT!Za_>?f*CXJ;7qQ8#<^K=Qzj13VkbE1||LKI?N#Dgz zIi7fmv}!*%-MEm8-?F^f%-T%3{*>l+mq_<~HYo0Jb>M|QdT}F~I?YSYm@dv}bQ}pW zFz@r0I@tf#7ANC?Q{`j!@F@?F3h&0m;LY#5vfPc>xE`I4U`@X&vyP-}ERVw+47+d* z8XbB2sGh5Hd+{W*%UR)T5f#vG^F8`sWtR@~8)B#C?QQLfjP@T}EoZ+c4rjM1ZjGme zhKp}sp}+!o1JpBW<=)Fa2TtF_-3=QXVIC2VH8rTfxH&^ZfK)EC-4LZ7vc)gt$j;&B zE7W-upbGnrXAHR~IRB-K{$r25*hy70%I93yIb>rw9p~$V7vkmchY;zmv47Gi0=ZcH zG-@I9F(-ru^j;GAl76&@L6#uC9|fE$kv7K>zz5BI7}0z>OgtK##ulGp-w47^V_Q0# zHuCjpJ4->8o$~7oo7i0@Y29LCCw36}NAQbYir!Nzr3tMo>~3U^4m{^j8Rl_h?YAiE zyhGp#8%ummkQ_Q>=-qTpeH?NTNV6{LaTjc#b_*38J~BuhbgN0&^W0t-1FuH~#hhC1 zMn{OGvG&h*`xt>KB~YjZM>i)`Nsmwxb)F$$rXEa__@Kz+APMRe*11R#?(&0!_hWIB<((OfR`TY$wQ>BK1O&x$6u zr8b-zG`lss-&MNJ83H{XmrzrxLCXP3zx616s_fK!t~=CSlew@PbyMR61D!a| zsLmv7%{S${Gp_IQYMXWX0v;SV?H^Pci3At^G0=Y~46@dK00jSvyO&zMzs`y%Yr2nYu6#9Y z*YTghKFZCC2=D}K1OtgE7My;a;3 zsO4r0%Bicd7q4#W5 zm+Xvgm|hj6LwVVX7t5zeMTOVcpsaPSw)$>PxMkvdb`kyB?G;aGW z#kZjiTUtq)U|p}b)@9@V#PZn`{gD1Td0g|}}0wF!xU=e0hy zHyG}uiLnRu=sn7Bh;pjoG`}Fdv!-#0vnYegTi{ni^fepVyOqj1R+r>Tla9W>4-K)UAhR`x5(nWp0izSdW$kHF1DHoWrOr2;ljn~@&VXv z!;to}?n^_JyK~TjZwrA8#KSX8dc!BRrSBlPOK7p;OZB1NX&jQUu>3+zhyr%DF>>dQ*Vj_VXb;zX( zIo_JSRUrlqS!=a;rg_c(E}I>bRiUcdPKf);b;qbq#k^^jYshOCbOAWZUqIUnQ9fUKBEK$&)hXv1&qdgv{1eugEQ%@G{a2OG^*wXuG3b~$Zv(2H3pToh28)cr zYev{el;D$^5k5A9V}#~b=H}vTS^YGz0)O@*21Z`O0#~2 zm-{BE`O_B3P}xZhi&+@oFrY>(h+qjmQno+gN&jLJZ+iW2Lp5>J!M6k+iEQybApKr0+#up4UogAeoM;JMHEB#{VVG0Br(~t z;o<{@RWdi)*lYX)(Ellg;`^QWQ~uKqQPcgOc8HPgMHiIdN%#N6MK-MwOPxW=U$AsA z6hD+|C?>Sb{SdlDXTqSEA{YPm#r(u&eVOc1!~;E`A@Ii?TO5jMV6eX7U#3^=(KbJw z)X$50!WpsTP5Ivi;dG`1(Q1Mn-iO$?#VW{dUm|NOB$ja@QE>~Ph#-mNJ6c1`0#bL8 zb^;qmJmr$E@2Yme^?T-@OSlKhpe$oGY@`wSL5|#*;yAw8FZzoULOkIY8Pjn%67i)} z{l}6W>Jt9?%jS@lTQ|d>jTNm#PJF*w6sHB{j<*k-*5Fdj_2a$#24~eH=jC%yHg2!H z2%3x{t~SIdKK>vjhfqvt_1%^QjO=(dj%>Ar?0bGs(A!D$zPa)z8Xsv49exN|7Z+O6 zQRUPUKl+X}fXYb+dctaPfkRo?R%^7-e7>~5?UUu~$KcRYt<>l?;Xf7hVW&f)4q zKa7KyF0KN+?^GbTpU)om1euxNw5TZ^rg5oVeTlQIZ`^tJb~Uv$0s|b;q%9c&;>51e z`c$)xs>`*eJ`x%qvrd4^9+drc4!I@NZrA_@HNnBsw{F1nVkF8z@ec`yiSEx14LDqy z(CcM#uu}3QSi0JRtqHAV&yzQlJ+KM6c}f*i3M;DrmHQUjI^~nLX$wx^x;4UaN$FVt z&Pmm5(XnW;jlm;3k}hAJAQFW@KVom}CA#H78GhaYQ}k-~GuPz3;-Eyv;kR5brwy=B zfR_?_yPB`{N!wjgu_j5w7@JOz2OZGu;OL@xz{Q;*pimlR!y=pCB{#+t5AL z32+inpvA+yi-KRXMGWNP^XPZAp}vroYP!sQG4E;+EVla%vHfn| z#|EaX2j^1(GZJzEND26^KBVP~l=+=c^IXE0_g9ivk#n7S?_xastD0^LpRc#-hdV_0 z{hMS2L%wspFLfHM`AppRfmS04pWmTbkzSqy*eo0l65!CmA7^`)_Abq90Nw2}UpR@b zjs1LC*2a%m*M;*QVbo&1a^QSx7#|CBpliq@NG4%{O(l;%KbSXgE&km>;pUK}O#LY7 z=hKdHY$ZPGW{US;_!1p?0+d#mw!Ifo*>HlFQT4NYKK3Xx=%8w}&z^)%lHyL5sH{iV zQlF5F9w7Upp0rr!ed-P?%I&>cfx#jb4Y6>zdKeJ+1*oh}oS%=)jNbSgBl(?h{7G(h z3mkpT=d=<%WB8h)flTzOV9O;(hB8mL9kMwruOktKJSwJobi9HGFIkOasl_Se(vrzI z%21W_{aWwfkgZ?Y-lndle*~}utqX+WJJEhlYJk+i+X|(+ms~(05=ByP)FJUvJ{*@t zA0UuB_vEcydLk(s6&v~4(`h))Cc`&Un_zxPiYeT<0))7e6|JO%vqVKb!nHdzRPQar^O`$jL}9z zcyBLNT;7G_UWPng87D7{$!@~X$jtVVDcw-^!O--QX8KHDsde0RJpzB=Dl8CGTWVX; z@z}4;-=5e^MKO4ZMW5ZX8QNt)v*|Dr=8Jk=B(Ie^;aW$=do+aqxqxHb|3JavGWra5 zNAiX(4t5fh7us?>RPI#)^Zbo>R|As>Q{=BSGd7fKNt-!1Ld6HSL-vHePI$O@TM*k}5G zq^A`yH&o-#vlckF*uR?APTJx>E?Zt)SPk|+!z72N4GVeicTyS;X^jnzEuc?(yP3P> zlN08Op$ef~naLYyYId-keedgm&K9%#VT>(izue;kL43eqt%)>!v%o88*#7LwDY|8_^$tgu9%gq<`i_mHPkDUVII;Qtw_RB+^7)5mC zCO)~}!GYsE*TkmRB3s_G>oXw8BYs`AY5sg;!geCmo1pHIex)aefr2!DvA#Du%ja7g zDT(m(jrA81Ja0NuFR4?npk#SW=Tgxj>f>|w4$m(>3*rxA$Nt%CR|a@Y`UTlmzk=`{ zlJa_LK&$aMpOzv$X4@i{)S2$*P^*VjVyi`d>`~!zR2>ac!W2?GYJ3BA%brp-`1T-|#o!YMKf7{>+eEb0 z!+5L{^jYlE?$bB4;fJkXuVVT8R&evJ-b|1^3j?y}_DNB@Qmhb~hIpqim9aAH5+>c)Y#7rpKts zZ(aG`MU5}{u>`^kuxaA4s219GVYtPiXZkO2mN)&g2(3*85 zekL#c#|vwqsPkYpbh%Qbr(NbNcExY?J_YDh8Z^w7#{*G;43yA?l`OC2K^dy!{v6SH zps#MZGnK;JmJV?nmvaY@bw2t4~(UEcWEs7l%MB_4?CHKX#Q!hWaXl6K6-TZ5uZ=I^?gOjBz|5}r&69B4}z_Tzld}wGy z?b%1(T+-Xdvq{HW@~S}iyt|ILpxD5FIltHoy%AD(m<*-9OrjE#=`&No~h z&a5kP)IFE8-cJKe!KPQ3n0;~FRcZ(VX?#sEJ~^5!nlJ&J+T5a$c0~u#e_WY-)+gKH z{YZ+(zrN=FbSpBh_D&uHpO)o?oyPXOrEcIeidyH1wR_`PpE?ueekOtlSq zD?*Um=U0_Q!WP0HmHr;0IDH($;EznIm)1y;*Uw?!R{{+X&=}A!?<5WRid`iRdZFm& zs+(j3E{U~_ZlOKp%p!IEGLh?yA26aZ^Jr+5KW(&=>FBfk$ha?qWhR^MGpKL!pMKr$ z7H_L>>D%j8#_jS#U#seThtMgb!S$HNFps~D>K6`Rg~$(tc6ZusJL_?`wc1}j9}iJbfaut)2sEk--+ z=k|Oi_(_-E>o54eBAm;1UF`l>4h<9QdG{*Q0M!SAvrL_28w3V~MH0;eJIaZKp0v29 z&8L=>zYp8bg30W+;VutS>>Hof2%kjM&0lXT{-?6DY-;oS+IEp5#jUsnEAH+Nh2lYq z6{p2DxVr_~QrtbbyA>}E#e;i+;BI$*|C#3lJTLPmbIoM!wXeO`ah$Pjy|bz4_Md;~ z1pC@Ph0t7v#4(dWv8uN^bN0A5tHRbFqD*Fu_d=(_{>f6i@-qE|xqU7m}YZ4OB1(@)vk7l|OabbzUsXrP!g8cW9xZUgV;}&7FRAIGETMG4Qrc z@Rcqr_DE;dhCVJEZw@J!9ZD-9!<^q9?2uEH5}_nyZc=qL*#3$=-TZa@m4Q!GdR6EU zY4dEtdO*_8qNu$V?|#l`$KVS~E7m$SZ(prQt+X8QNkep)GiGJi&2G26{L^daEZycT z0URxTOx4*qHtXF&(amaJTQ(5U6R32nkJcNKyGF-aYJi~Z%rhUGfjt8)G*Wh_n4ye| zZ5=c1H%zCvqvVahp$pm$Mk{QSf!7M&wdCw*V-Q<*DX?w&RYHw_PTRtKRD@@Cq(zii zt?u$wxSHhJF;K4=a%UZOB&L8KibDYJ`ufhIDyMtYH6BaRStSfkIWkwNG4l&t(SxYJ zQLQF`xN_vv{wyCaZ3~tpf^SRmTuiH&-0V_x6!%xw6rX|$3ILYPtUHWr;FSzYX&~@n6+zWdPH@-*=_8Us~~T#}hK z@N*_gzQ2b^ zx|WPHq$4pL3fGtHr0?`l)0fV5ivu;yzAajO`U^J&U;4RYQ!5P{U%oY7%`9|Wu8HJR z(-Gzn&XqZwD{+HyJ~^i-OJi@j#631hjddE()`yHmt57~FEo>vS_;W7Y*7Lb0Gi9*k zn6ht=38plebV1|SSqhBbd_+mA=y(3l&F!asQT$W6(CKy$(Z6pXFhQ1N`5w<2w)15j z9odK{jC;(c*JjE&C%`l3cN!Le0fv>-!1OqU$tH*A(E5nr5y;}!?O8NyN;W%q`bp56 zU+>u<+@g=_-?kcDzZ^l_9i(>K7B!WJfCp&eEp4?|?8Okn+GS zT>@*2p4(bjyL&ZTzw2()&PmDGE;^QvR2&Le553=b5P>jB87lho$Vtn?l+lg~B_KxR z%i|BP(Tzs6D+sv*OVrpQ)s;aY6pdCX&P7H}O~-L`b=Z(tWHAO; z0SjPieNi@v_gnd&TD;`@&{MWwPoa7#qokn6N#O3+-VD&~dsROYw)rA29lkd|5CR?R z(!8zwUPV>1syn!rUoQL%UwMJqj8@iI;X5^}PCrMF*a9p@%>$|C_N5b0vDn?GY5L>x`NI|S=4kN8UhC-(u8?-#qWPk>GvY!hTsQ3>$elCyZ1wiFoM=6^zt53mj_xLUqaDdBI*2;&ndxKcbao6CnTY5RGuXUdiv!~|-l`MzV}lS+#5;zJ-IVr*U%&TC*u|K0^ zf}G~(aVqCOX;9?~8S=Gm%SmpysOc;p#n2FFL+_-qi6T)j0v^vhY97Ye|3{p8cC3X>-o}cd&TX9WRcHtwxh2 ze~ZRP9M;=crn5a~#rp#|M{`;hwOYO^_%dziUVV)v8hoIco9tODo1YCDXl76J4dkHs zJH|uIgFy6&y2vc=8okc|G~xbf@a2A>Qf0xX(+!2Zk80(AxF-L5UPvX<_+d%5TpcgA zqP!(O(--EWZ=7YKE7&jl`82e-2$#Mk=OIx_xb!V}a)k5)RX6E|4p?EoHZNl`{meSf zElFi(<2+}sSK$)C+7E*{(ZZzzZS(WOzBm*IT!+MBAvn<76h#vfH7~=|ALqjKjTES@TEU0!YgbU~Rgb@O-&BENqDu=QN24{s@~={eReNU6E4=aQBoJ zzI1Eo9rrzlHmvAQ_pT8W)21an2KAa{)?y|A9Zk|x!u5+hSi>x1juF3}FZ0^t#hMmC zTk?1Rl`0FN@ZeBs%}*q{pq``Yw4`h#`F;oqqW#>abcnmkW{@bmgRNqTdHaKWnv?Tp zi<)ShZ8BM%r9)_kR^mH7aE)~=mmKIomZ5(N1(F&ceUC9UU;u$?qz?Ai4JImr~!Cdmrn(% zu2>#`Z36A`a6A`pZ(gfeo5zzY_B*8_>1=Lqr=v;|31BZsE;nqdPa^0o;xzjW-b08E z47SBlhPGEj5|*c#eE35?#=v_aeN<$j4l4(6aT zV&CYNpDouTGUyjCi1~8B)6iSIvL3A4GX(q={PrkFOw>mrUyHOm+EBK(61DJlxa}Y= zvpU3;AD4pDx3XhMir#gllFyHPVBc%u< zIh0{{Q4)H6;%620zIBt{BW8Mru zG0#P>RK_T=)G^~KMfa>G_|GE;A7Ur_*1uo1drGF38p_<^QW3E@9}!zoGx1zVLFb-K zHy13$*N*>Fr3O2qj}Vp>9|2}$wy{d$r|=3x*aCzS9Hh&~kS6BdE*riDGG1ni$r0zd ze<-U=Y|AifYm)6-Eo)bqks@)j6Y`?jS8~tbvd~zfuO)y#p99oYEMYrOrVxuTKXkq% zdQ(gA)Yawm!!m77y7@&vM%W&6u2*-YH5aIZ)MSx_SwZiSXxb0S_J@S_V~BL@<_2(% zkVMalhm5@ruCOY%ErBRG&ASCDhgov5@S83%31k&=CA#qzFb$Y8gbK&gCJP?ur+n6j zScb?LO@*dr>ImjWXMO>#pm{~#CnB(8MdF)1=^*bI3CS#>z+%>Byr~@v=zrpf04!XI zpK=_lh{0lECh@VP*o-AD@r)(1tWldjgD#k zK}+*BMMMV%5!m_}!(R44G`0JHo9DMNDUT~4yOG|iC?^WL^W<wRcpCpbZ&tw1EYJ#W=mWT|tW?TCwVq%jHJ zZ5KS~_XlicZ_m(Ff<)Eoc0DP3&ouUna3KCA;!{(JC%^V#j@Ed2+jk$ox}cAWLT!99 zV{S6`Sf5E!pbkhSHnkJeY92(9pB&KAeQ|F$V7FrHKUySb>|r7t@3da`;o2QjYJ2-E zl0eP3xq|9^GmNV)WVzfw{1vw%PvvYEccJ>Gs@sPY-40sv7BDqlLtb5#lERvjv2ldvj|V@y1W4oI5q?6foBgkH zDYz9~77WRA3H2zcWY}o{$s6S{99wPto*QrJpn(T6L<$P;6w-mrj^)^~3HEc<$@Ar# zu1BGaCecg=ii9d_l>Il^PFOmd`>1Qb~ z3pRU>UF}qc89%|)49*uDH*dNz!cq)(u{KS#VmiE! z#z$qe#Kt&K+kHG1Um>#0Piq}wKO=`$y!#L z5HC`{Dt5pvJN{Q(&OJYw_BM@;#1qD%k!V==&6QG%_nQBu7E_mv2C|uqtcIY9)u)?u z5sMY0Mfw`Z@GsxhOV(Q6|9WU)zdO;8+(8lH8ZB*5YiQ-W8*FdZMDP=0dd^~WiJm*= zt~Pt=;N_Vj$9W{M!4vHQ`Or;(Pp*_=$=ODDBkM23%0^kMV@2tJ)=W7|KG%?Vh5QM~ zBj=eVy1zJvbxCgG*l|2zr?j|uzMwrE+R?2008;tk7UB*)p8qn#u z=9A~A=hKKPEt8%IZ3FM0FhuPIo5z8pGu~ccK>W+co^5~{Mp86<2`P0( zkvNV<88MPGlZyLr@fBNZEM3R{2{76PN$I^S*wI1vKvJB^%mra3@5vK!Vs5)Qz zKxPI(x%&x-3=2WCh;6hn0N5$<-9|5mWU`)a+#XO$g{YP!XE_8PCpi{~AdTh5f5M_O z<*Dk791XVh6f68NJVB?GLtFtlxQp?<{#8(I>vpkiIj+uXRt@t;heRS#P;ovb%XpWa zdJ30Pu{=JH(2$iHQWjNI824mVzTe)$?T-J1fKX*KY)`TS+`t;+iqol z;mIsxo+5kX)byt1*akU;m|zZjd(20OcPS>rCAaW{cUnf6CRwPR2=+ewrIo2y7W-VF zFS7;ROoKQKJNuVuOz-*04Uk0oNVFL3Gs&2L8Gh=7oE5ir@4{k%K!#b1l0~(2u0FP# zRfF1t6rL-;Vpogd0$)qGX)Z3?W*d+_errbl^3cWsSyyFJ2TWMw9<}NIV~* ziQ$ZD{ys+0Bst9nhuif+JFy#Wo^0?g5Y3&j?IsouNsM;Z`kKNO1HtFxceUu1Kd~|^xTRhcc#Vb;5k~SsfFAZZxddhLo0G} z3XQ~ZBoc-(SrF)~O4ph4UCZZ*ti_wXrY-J2jmOlhiis*74U^XGDF#o|;_$zr)y@`6 zw8?qBzn>RP5rBm6&UEAVOJscQxOX$9`!*+qW8l9X zl5jG0%>Q@h5l6c*)llUKpMT03e3@C%=U3Jh3r`HSr_QCkk)ozTX`djmh^}FCtR8ZG zR+$m09T<-8{%9MBmt0E=zEEQ%PkR|m(%sfdJkBxhXuIFF-ULoL!_6H$65z-;kZK!_ z1a9-*N96h_x>)h%1)TQ=r(d)K=^~jl86(6e6q79lPbq~DD9ExIoj{%4*L6b|9@16X zgV|}qEQj`+s8Tw1M}1<0ERG>reUIxh_04_#vknTAnY0br@_k|l!!<*`sA<3Lsk}U! z@UkCvjE;sa=?oLjDp?*_9iegDH>;F$iE8D6Z{!H^dd(}?mLaV<>&K5c>C$U%^qoD!jRaumQ)@)(XA$Dkz zT(^4T&z~#)WDnRDwi%qp4jcf1$$LhSF%#wxlY8}q2Bw6@OQdw8t9G^Y4RJ+9nT-Y6 z%O1u2;bw>3cGDkqMzqvv&h@`@i&zkP*uSDfu@mtLPZfv!NzXCNJ2|zh{CQRV-Lr3M z;Wdz@&=+h5z76>Bb5e|ZO-N`7ZT+cNYk$-(xkE(rpgMI)(I^#%)(-tkDB*fTcPXhp zWvU_bZ*%x?;7BvzwN;Zn+nzX3P)`);;cv~*ed&MKE?5$&W8?2sBO-h#U z`lPO986`baZ#KaN@%x(30G!*1gOlu~1wG&M#uUBg056Bpl^@=B7zSsPAADrwOX|h? z%==Mq`?o=+f0Y>lA=aeN0Z!%Q&y!LnBGVHP0*irT+o@UU`+OPh<7o+Ou`%iv#h|kW z>rLj=$8^D8fw7SK=;7J-+X&I~J{6!$SfdwNi{UOzQ2vT2(#g=~yxi>SjQ?|_q{{q5 z`(FbAoJULXX$^7Sl_^O-myl|I3$tfb>NGU(2xK?Z=KSN7f(@{Lx>MY=MO;G7F>K!z z-Dcl#iD@YGCE^3Y!`V6p4%P_b5{`a{7g`dB{IWl$iz2o|JuJUm%mzTSZ+2dV>L zQEWu8EL9JzW@1$jlXLDdjKH{?Wk)I-;(;o8Q~5Pi!XcEv5Ii zLotVmMB92J%aVoMyogWLL7dnwcfP$mi?8L{hk_~P7fPHD^@5_@hHP|J4WZt}On=i9 zQ%CstnpM(7#dutJlU61^2=elpvTXWQxmp2+<3lTr_E$E4ROWJGg9^c%@OMmNBHc<{ zU%|z;JF8#oEw%{2c-Eoc7O|@&k5f)`zriTO=`BbF2evcx?_>0iIKAimc}4GL zC#NJXniI{}M4=wMb|iedDvu{l?4W@C2L*l}13n4ks6cvT6Er}i ztbj9P%Qkq}1%O40*57v0tMK*wI{r_$dkv)k{N=2RD>8_LDw5s?hpI>D|x;Z$>2{`J`HFhlE-+GF!3m0x2SB_RP1;euJ+`AzN7xNlP#=50gBf~U_7@K{1mI2 z%l-*CsG7lZe?0Vc%nxxy7ubgq_LWae`ohJ+c_|(vIpgQvEO`-UXFKqDq-cE2M|)>m zzL*-%68p9`aaS7UeRc*GKG#jPo!trmsL6+%57dvN1a;4YFHWv`UX~7PJMQ~!&v`9c zGe<(GfF#s6E!3dzZ|fvA`9y;)nQSTiLg$wuS5BF4t$Uh#)CWugKj!wJ13Z+|pW#7e z^IqR_I?SjjS)ji8b#ONdmf}3o-ZU98-y1XE%b4fkvuLpn{y-rujITk4K-N1!D&I^F z2X}VEH>}(xtMXATDh5|O(Fs|QK{`!DR^1N#C|^e$_Z0Zdfx`AJE6KSJY7yNoHOZ#p z+*+C0Y`^QJwY_hiW#DU7{6@s;)ZvIdz*H~r&gZx~PI>-;B+u*Jh?*!*bw2wDO8D&< zis|h{r$JM8TD5)7v*=M{=h%6>m8Skx;#@my@P{oN zedyIcBCmG;^A9>O{?BgRP`{gm>^`q)nAc!Rc55tlI8Sw_CQ9AfAR%hYen|OCA`+(a zgl=SidR`qiAW#GpGdr~@r(DyH_FVyW_>VS+bq!R?fz%R7suiHW@xz{ z8CIvW51-`xL?0(B#qw+|BTTtYii*ml&&Ra*-%ZV$i@9Kl?{#I1i$fnj1<|;AOjut6 zg}a$irou3fbij@gEUR6u`zQr;Mlk=ATDe`mlpPbqRV{iLog(BP2|V{2AFmSLeT!x% z;Z{TE*7G zKtgA&5zq=-5h;Mal$0cS zR=;iPz&p#?@PR*1kXBO`ZKU*9etEeQ~p5yf^s1rwyc+V@2!>n4x#3^on?vQ1R;{;!(WHM2(v8>E>0~5u=l*uyjU@q z0%VeEVryW-eGNHWQ07XoAFmroP^W$4C<;n=9t*ihNb9PdNY7cj^j(A(`FcgoePUj9> zdPOl%N)P2ev>9A5M;(aUkGf68?n!gQC(&)6yz+2s6er7&7QHkT=k@ zAv#aC?b@|MG z^jL1#?NMpCTavL<2H;9ASBLzgA1s8Zeo+NTZ~!b4z#CdL$as|leV<&2rR+s9rnq%f zpiRyOAiutW1s4O*G_ZdG@}d0w_6%fHH1??TDDZjgPM!K2(Q9K{mezFk-yxGhT1sp` z5+&=+J{6R)wQnqC2r(nus{Sv0+nn~AgGglM%nf9-B#N2}e><&ezl8`obK*`0VG>(y zY~Yt=VPZb%07yc|V|lcEi7*>)|V$PmwLm zbN=#(XnC+0j572(e}1m50%Ul<`{n9eN1T9T826Ck_}2{I*~|#(O)p0^#{8It5^pFF zb&?q-ai=CnK|F1gD3hD_k3kJHU7j{SUn^007#_v0QO<9CFrq5_?qTZMRT<7-YHpJ) zT8+_pVKgI(^@+=(wal$=_oA4hN}w+#fJt(Z3=3aOpeXlQEDx_v`w1?9h+wX`m+ivb z+)ZTY>t}c9n-fNE`Jm+73>4iCCV59~xd%SAO!1LyGDEF>;QIW|_rDAl-l`WA1Vg57 z^xneX7r@l_5@Qrcs`J8^7UDb$-WeK4m+XtJ3&KZ7S6+^$NZ>!&X`PU!KTz#P_GAY} zUxpQ}?a#t%EUg?CV!M87FVE7`zVtM28Ws)SA`7AtOq~2ECaAz`qv_?F~C3qSUCUM{7shv@F07{vSkdl;zdrs${-|{2xkbS>yl! diff --git a/docs/auto_examples/index.rst b/docs/auto_examples/index.rst deleted file mode 100644 index 1a51225..0000000 --- a/docs/auto_examples/index.rst +++ /dev/null @@ -1,60 +0,0 @@ -:orphan: - -Examples -======== - -Examples of the package functionality. - - - -.. raw:: html - -

- - -.. raw:: html - -
- -.. only:: html - - .. image:: /auto_examples/images/thumb/sphx_glr_plot_example_thumb.png - :alt: - - :ref:`sphx_glr_auto_examples_plot_example.py` - -.. raw:: html - -
R data loading
-
- - -.. raw:: html - -
- - -.. toctree:: - :hidden: - - /auto_examples/plot_example - - -.. only:: html - - .. container:: sphx-glr-footer sphx-glr-footer-gallery - - .. container:: sphx-glr-download sphx-glr-download-python - - :download:`Download all examples in Python source code: auto_examples_python.zip ` - - .. container:: sphx-glr-download sphx-glr-download-jupyter - - :download:`Download all examples in Jupyter notebooks: auto_examples_jupyter.zip ` - - -.. only:: html - - .. rst-class:: sphx-glr-signature - - `Gallery generated by Sphinx-Gallery `_ diff --git a/docs/auto_examples/plot_example.ipynb b/docs/auto_examples/plot_example.ipynb deleted file mode 100644 index dda9ba0..0000000 --- a/docs/auto_examples/plot_example.ipynb +++ /dev/null @@ -1,72 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# %%\n# If we are in a Pyodide kernel, we need to install the packages first.\n#\n\n%pip install lzma\n%pip install rdata\n%pip install ipywidgets" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n# R data loading\n\nShows how to load R packages.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Author: Carlos Ramos Carre\u00f1o\n# License: MIT" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Use the file uploader to convert files to Python.\n\n\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import rdata\nfrom ipywidgets import FileUpload, interact\n\n@interact(files=FileUpload(accept=\"*.rd*\", multiple=True))\ndef convert_from_file(files):\n for f in files:\n parsed = rdata.parser.parse_data(f.content)\n converted = rdata.conversion.convert(parsed)\n for key, value in converted.items():\n print(f\"{key}:\")\n print(value)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.5" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/docs/auto_examples/plot_example.py b/docs/auto_examples/plot_example.py deleted file mode 100644 index 793e98d..0000000 --- a/docs/auto_examples/plot_example.py +++ /dev/null @@ -1,25 +0,0 @@ -# fmt: off -""" -R data loading -============== - -Shows how to load R packages. -""" - -# Author: Carlos Ramos Carreño -# License: MIT - -# %% -# Use the file uploader to convert files to Python. -# -import rdata -from ipywidgets import FileUpload, interact - -@interact(files=FileUpload(accept="*.rd*", multiple=True)) -def convert_from_file(files): - for f in files: - parsed = rdata.parser.parse_data(f.content) - converted = rdata.conversion.convert(parsed) - for key, value in converted.items(): - print(f"{key}:") - print(value) diff --git a/docs/auto_examples/plot_example.py.md5 b/docs/auto_examples/plot_example.py.md5 deleted file mode 100644 index 210ce86..0000000 --- a/docs/auto_examples/plot_example.py.md5 +++ /dev/null @@ -1 +0,0 @@ -a1050de4f5519fc0d67bed3e8c4b53ae \ No newline at end of file diff --git a/docs/auto_examples/plot_example.rst b/docs/auto_examples/plot_example.rst deleted file mode 100644 index 7b270b6..0000000 --- a/docs/auto_examples/plot_example.rst +++ /dev/null @@ -1,109 +0,0 @@ - -.. DO NOT EDIT. -.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. -.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: -.. "auto_examples/plot_example.py" -.. LINE NUMBERS ARE GIVEN BELOW. - -.. only:: html - - .. note:: - :class: sphx-glr-download-link-note - - :ref:`Go to the end ` - to download the full example code or to run this example in your browser via JupyterLite - -.. rst-class:: sphx-glr-example-title - -.. _sphx_glr_auto_examples_plot_example.py: - - -R data loading -============== - -Shows how to load R packages. - -.. GENERATED FROM PYTHON SOURCE LINES 8-12 - -.. code-block:: default - - - # Author: Carlos Ramos Carreño - # License: MIT - - - - - - - - -.. GENERATED FROM PYTHON SOURCE LINES 13-15 - -Use the file uploader to convert files to Python. - - -.. GENERATED FROM PYTHON SOURCE LINES 15-26 - -.. code-block:: default - - import rdata - from ipywidgets import FileUpload, interact - - @interact(files=FileUpload(accept="*.rd*", multiple=True)) - def convert_from_file(files): - for f in files: - parsed = rdata.parser.parse_data(f.content) - converted = rdata.conversion.convert(parsed) - for key, value in converted.items(): - print(f"{key}:") - print(value) - - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - interactive(children=(FileUpload(value=(), accept='*.rd*', description='Upload', multiple=True), Output()), _dom_classes=('widget-interact',)) - - - - - -.. rst-class:: sphx-glr-timing - - **Total running time of the script:** (0 minutes 0.622 seconds) - - -.. _sphx_glr_download_auto_examples_plot_example.py: - -.. only:: html - - .. container:: sphx-glr-footer sphx-glr-footer-example - - - - - .. container:: lite-badge - - .. image:: images/jupyterlite_badge_logo.svg - :target: ../lite/lab/?path=auto_examples/plot_example.ipynb - :alt: Launch JupyterLite - :width: 150 px - - .. container:: sphx-glr-download sphx-glr-download-python - - :download:`Download Python source code: plot_example.py ` - - .. container:: sphx-glr-download sphx-glr-download-jupyter - - :download:`Download Jupyter notebook: plot_example.ipynb ` - - -.. only:: html - - .. rst-class:: sphx-glr-signature - - `Gallery generated by Sphinx-Gallery `_ diff --git a/docs/auto_examples/plot_example_codeobj.pickle b/docs/auto_examples/plot_example_codeobj.pickle deleted file mode 100644 index 56341a53fcbea60607ab7a23b1fce48814c88511..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2220 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 diff --git a/docs/auto_examples/searchindex.dir b/docs/auto_examples/searchindex.dir deleted file mode 100644 index e23a7cd..0000000 --- a/docs/auto_examples/searchindex.dir +++ /dev/null @@ -1,3 +0,0 @@ -'/home/carlos/git/rdata/docs/_build/html/index.html', (0, 21128) -'/home/carlos/git/rdata/docs/_build/html/_static/documentation_options.js', (21504, 343) -'/home/carlos/git/rdata/docs/_build/html/searchindex.js', (22016, 9119) diff --git a/docs/auto_examples/sg_execution_times.rst b/docs/auto_examples/sg_execution_times.rst deleted file mode 100644 index 0fd297d..0000000 --- a/docs/auto_examples/sg_execution_times.rst +++ /dev/null @@ -1,13 +0,0 @@ - -:orphan: - -.. _sphx_glr_auto_examples_sg_execution_times: - - -Computation times -================= -**00:00.622** total execution time for **auto_examples** files: - -+---------------------------------------------------------------------+-----------+--------+ -| :ref:`sphx_glr_auto_examples_plot_example.py` (``plot_example.py``) | 00:00.622 | 0.0 MB | -+---------------------------------------------------------------------+-----------+--------+ diff --git a/docs/jupyterlite_contents/auto_examples/plot_example.ipynb b/docs/jupyterlite_contents/auto_examples/plot_example.ipynb deleted file mode 100644 index dda9ba0..0000000 --- a/docs/jupyterlite_contents/auto_examples/plot_example.ipynb +++ /dev/null @@ -1,72 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# %%\n# If we are in a Pyodide kernel, we need to install the packages first.\n#\n\n%pip install lzma\n%pip install rdata\n%pip install ipywidgets" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n# R data loading\n\nShows how to load R packages.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Author: Carlos Ramos Carre\u00f1o\n# License: MIT" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Use the file uploader to convert files to Python.\n\n\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import rdata\nfrom ipywidgets import FileUpload, interact\n\n@interact(files=FileUpload(accept=\"*.rd*\", multiple=True))\ndef convert_from_file(files):\n for f in files:\n parsed = rdata.parser.parse_data(f.content)\n converted = rdata.conversion.convert(parsed)\n for key, value in converted.items():\n print(f\"{key}:\")\n print(value)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.5" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file From 0ac510189b50c1065968d80dc8561350de767121 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 13:02:55 +0200 Subject: [PATCH 15/19] Add gitignore. --- docs/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/.gitignore b/docs/.gitignore index c8f9082..d215bb7 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,2 +1,4 @@ /functions/ /modules/ +/auto_examples/ +/jupyterlite_contents/ From 68695da1e7a12bc3e74c6970453bed0ea2a79701 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 13:06:12 +0200 Subject: [PATCH 16/19] Add matplotlib to docs requirements. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index bcc51a1..b0ad2ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ docs = [ "ipywidgets", "jupyterlite-sphinx", "jupyterlite-pyodide-kernel", + "matplotlib", "pydata-sphinx-theme", "sphinx>=3.1", "sphinx-gallery", From 6b1f7e3b5234b49def3916fd764f2d77df89d773 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Wed, 18 Oct 2023 13:32:35 +0200 Subject: [PATCH 17/19] Change extension order. --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index abe613e..71a9c2a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -66,7 +66,6 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - "jupyterlite_sphinx", "sphinx.ext.autodoc", "sphinx.ext.autosummary", "sphinx.ext.intersphinx", @@ -75,6 +74,7 @@ "sphinx.ext.todo", "sphinx.ext.viewcode", "sphinx_gallery.gen_gallery", + "jupyterlite_sphinx", # Move after sphinx gallery ] # Add any paths that contain templates here, relative to this directory. From 3e1dacb0eb9e6598037ce3c069c7d77f4fa660cf Mon Sep 17 00:00:00 2001 From: VNMabus Date: Thu, 19 Oct 2023 09:19:04 +0200 Subject: [PATCH 18/19] Update landing docs. --- README.rst | 21 +++++++++++++++++++++ docs/index.rst | 33 +++++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/README.rst b/README.rst index 5b59bc2..23fa83a 100644 --- a/README.rst +++ b/README.rst @@ -8,7 +8,28 @@ Read R datasets from Python. .. Github does not support include in README for dubious security reasons, so we copy-paste instead. Also Github does not understand Sphinx directives. + .. include:: docs/index.rst .. include:: docs/simpleusage.rst + +The package rdata offers a lightweight way to import R datasets/objects stored +in the ".rda" and ".rds" formats into Python. +Its main advantages are: + +- It is a pure Python implementation, with no dependencies on the R language or + related libraries. + Thus, it can be used anywhere where Python is supported, including the web + using `Pyodide `_. +- It attempt to support all R objects that can be meaningfully translated. + As opposed to other solutions, you are no limited to import dataframes or + data with a particular structure. +- It allows users to easily customize the conversion of R classes to Python + ones. + Does your data use custom R classes? + Worry no longer, as it is possible to define custom conversions to the Python + classes of your choosing. +- It has a permissive license (MIT). As opposed to other packages that depend + on R libraries and thus need to adhere to the GPL license, you can use rdata + as a dependency on MIT, BSD or even closed source projects. Installation ============ diff --git a/docs/index.rst b/docs/index.rst index f6e387b..a1d17be 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,10 +3,29 @@ rdata version |version| |build-status| |docs| |coverage| |pypi| |zenodo| -Open :code:`.rda` R data files containing datasets and convert them to the appropiate Python objects. +The package rdata offers a lightweight way to import R datasets/objects stored +in the ".rda" and ".rds" formats into Python. +Its main advantages are: + +- It is a pure Python implementation, with no dependencies on the R language or + related libraries. + Thus, it can be used anywhere where Python is supported, including the web + using `Pyodide `_. +- It attempt to support all R objects that can be meaningfully translated. + As opposed to other solutions, you are no limited to import dataframes or + data with a particular structure. +- It allows users to easily customize the conversion of R classes to Python + ones. + Does your data use custom R classes? + Worry no longer, as it is possible to define custom conversions to the Python + classes of your choosing. +- It has a permissive license (MIT). As opposed to other packages that depend + on R libraries and thus need to adhere to the GPL license, you can use rdata + as a dependency on MIT, BSD or even closed source projects. .. toctree:: :maxdepth: 4 + :hidden: :caption: Contents: installation @@ -14,15 +33,9 @@ Open :code:`.rda` R data files containing datasets and convert them to the appro apilist Try online! -rdata is developed `on Github `_. Please -report `issues `_ there as well. - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +The package rdata is developed `on Github `_. +Please report `issues `_ there +as well. .. |build-status| image:: https://github.com/vnmabus/rdata/actions/workflows/main.yml/badge.svg?branch=master :alt: build status From 89bea8ae48246fb51004450cb5351d92335e9204 Mon Sep 17 00:00:00 2001 From: VNMabus Date: Thu, 19 Oct 2023 09:53:13 +0200 Subject: [PATCH 19/19] Bump version. --- rdata/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rdata/__init__.py b/rdata/__init__.py index ce4b9df..d47a733 100644 --- a/rdata/__init__.py +++ b/rdata/__init__.py @@ -15,4 +15,4 @@ def _get_test_data_path() -> _pathlib.Path: """ -__version__ = "0.9.1.dev1" +__version__ = "0.9.1"