From b9fd44affd97cdc8a0f7cfc54a4663d02a7d375b Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 2 Nov 2020 10:42:25 -0500 Subject: [PATCH] Rename package --- .travis.yml | 10 ++-- CONTRIBUTING.md | 18 +++---- MANIFEST.in | 2 +- Makefile | 2 +- README.md | 10 ++-- docker/trnsidf/readme.1st | 2 +- docs/caching.rst | 22 ++++---- docs/commands.rst | 4 +- docs/commands/convert.rst | 4 +- docs/commands/transition.rst | 4 +- docs/conf.py | 22 ++++---- docs/converter_bui.rst | 22 ++++---- docs/converting.rst | 2 +- docs/examples/parallel_process.py | 2 +- docs/index.rst | 10 ++-- docs/install.rst | 48 +++++++++--------- docs/package_modules.rst | 14 ++--- docs/reading_idf.rst | 36 ++++++------- docs/troubleshooting.rst | 2 +- docs/tutorials/parallel_process.rst | 20 ++++---- docs/tutorials/schedules.rst | 12 ++--- docs/unix_users.rst | 8 +-- environment.yml | 2 +- make.bat | 2 +- meta.yaml | 12 ++--- setup.py | 20 ++++---- tests/conftest.py | 2 +- tests/test_cli.py | 10 ++-- tests/test_energyseries.py | 10 ++-- tests/test_idf.py | 22 ++++---- tests/test_schedules.py | 2 +- tests/test_trnsys.py | 14 ++--- tests/test_utils.py | 2 +- translater.egg-info/PKG-INFO | 32 ------------ translater.egg-info/SOURCES.txt | 29 ----------- translater.egg-info/dependency_links.txt | 1 - translater.egg-info/entry_points.txt | 4 -- translater.egg-info/requires.txt | 32 ------------ translater.egg-info/top_level.txt | 1 - .../__pycache__/__init__.cpython-36.pyc | Bin 551 -> 0 bytes translater/__pycache__/cli.cpython-36.pyc | Bin 8297 -> 0 bytes .../energydataframe.cpython-36.pyc | Bin 5196 -> 0 bytes .../__pycache__/energyseries.cpython-36.pyc | Bin 24834 -> 0 bytes .../__pycache__/idfclass.cpython-36.pyc | Bin 60971 -> 0 bytes .../__pycache__/reportdata.cpython-36.pyc | Bin 12376 -> 0 bytes .../__pycache__/schedule.cpython-36.pyc | Bin 32795 -> 0 bytes .../__pycache__/settings.cpython-36.pyc | Bin 4068 -> 0 bytes translater/__pycache__/trnsys.cpython-36.pyc | Bin 65451 -> 0 bytes translater/__pycache__/utils.cpython-36.pyc | Bin 28265 -> 0 bytes {translater => trnslator}/__init__.py | 8 +-- {translater => trnslator}/cli.py | 12 ++--- {translater => trnslator}/energydataframe.py | 4 +- {translater => trnslator}/energyseries.py | 6 +-- {translater => trnslator}/idfclass.py | 20 ++++---- {translater => trnslator}/reportdata.py | 2 +- .../ressources/NewFileTemplate.d18 | 0 .../ressources/W74-lib.dat | 0 .../ressources/originBUISketchUp.idf | 0 {translater => trnslator}/schedule.py | 24 ++++----- {translater => trnslator}/settings.py | 12 ++--- {translater => trnslator}/trnsys.py | 28 +++++----- {translater => trnslator}/utils.py | 18 +++---- 62 files changed, 254 insertions(+), 353 deletions(-) delete mode 100644 translater.egg-info/PKG-INFO delete mode 100644 translater.egg-info/SOURCES.txt delete mode 100644 translater.egg-info/dependency_links.txt delete mode 100644 translater.egg-info/entry_points.txt delete mode 100644 translater.egg-info/requires.txt delete mode 100644 translater.egg-info/top_level.txt delete mode 100644 translater/__pycache__/__init__.cpython-36.pyc delete mode 100644 translater/__pycache__/cli.cpython-36.pyc delete mode 100644 translater/__pycache__/energydataframe.cpython-36.pyc delete mode 100644 translater/__pycache__/energyseries.cpython-36.pyc delete mode 100644 translater/__pycache__/idfclass.cpython-36.pyc delete mode 100644 translater/__pycache__/reportdata.cpython-36.pyc delete mode 100644 translater/__pycache__/schedule.cpython-36.pyc delete mode 100644 translater/__pycache__/settings.cpython-36.pyc delete mode 100644 translater/__pycache__/trnsys.cpython-36.pyc delete mode 100644 translater/__pycache__/utils.cpython-36.pyc rename {translater => trnslator}/__init__.py (72%) rename {translater => trnslator}/cli.py (96%) rename {translater => trnslator}/energydataframe.py (98%) rename {translater => trnslator}/energyseries.py (99%) rename {translater => trnslator}/idfclass.py (99%) rename {translater => trnslator}/reportdata.py (99%) rename {translater => trnslator}/ressources/NewFileTemplate.d18 (100%) rename {translater => trnslator}/ressources/W74-lib.dat (100%) rename {translater => trnslator}/ressources/originBUISketchUp.idf (100%) rename {translater => trnslator}/schedule.py (98%) rename {translater => trnslator}/settings.py (95%) rename {translater => trnslator}/trnsys.py (99%) rename {translater => trnslator}/utils.py (98%) diff --git a/.travis.yml b/.travis.yml index a7e6361..c2e0457 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: python env: global: - - TRANSLATER_INTEGRATION=True ENERGYPLUS_VERSION=9.2.0 ENERGYPLUS_SHA=921312fa1d + - TRNSLATOR_INTEGRATION=True ENERGYPLUS_VERSION=9.2.0 ENERGYPLUS_SHA=921312fa1d ENERGYPLUS_INSTALL_VERSION=9-2-0 MINICONDA_VERSION=latest addons: apt: @@ -12,7 +12,7 @@ jobs: include: - name: Python 3.8 on Xenial Linux python: 3.8 # this works for Linux but is ignored on macOS or Windows - script: pytest --cov=translater --verbose tests/ + script: pytest --cov=trnslator --verbose tests/ after_success: - coverage report -m - coveralls @@ -20,11 +20,11 @@ jobs: os: osx osx_image: xcode11.2 language: objective-c - script: pytest --cov=translater --verbose tests/ + script: pytest --cov=trnslator --verbose tests/ - name: "Python 3.8 on Windows" os: windows # Windows 10.0.17134 N/A Build 17134 language: shell # 'language: python' is an error on Travis CI Windows - script: pytest --cov=translater --verbose tests/ + script: pytest --cov=trnslator --verbose tests/ - stage: deploy script: echo "Deploying to PyPi and GitHub releases ..." deploy: @@ -34,7 +34,7 @@ jobs: secure: Ys6dmv5j3DG8jelwyqkczfnr87kihTgV0bnNVnGrag/7Pnobory1L0zh9pUc02gOiZzNrPFMb0hBQ/kEfYwKVFobRTwsbOpPAJQD+doIaf2KTQ42yUK2zPW0SqpwJMcGF1BfkgRh9J1omsWlfU+D7Xf5q47ksyQtO7A8GGFyc2mk2/4uqH4f8MQLWpU8zyUmgCTbI7RplCQsaa3tySwi7Y8bBEZwWV5jleohOz0tOPc74dWRJi4r0maeCbWa64hp1W7lQq2ZjIc//66a9RnauIdNd9Z10APbIcWQnyB30j6tZKIbkgouzxZ3IrBlby6raxXbpfviH1hyXII/Ppfv65jJX2VPX/VU0tPqto/DTR8YZ1IbUrAD+Zndxt/ZsvsxhHw610/GKDrQBJkcEiVsKhzptYWrElvNTd2enJkFbIrb2r1u2+YzktsHJd9sEMlAqP72JHRdrvT3cPD1VRmqr61xRJBvnB6rJwwctEHtVKwunhTWEW+NA0Sdp/Qa8Ak1vGl1LBlqAbcDNdizt4DC+x4N6BtjAtrNrcw3kj3m8fIhaXNQeUapwOHMRVSzAtkBDGbU6jbkgTVVMmXNEuoAvReXAIFJe+tn8kemRMlY94vpRotfBSUOQEVETL0luMgIL8Zyl2FHLFxruDm9Ea1wJAUOldStbdVr/AvfoAXjM9k= on: distributions: sdist bdist_wheel - repo: louisleroy5/translater + repo: louisleroy5/trnslator branch: master tags: true before_install: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a3245de..0e803ad 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,17 +1,17 @@ -Thank you for using *translater* and for considering contributing to it! +Thank you for using *trnslator* and for considering contributing to it! #### For errors in the code: - - read the error message and [documentation](https://translater.readthedocs.io/); - - search through the [open issues](https://github.com/louisleroy5/translater/issues?q=is%3Aopen+is%3Aissue) and [closed issues](https://github.com/louisleroy5/translater/issues?q=is%3Aissue+is%3Aclosed) first; + - read the error message and [documentation](https://trnslator.readthedocs.io/); + - search through the [open issues](https://github.com/louisleroy5/trnslator/issues?q=is%3Aopen+is%3Aissue) and [closed issues](https://github.com/louisleroy5/trnslator/issues?q=is%3Aissue+is%3Aclosed) first; - if the problem is with a dependency of this project, open an issue on the dependency's repo; - - if the problem is with *translater* and you can fix it simply, please submit a [PR](https://github.com/louisleroy5/translater/pulls); - - if the problem persists, please open an issue in the [issue tracker](https://github.com/louisleroy5/translater/issues) including a minimal working example to reproduce the problem. + - if the problem is with *trnslator* and you can fix it simply, please submit a [PR](https://github.com/louisleroy5/trnslator/pulls); + - if the problem persists, please open an issue in the [issue tracker](https://github.com/louisleroy5/trnslator/issues) including a minimal working example to reproduce the problem. #### If you have a feature proposal or want to contribute - - post your proposal on the [issue tracker](https://github.com/louisleroy5/translater/issues) so we can review it together (some proposals may not be a good fit for the project); - - fork the repo, make your change (adhering to translater's existing coding format, commenting, and docstring styles); - - [test it](https://github.com/louisleroy5/translater/tree/develop/tests); - - format your code using [black](https://black.readthedocs.io/en/stable/) and submit a [PR](https://github.com/louisleroy5/translater/pulls); + - post your proposal on the [issue tracker](https://github.com/louisleroy5/trnslator/issues) so we can review it together (some proposals may not be a good fit for the project); + - fork the repo, make your change (adhering to trnslator's existing coding format, commenting, and docstring styles); + - [test it](https://github.com/louisleroy5/trnslator/tree/develop/tests); + - format your code using [black](https://black.readthedocs.io/en/stable/) and submit a [PR](https://github.com/louisleroy5/trnslator/pulls); - respond to code review. diff --git a/MANIFEST.in b/MANIFEST.in index 53076e9..28a2ce0 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,6 @@ # package_data is a low-down, dirty lie. It is only used when building binary packages (python setup.py bdist ...) but # not when building source packages (python setup.py sdist ...) -include translater/ressources/* +include trnslator/ressources/* include requirements.txt include requirements-dev.txt \ No newline at end of file diff --git a/Makefile b/Makefile index 4db194f..9fe4b3d 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build -SPHINXPROJ = translater +SPHINXPROJ = trnslator SOURCEDIR = ./docs BUILDDIR = _build diff --git a/README.md b/README.md index 473456e..2510be1 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -[![Build Status](https://travis-ci.com/louisleroy5/translater.svg?token=qpRnYhTVUeLJ5WM1w9Wx&branch=master)](https://travis-ci.com/louisleroy5/translater) -[![Coverage Status](https://coveralls.io/repos/github/louisleroy5/translater/badge.svg?branch=develop&t=PLPFwA)](https://coveralls.io/github/louisleroy5/translater?branch=develop) -[![Documentation Status](https://readthedocs.org/projects/translater/badge/?version=latest)](https://translater.readthedocs.io/en/latest/?badge=latest) +[![Build Status](https://travis-ci.com/louisleroy5/trnslator.svg?token=qpRnYhTVUeLJ5WM1w9Wx&branch=master)](https://travis-ci.com/louisleroy5/trnslator) +[![Coverage Status](https://coveralls.io/repos/github/louisleroy5/trnslator/badge.svg?branch=develop&t=PLPFwA)](https://coveralls.io/github/louisleroy5/trnslator?branch=develop) +[![Documentation Status](https://readthedocs.org/projects/trnslator/badge/?version=latest)](https://trnslator.readthedocs.io/en/latest/?badge=latest) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) -# Translater +# Trnslator **python for converting building simulation archetypes** @@ -11,7 +11,7 @@ Convert IDF file (EnergyPlus) to BUI file (TRNBuild) ## Overview -** Translater** is a Python package that helps converting building archetypes. The public feature released in this +** Trnslator** is a Python package that helps converting building archetypes. The public feature released in this version is the conversion of [EnergyPlus](https://energyplus.net) IDF models to Trnsys [TrnBuild](http://www.trnsys.com/features/suite-of-tools.php.html) Models (compatible with the multizone building model). For a list of features currently in development see the [In development](#in-development) section. diff --git a/docker/trnsidf/readme.1st b/docker/trnsidf/readme.1st index 3812cd5..7fdde3e 100644 --- a/docker/trnsidf/readme.1st +++ b/docker/trnsidf/readme.1st @@ -1,5 +1,5 @@ *********************************************************** -* TRNsIDF.EXE - translater from IDF created by Trnsys3d to B18 +* TRNsIDF.EXE - trnslator from IDF created by Trnsys3d to B18 *********************************************************** This program sorts and renumbers the IDF file and writes a B18 file based on the geometric information of the IDF file and diff --git a/docs/caching.rst b/docs/caching.rst index aabb343..04c1dfd 100644 --- a/docs/caching.rst +++ b/docs/caching.rst @@ -1,15 +1,15 @@ Caching ======= -Translater features a caching api aimed at accelerating reproducible workflows using EnergyPlus simulations by reducing +Trnslator features a caching api aimed at accelerating reproducible workflows using EnergyPlus simulations by reducing unnecessary calls to the EnergyPlus executable or transitioning programs. Concretely, caching an IDF model means that, -for instance, if an older version model (less than 9.2) is ran, translater will transition a copy of that file to +for instance, if an older version model (less than 9.2) is ran, trnslator will transition a copy of that file to version 9.2 (making a copy beforehand) and run the simulation with the matching EnergyPlus executable. The next time the -:func:`translater.idfclass.run_eplus` or the :func:`translater.idfclass.load_idf` method is called, the cached +:func:`trnslator.idfclass.run_eplus` or the :func:`trnslator.idfclass.load_idf` method is called, the cached (transitioned) file will be readily available and used; This helps to save time especially with reproducible workflows since transitioning files can take a while to complete. -As for simulation results, after :func:`translater.idfclass run_eplus` is called, the EnergyPlus outputs (.csv, sqlite, +As for simulation results, after :func:`trnslator.idfclass run_eplus` is called, the EnergyPlus outputs (.csv, sqlite, mtd, .mdd, etc.) are cached in a folder structure than is identified according to the simulation parameters; those parameters include the content of the IDF file itself (if the file has changed, a new simulation is required), whether an annual or design day simulation is executed, etc. This means that if run_eplus is called a second time (let us say @@ -21,14 +21,14 @@ example. First, caching is enabled using the `config` method: Enabling caching ---------------- -Caching is enabled by passing the `use_cache=True` attribute to the :func:`translater.utils.config` method. The -configuration of translater settings are not persistent and must be called whenever a python session is started. It is +Caching is enabled by passing the `use_cache=True` attribute to the :func:`trnslator.utils.config` method. The +configuration of trnslator settings are not persistent and must be called whenever a python session is started. It is recommended to put the `config` method at the beginning of a script or in the first cells of a Jupyter Notebook (after the import statements). .. code-block:: python - import translater as tr + import trnslator as tr tr.config(use_cache=True, log_console=True) Example @@ -49,7 +49,7 @@ In a Jupyter Notebook, one would typically do the following: prep_outputs=True, ) -Since the file is a version 8.0 IDF file, translater is going to transition the file to EnergyPlus 9.2 (or any other +Since the file is a version 8.0 IDF file, trnslator is going to transition the file to EnergyPlus 9.2 (or any other version specified with the ep_version parameter) and execute EnergyPlus for the `design_day` only. The command above yields a list of output files thanks to the `return_files=True` parameter. These will be located @@ -58,7 +58,7 @@ method). .. code-block:: python - [None, , + [None, , [Path('cache/e8f4fb7e50ecaaf2cf2c9d4e4d159605/d04795a50b4ff172da72fec54c6991e4/d04795a50b4ff172da72fec54c6991e4tbl.csv'), Path('cache/e8f4fb7e50ecaaf2cf2c9d4e4d159605/d04795a50b4ff172da72fec54c6991e4/d04795a50b4ff172da72fec54c6991e4out.end'), Path('cache/e8f4fb7e50ecaaf2cf2c9d4e4d159605/d04795a50b4ff172da72fec54c6991e4/AdultEducationCenter.idf'), @@ -96,7 +96,7 @@ annual simulation results (which do not exist yet). prep_outputs=True, ) -Now, since the original IDF file (the version 8.9 one) has not changed, translater is going to look for the transitioned +Now, since the original IDF file (the version 8.9 one) has not changed, trnslator is going to look for the transitioned file that resides in the cache folder and use that one instead of retransitioning the original file a second time. On the other hand, since the parameters of run_eplus have changed (annual instead of design_day), it is going to execute EnergyPlus using the annual method and return the annual results (see that the second-level folder id has changed from @@ -104,7 +104,7 @@ d04795a50b4ff172da72fec54c6991e4 to 9efc05f6e6cde990685b8ef61e326d94; *these ids .. code-block:: python - [None, , + [None, , [Path('cache/e8f4fb7e50ecaaf2cf2c9d4e4d159605/9efc05f6e6cde990685b8ef61e326d94/AdultEducationCenter.idf'), Path('cache/e8f4fb7e50ecaaf2cf2c9d4e4d159605/9efc05f6e6cde990685b8ef61e326d94/9efc05f6e6cde990685b8ef61e326d94out.mdd'), Path('cache/e8f4fb7e50ecaaf2cf2c9d4e4d159605/9efc05f6e6cde990685b8ef61e326d94/9efc05f6e6cde990685b8ef61e326d94out.shd'), diff --git a/docs/commands.rst b/docs/commands.rst index 98488c1..e33c5af 100644 --- a/docs/commands.rst +++ b/docs/commands.rst @@ -2,14 +2,14 @@ Command reference ================= -Translater provides many commands for managing packages and environments. +Trnslator provides many commands for managing packages and environments. The links on this page provide help for each command. You can also access help from the command line with the ``--help`` flag: .. code-block:: bash - translater --help + trnslator --help .. include:: commands/convert.rst diff --git a/docs/commands/convert.rst b/docs/commands/convert.rst index 05b94e0..24c2b7b 100644 --- a/docs/commands/convert.rst +++ b/docs/commands/convert.rst @@ -1,5 +1,5 @@ -.. click:: translater:convert - :prog: translater convert +.. click:: trnslator:convert + :prog: trnslator convert :show-nested: diff --git a/docs/commands/transition.rst b/docs/commands/transition.rst index cccee77..ad7d1dd 100644 --- a/docs/commands/transition.rst +++ b/docs/commands/transition.rst @@ -1,5 +1,5 @@ -.. click:: translater:transition - :prog: translater transition +.. click:: trnslator:transition + :prog: trnslator transition :show-nested: diff --git a/docs/conf.py b/docs/conf.py index 5ec277d..4c41746 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,18 +17,18 @@ import sys import datetime sys.path.insert(0, os.path.abspath(".")) -sys.path.insert(0, os.path.abspath("translater")) +sys.path.insert(0, os.path.abspath("trnslator")) # -- Project information ----------------------------------------------------- -project = "translater" +project = "trnslator" copyright = "{}, Samuel Letellier-Duchesne & Louis Leroy".format(datetime.datetime.now().year) author = "Samuel Letellier-Duchesne & Louis Leroy" # The full version, including alpha/beta/rc tags -import translater +import trnslator -version = release = translater.__version__ +version = release = trnslator.__version__ # -- General configuration --------------------------------------------------- @@ -125,7 +125,7 @@ def setup(app): # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = "translaterdoc" +htmlhelp_basename = "trnslatordoc" # -- Options for LaTeX output ------------------------------------------------ @@ -150,8 +150,8 @@ latex_elements = { latex_documents = [ ( master_doc, - "translater.tex", - "translater Documentation", + "trnslator.tex", + "trnslator Documentation", "Samuel Letellier-Duchesne & Louis Leroy", "manual", ) @@ -161,7 +161,7 @@ latex_documents = [ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [(master_doc, "translater", "translater Documentation", [author], 1)] +man_pages = [(master_doc, "trnslator", "trnslator Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- @@ -171,10 +171,10 @@ man_pages = [(master_doc, "translater", "translater Documentation", [author], 1) texinfo_documents = [ ( master_doc, - "translater", - "translater Documentation", + "trnslator", + "trnslator Documentation", author, - "translater", + "trnslator", "One line description of project.", "Miscellaneous", ) diff --git a/docs/converter_bui.rst b/docs/converter_bui.rst index 8d2b00f..06db613 100644 --- a/docs/converter_bui.rst +++ b/docs/converter_bui.rst @@ -70,7 +70,7 @@ Then simply run the following command: .. code-block:: python - translater convert [OPTIONS] IDF_FILE WEATHER_FILE OUTPUT_FOLDER + trnslator convert [OPTIONS] IDF_FILE WEATHER_FILE OUTPUT_FOLDER 1. ``IDF_FILE`` is the file path of the IDF file to convert. If there are space characters in the path, it should be enclosed in quotation marks. @@ -87,7 +87,7 @@ respectively. .. code-block:: python - translater convert "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" 4. `OPTIONS`: There are different options to the `convert` command. The first 3 manage the requested output files. Users can chose to return a combination of flags @@ -99,7 +99,7 @@ Users can chose to return a combination of flags .. code-block:: python - translater convert -i -t -d "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert -i -t -d "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``--window_lib`` is the path of the window library (W74-lib.dat). This library must be in the same format as the Berkeley Lab library used by default in TRNBuild. If nothing is passed, the "W74-lib.dat" file available in the @@ -107,7 +107,7 @@ Users can chose to return a combination of flags .. code-block:: python - translater convert --window_lib "/Users/Documents/W74-lib.dat" "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --window_lib "/Users/Documents/W74-lib.dat" "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``--trnsidf_exe`` is the path of the trnsidf.exe executable. Usually located in the TRNSYS18 folder under "Building/trnsIDF/trnsidf.exe". @@ -115,34 +115,34 @@ Users can chose to return a combination of flags .. code-block:: python - translater convert --trnsidf_exe "C:TRNSYS18\\Building\\trnsIDF\\trnsidf.exe" "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --trnsidf_exe "C:TRNSYS18\\Building\\trnsIDF\\trnsidf.exe" "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``--template`` is the path of the .d18 template file (usually in the same directory as the `trnsidf.exe` executable). If nothing is passed, the following path will be used : "C:TRNSYS18\\Building\\trnsIDF\\NewFileTemplate.d18". .. code-block:: python - translater convert --template "C:TRNSYS18\\Building\\trnsIDF\\NewFileTemplate.d18" "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --template "C:TRNSYS18\\Building\\trnsIDF\\NewFileTemplate.d18" "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``--log_clear_names`` if added, do not print log of "clear_names" (equivalence between old and new names) in the console. .. code-block:: python - translater convert --log_clear_names "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --log_clear_names "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``--window`` specifies the window properties . If nothing is passed, the following values will be used : 2.2 0.65 0.8 0.05 0.15 8.17 .. code-block:: python - translater convert --window 2.2 0.65 0.8 0.05 0.15 8.17 "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --window 2.2 0.65 0.8 0.05 0.15 8.17 "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``--ordered`` sorts the idf object names .. code-block:: python - translater convert --ordered "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --ordered "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - If ``--nonum`` is added, do not renumber surfaces in BUI. If ``--batchjob`` or ``-N`` is added, does BatchJob Modus when running trnsidf.exe. ``--geofloor`` must be followed by a float between 0 and 1, and generates GEOSURF values for distributing direct solar radiation where `geo_floor` % is directed to the floor, @@ -151,13 +151,13 @@ Users can chose to return a combination of flags .. code-block:: python - translater convert --nonum -N --geofloor 0.6 --refarea --volume --capacitance "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" + trnslator convert --nonum -N --geofloor 0.6 --refarea --volume --capacitance "/Users/Documents/NECB 2011 - Warehouse.idf" "/Users/Documents/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" "/Users/Documents/WIP" - ``-h`` Shows the "help" message .. code-block:: python - translater convert -h + trnslator convert -h .. [#] Archetype: building model representing a type of building based on its geometry, thermal properties and its usage. Usually used to create urban building model by assigning different archetypes to represent at best the diff --git a/docs/converting.rst b/docs/converting.rst index dd365fc..118e07b 100644 --- a/docs/converting.rst +++ b/docs/converting.rst @@ -1,7 +1,7 @@ Converting IDF models ===================== -EnergyPlus models can be converted to two different other formats using `translater`. TRNSYS users can convert IDF +EnergyPlus models can be converted to two different other formats using `trnslator`. TRNSYS users can convert IDF files to TRNBuild/Type56 files. .. include:: converter_bui.rst diff --git a/docs/examples/parallel_process.py b/docs/examples/parallel_process.py index f00f340..552fe0e 100644 --- a/docs/examples/parallel_process.py +++ b/docs/examples/parallel_process.py @@ -1,7 +1,7 @@ import pandas as pd from path import Path -from translater import config, run_eplus, parallel_process +from trnslator import config, run_eplus, parallel_process config(cache_folder="../../tests/.temp/cache", use_cache=True, log_console=True) diff --git a/docs/index.rst b/docs/index.rst index bfe37d9..3da31b6 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,11 +3,11 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -translater |version| +trnslator |version| ==================== -`translater` is a Python package designed with the objective of helping building energy modelers and researchers -maintain collections of building archetypes. `translater` depends on `eppy`_ for EnergyPlus models and makes use of +`trnslator` is a Python package designed with the objective of helping building energy modelers and researchers +maintain collections of building archetypes. `trnslator` depends on `eppy`_ for EnergyPlus models and makes use of great packages such as `pandas`_ for data structure processing and `tsam`_ for time series aggregation. .. _eppy: https://eppy.readthedocs.io/ @@ -18,10 +18,10 @@ Description =========== As building energy modelers ourselves, we found it was sometimes difficult to use scripting language to retrieve, -modify, simulate and analyze Building Energy Models (BEM). This is why `translater` was created. We built a package +modify, simulate and analyze Building Energy Models (BEM). This is why `trnslator` was created. We built a package able to an EnergyPlus file to `TRNBuild `_ models (shout out to TRNSYS users!) -`translater` also features a :ref:`Command Line Interface (CLI)` which means that users can execute +`trnslator` also features a :ref:`Command Line Interface (CLI)` which means that users can execute commands in the terminal instead of writing a python script. In addition, we believe reproducible research through Jupyter Notebooks, for instance, is the way foreword. Therefore, all the modules are discoverable and can be imported independently. diff --git a/docs/install.rst b/docs/install.rst index a342fb3..70e03b1 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -42,7 +42,7 @@ in case). You should see something like this: .. code-block:: doscon - C:\Users\translater>conda list + C:\Users\trnslator>conda list # packages in environment at C:\ProgramData\Miniconda3: # # Name Version Build Channel @@ -57,7 +57,7 @@ in case). You should see something like this: Install EnergyPlus & Conversion Programs ........................................ -EnergyPlus is a prerequisite of translater. It must be installed beforehand. Moreover, translater contains routines that +EnergyPlus is a prerequisite of trnslator. It must be installed beforehand. Moreover, trnslator contains routines that may download IDF components that are coded in earlier versions of EnergyPlus (e.g., 7.1). For this reason, users should also download the `supplementary conversion programs`_, and install the content in the EnergyPlus installation folder: @@ -79,7 +79,7 @@ Copy the whole code block below in Command Prompt and Hit :guilabel:`&Enter:⏎` cd aef233396167e0f961df3d62a193573e install_eplus_script.cmd -To install *translater*, follow the steps detailed below in `Installing using pip`_ +To install *trnslator*, follow the steps detailed below in `Installing using pip`_ Installing using ``pip`` ------------------------ @@ -89,25 +89,25 @@ highly recommended), then simply install using the following command in the term .. code-block:: shell - pip install translater + pip install trnslator .. hint:: - If you encounter an issue during the installation of translater using ``pip``, you can try + If you encounter an issue during the installation of trnslator using ``pip``, you can try out `Installing using conda (Anaconda)`_ instead. Installation within a Virtual Environment ----------------------------------------- -It is highly recommended to use/install *translater* on a fresh python virtual environment. If you have any trouble -with the installation above, try installing translater in a new, clean `virtual environment`_ using venv or conda. Note +It is highly recommended to use/install *trnslator* on a fresh python virtual environment. If you have any trouble +with the installation above, try installing trnslator in a new, clean `virtual environment`_ using venv or conda. Note that this pacakge was tested with python 3.6: .. code-block:: shell - python3 -m venv translater - source translater/bin/activate + python3 -m venv trnslator + source trnslator/bin/activate Activating the virtual environment will change your shell’s prompt to show what virtual environment you’re using, and modify the environment so that running python will get you that particular version and installation of Python. For @@ -115,33 +115,33 @@ example: .. code-block:: shell - $ source translater/bin/activate - (translater) $ python + $ source trnslator/bin/activate + (trnslator) $ python Python 3.5.1 (default, May 6 2016, 10:59:36) ... >>> import sys >>> sys.path ['', '/usr/local/lib/python35.zip', ..., - '~/envs/translater/lib/python3.5/site-packages'] + '~/envs/trnslator/lib/python3.5/site-packages'] >>> -Then you can install translater in this freshly created environment: +Then you can install trnslator in this freshly created environment: .. code-block:: shell - pip install translater + pip install trnslator To use the new environment inside a `jupyter notebook`_, we recommend using the steps described by `Angelo Basile`_: .. code-block:: shell - source translater/bin/activate + source trnslator/bin/activate pip install ipykernel - ipython kernel install --user --name=translater + ipython kernel install --user --name=trnslator Next time you `start a jupyter notebook`_, you will have the option to choose the *kernel* corresponding to your -project, *translater* in this case. +project, *trnslator* in this case. .. figure:: images/20181211121922.png :alt: choosing the correct kernel in a jupyter notebook @@ -150,7 +150,7 @@ project, *translater* in this case. choosing the correct kernel in a jupyter notebook. In the *kernel* menu, select *Change Kernel* - and select the appropriate virtual env created earlier (*translater* in this case). + and select the appropriate virtual env created earlier (*trnslator* in this case). Installing using ``conda`` (Anaconda) @@ -158,9 +158,9 @@ Installing using ``conda`` (Anaconda) .. hint:: - If you encounter package dependency errors while installing `translater` using pip, you can use conda instead. + If you encounter package dependency errors while installing `trnslator` using pip, you can use conda instead. -Installing with conda is similar to pip. The following workflow creates a new virtual environment (named translater) +Installing with conda is similar to pip. The following workflow creates a new virtual environment (named trnslator) which contains the required dependencies. It then installs the package using pip. You will need to download the `environment.yml`_ file from the github repository. For the following code to work, first change the working directory to the location of the downloaded `environment.yml` file. Here we use the `conda env update` method which @@ -169,9 +169,9 @@ will work well to create a new environment using a specific dependency file in o .. code-block:: shell conda update -n base conda - conda env update -n translater -f environment.yml - conda activate translater - pip install translater + conda env update -n trnslator -f environment.yml + conda activate trnslator + pip install trnslator .. _start a jupyter notebook: https://jupyter.readthedocs.io/en/latest/running.html#starting-the-notebook-server .. _jupyter notebook: https://jupyter-notebook.readthedocs.io/en/stable/# @@ -182,4 +182,4 @@ will work well to create a new environment using a specific dependency file in o .. _download: https://github.com/NREL/EnergyPlus/releases/tag/v9.2.0 .. _supplementary conversion programs: http://energyplus.helpserve.com/Knowledgebase/List/Index/46/converting-older-version-files .. _script: https://gist.github.com/samuelduchesne/aef233396167e0f961df3d62a193573e -.. _environment.yml: https://github.com/louisleroy5/translater/blob/master/environment.yml \ No newline at end of file +.. _environment.yml: https://github.com/louisleroy5/trnslator/blob/master/environment.yml \ No newline at end of file diff --git a/docs/package_modules.rst b/docs/package_modules.rst index 82c2bbf..540761b 100644 --- a/docs/package_modules.rst +++ b/docs/package_modules.rst @@ -4,7 +4,7 @@ Modules IDF Class --------- -.. currentmodule:: translater.idfclass +.. currentmodule:: trnslator.idfclass .. autosummary:: :template: autosummary.rst @@ -22,7 +22,7 @@ IDF Class Schedule Module --------------- -.. currentmodule:: translater.schedule +.. currentmodule:: trnslator.schedule .. autosummary:: :template: autosummary.rst @@ -35,7 +35,7 @@ Schedule Module EnergyDataFrame --------------- -.. currentmodule:: translater.energydataframe +.. currentmodule:: trnslator.energydataframe .. autosummary:: :template: autosummary.rst @@ -50,7 +50,7 @@ EnergyDataFrame EnergySeries ------------ -.. currentmodule:: translater.energyseries +.. currentmodule:: trnslator.energyseries .. autosummary:: :template: autosummary.rst @@ -85,7 +85,7 @@ EnergySeries Report Data ----------- -.. currentmodule:: translater.reportdata +.. currentmodule:: trnslator.reportdata .. autosummary:: :template: autosummary.rst @@ -103,7 +103,7 @@ Report Data IDF to BUI module ----------------- -.. currentmodule:: translater.trnsys +.. currentmodule:: trnslator.trnsys .. autosummary:: :template: autosummary.rst @@ -124,7 +124,7 @@ IDF to BUI module Utils ----- -.. currentmodule:: translater.utils +.. currentmodule:: trnslator.utils .. autosummary:: :template: autosummary.rst diff --git a/docs/reading_idf.rst b/docs/reading_idf.rst index 2ade5c9..ed5bf05 100644 --- a/docs/reading_idf.rst +++ b/docs/reading_idf.rst @@ -1,16 +1,16 @@ Reading and running IDF files ============================= -`translater` is packed up with some built-in workflows to read, edit and run EnergyPlus files. +`trnslator` is packed up with some built-in workflows to read, edit and run EnergyPlus files. Reading ------- -To read an IDF file, simply call :meth:`~translater.idfclass.load_idf` with the path name. For example: +To read an IDF file, simply call :meth:`~trnslator.idfclass.load_idf` with the path name. For example: .. code-block:: python - >>> from translater import get_eplus_dirs, load_idf + >>> from trnslator import get_eplus_dirs, load_idf >>> eplus_dir = get_eplus_dirs("9-2-0") # Getting EnergyPlus install path >>> eplus_file = eplus_dir / "ExampleFiles" / "BasicsFiles" / "AdultEducationCenter.idf" # Model path >>> idf = load_idf(eplus_file) # IDF load @@ -25,35 +25,35 @@ You can optionally pass the weather file path as well: Editing ------- -Editing IDF files is based on the :ref:`eppy` package. The :class:`~translater.idfclass.IDF` object returned by -:meth:`~translater.idfclass.load_idf` exposes the EnergyPlus objects that make up the IDF file. These objects can be +Editing IDF files is based on the :ref:`eppy` package. The :class:`~trnslator.idfclass.IDF` object returned by +:meth:`~trnslator.idfclass.load_idf` exposes the EnergyPlus objects that make up the IDF file. These objects can be edited and new objects can be created. See the `eppy documentation `_ for more information on how to edit IDF files. .. hint:: Pre-sets - EnergyPlus outputs can be quickly defined using the :class:`translater.idfclass.OutputPrep` class. This class + EnergyPlus outputs can be quickly defined using the :class:`trnslator.idfclass.OutputPrep` class. This class and its methods handle adding predefined or custom outputs to an IDF object. For example, the idf object created above can be modified by adding a basic set of outputs: .. code-block:: python - >>> from translater import OutputPrep + >>> from trnslator import OutputPrep >>> OutputPrep(idf=idf, save=True).add_basics() - See :class:`~translater.idfclass.OutputPrep` for more details on all possible methods. + See :class:`~trnslator.idfclass.OutputPrep` for more details on all possible methods. Running ------- -Running an EnerguPlus file can be done in two ways. The first way is to call the :meth:`translater.idfclass.run_eplus` +Running an EnerguPlus file can be done in two ways. The first way is to call the :meth:`trnslator.idfclass.run_eplus` function with the path of the IDF file and the path of the weather file. The second method is to call the -:meth:`~translater.idfclass.IDF.run_eplus` method on an :class:`~translater.idfclass.IDF` object that has been +:meth:`~trnslator.idfclass.IDF.run_eplus` method on an :class:`~trnslator.idfclass.IDF` object that has been previously read. In both cases, users can also specify run options as well as output options. For example, instead of creating an OutputPrep object, one can specify custom outputs in the -:py:attr:`translater.idfclass.run_eplus.prep_outputs` attribute. These outputs will be appended to the IDF file before -the simulation is run. See :meth:`~translater.idfclass.run_eplus` for other parameters to pass to `run_eplus`. +:py:attr:`trnslator.idfclass.run_eplus.prep_outputs` attribute. These outputs will be appended to the IDF file before +the simulation is run. See :meth:`~trnslator.idfclass.run_eplus` for other parameters to pass to `run_eplus`. For the same IDF object above, the following: @@ -65,21 +65,21 @@ is equivalent to: .. code-block:: python - >>> from translater import run_eplus + >>> from trnslator import run_eplus >>> run_eplus(eplus_file, weather) .. hint:: Caching system. When running EnergyPlus simulations, a caching system can be activated to reduce the number of calls to the - EnergyPlus executable. This can be helpful when `translater` is called many times. This caching system will save + EnergyPlus executable. This can be helpful when `trnslator` is called many times. This caching system will save simulation results in a folder identified by a unique identifier. This identifier is based on the content of the IDF - file, as well as the various :meth:`~translater.idfclass.run_eplus` options. If caching is activated, then - subsequent calls to the :meth:`~translater.idfclass.run_eplus` method will return the cached results. + file, as well as the various :meth:`~trnslator.idfclass.run_eplus` options. If caching is activated, then + subsequent calls to the :meth:`~trnslator.idfclass.run_eplus` method will return the cached results. - The caching system is activated by calling the :meth:`translater.utils.config` method, which can also be used to + The caching system is activated by calling the :meth:`trnslator.utils.config` method, which can also be used to set a series of package-wide options. ``config`` would typically be put at the top of a python script: .. code-block:: python - >>> from translater import config + >>> from trnslator import config >>> config(use_cache=True) \ No newline at end of file diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 8aae56b..7e3bf45 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -6,7 +6,7 @@ MacOs Catalina Compatibility With the release of MacOs Catalina, Apple requires apps to be signed and/or notarized. This helps users make sure they open apps from trusted developers. It appears that the transition files that are needed to upgrade older IDF files to -the latest version of EnergyPlus are not signed. Thus, users using translater on the MacOs platform might encounter an +the latest version of EnergyPlus are not signed. Thus, users using trnslator on the MacOs platform might encounter an error of this type: "Transition cannot be opened because the developer cannot be verified". (see `Missing transition programs`_ for more details on downloading and installing older transition programs). diff --git a/docs/tutorials/parallel_process.rst b/docs/tutorials/parallel_process.rst index 4b74c6e..976fb69 100644 --- a/docs/tutorials/parallel_process.rst +++ b/docs/tutorials/parallel_process.rst @@ -1,20 +1,20 @@ Running multiple files ====================== -Running multiple IDF files is easily achieved by using the :meth:`~translater.utils.parallel_process` method. +Running multiple IDF files is easily achieved by using the :meth:`~trnslator.utils.parallel_process` method. .. hint:: - The :meth:`~translater.utils.parallel_process` method works with any method. You can use it to parallelize + The :meth:`~trnslator.utils.parallel_process` method works with any method. You can use it to parallelize other functions in your script. -To create a parallel run, first import the usual pacakge methods and configure `translater` to use caching and to +To create a parallel run, first import the usual pacakge methods and configure `trnslator` to use caching and to show logs in the console. .. code-block:: python >>> from path import Path - >>> from translater import load_idf, config, run_eplus, settings, parallel_process + >>> from trnslator import load_idf, config, run_eplus, settings, parallel_process >>> import pandas as pd >>> config(use_cache=True, log_console=True) @@ -22,8 +22,8 @@ Then, use .. code-block:: python - >>> from translater import load_idf, config, run_eplus, settings - >>> from translater import parallel_process + >>> from trnslator import load_idf, config, run_eplus, settings + >>> from trnslator import parallel_process >>> import pandas as pd >>> config(use_cache=True, log_console=True) @@ -42,8 +42,8 @@ For good measure, load the files in a DataFrame, which we will use to create the >>> idfs = pd.DataFrame({"file": files, "name": [file.basename() for file in files]}) -The rundict, is the list of tasks we wish to do in parallel. This dictionary is passed to :meth:`~translater.idfclass -.parallel_process`. Here, we want to execute :meth:`~translater.idfclass.run_eplus` with the following parameters: +The rundict, is the list of tasks we wish to do in parallel. This dictionary is passed to :meth:`~trnslator.idfclass +.parallel_process`. Here, we want to execute :meth:`~trnslator.idfclass.run_eplus` with the following parameters: .. code-block:: python @@ -60,8 +60,8 @@ The rundict, is the list of tasks we wish to do in parallel. This dictionary is for k, file in idfs.file.to_dict().items() } -Finally, execute :meth:`~translater.utils.parallel_process`. The resulting sql_file paths, which we defined as the -type of output_report attribute for :meth:`~translater.idfclass.run_eplus` is returned as a dictionary with the same +Finally, execute :meth:`~trnslator.utils.parallel_process`. The resulting sql_file paths, which we defined as the +type of output_report attribute for :meth:`~trnslator.idfclass.run_eplus` is returned as a dictionary with the same keys as the index of the DataFrame. .. code-block:: python diff --git a/docs/tutorials/schedules.rst b/docs/tutorials/schedules.rst index ce76393..78833b7 100644 --- a/docs/tutorials/schedules.rst +++ b/docs/tutorials/schedules.rst @@ -1,17 +1,17 @@ Schedules ========= -`translater` can parse EnergyPlus schedules. In EnergyPlus, there are many ways to define schedules in an IDF file. The +`trnslator` can parse EnergyPlus schedules. In EnergyPlus, there are many ways to define schedules in an IDF file. The Schedule module defines a class that handles parsing, plotting converting schedules. Reading Schedules ----------------- -*translater* can read almost any schedules defined in an IDF file using a few commands. First, +*trnslator* can read almost any schedules defined in an IDF file using a few commands. First, .. code-block:: python - >>> import translater as tr + >>> import trnslator as tr >>> idf = tr.load_idf() >>> this_schedule = Schedule(Name='name', idf=idf) @@ -20,10 +20,10 @@ Converting Schedules -------------------- Some tools typically rely on a group of 3 schedules; defined as a Yearly, Weekly, Daily schedule object. This is the -case for the :ref:`IDF to TRNSYS ` converter. The Schedule module of *translater* can handle this conversion. +case for the :ref:`IDF to TRNSYS ` converter. The Schedule module of *trnslator* can handle this conversion. The `year-week-day` representation for any schedule object is invoked with -the :py:meth:`~translater.schedule.Schedule.to_year_week_day` method: +the :py:meth:`~trnslator.schedule.Schedule.to_year_week_day` method: .. code-block:: python @@ -34,7 +34,7 @@ Plotting Schedules Schedules can be parsed as :class:`pandas.Series` objects (call the `series` property on a Schedule object) which then exposes useful methods from the pandas package. For convenience, a wrapper for the plotting method is built-in the -Schedule class. To plot the full annual schedule (or a specific range), simply call the :meth:`translater.schedule.Schedule.plot` +Schedule class. To plot the full annual schedule (or a specific range), simply call the :meth:`trnslator.schedule.Schedule.plot` method. For example, .. code-block:: python diff --git a/docs/unix_users.rst b/docs/unix_users.rst index 79d2f04..167486f 100644 --- a/docs/unix_users.rst +++ b/docs/unix_users.rst @@ -1,7 +1,7 @@ For MacOS/Linux users ===================== -MacOS or Linux users must install Wine_ before running translater. This software +MacOS or Linux users must install Wine_ before running trnslator. This software will allow MacOS/Linux users to run Windows application (e.g. `trnsidf.exe`). Wine installation @@ -40,18 +40,18 @@ This action will make Homebrew inspected your system to make sure the installati For more information about Wine installation, you can visit the following website: https://www.davidbaumgold.com/tutorials/wine-mac/ -Using WINE with ``translater convert`` command +Using WINE with ``trnslator convert`` command ---------------------------------------------- The IDF to BUI converter uses an executable installed with TRNSYS (which is Windows only). Users that have bought -TRNSYS can copy the trnsidf.exe executable to their UNIX machine (MacOs or Linux) and invoke the `translater convert` +TRNSYS can copy the trnsidf.exe executable to their UNIX machine (MacOs or Linux) and invoke the `trnslator convert` command with the :option:`--trnsidf_exe` option. Example: .. code-block:: python - translater convert --trnsidf-exe "" "" + trnslator convert --trnsidf-exe "" "" You can find the executable trnsidf.exe in the TRNSYS default installation folder: `C:\\TRNSYS18\\Building\\trnsIDF` diff --git a/environment.yml b/environment.yml index 0a210e9..57d7e52 100644 --- a/environment.yml +++ b/environment.yml @@ -1,4 +1,4 @@ -name: translater +name: trnslator channels: - defaults - conda-forge diff --git a/make.bat b/make.bat index 9ffb0e6..74e5a8e 100644 --- a/make.bat +++ b/make.bat @@ -9,7 +9,7 @@ if "%SPHINXBUILD%" == "" ( ) set SOURCEDIR=./docs set BUILDDIR=_build -set SPHINXPROJ=translater +set SPHINXPROJ=trnslator if "%1" == "" goto help diff --git a/meta.yaml b/meta.yaml index 4ac4cbd..10efcb0 100644 --- a/meta.yaml +++ b/meta.yaml @@ -1,4 +1,4 @@ -{% set name = "translater" %} +{% set name = "trnslator" %} {% set version = "1.0.1" %} {% set sha256 = "3e97f799769469412b12b8d71cc2342d0c93c9f6ea4ca36366c415eef9fbe344" %} @@ -34,18 +34,18 @@ requirements: test: imports: - - translater + - trnslator about: - home: https://github.com/louisleroy5/translater + home: https://github.com/louisleroy5/trnslator license: MIT license_family: MIT license_file: LICENSE.txt summary: 'Convert IDF file (EnergyPlus) to BUI file (TRNBuild)' description: | - translater is a Python package. - doc_url: https://translater.readthedocs.io - dev_url: https://github.com/louisleroy5/translater + trnslator is a Python package. + doc_url: https://trnslator.readthedocs.io + dev_url: https://github.com/louisleroy5/trnslator extra: recipe-maintainers: diff --git a/setup.py b/setup.py index 73c33a4..bfdc5c4 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ here = os.getcwd() # the minimum Python requirement in the metadata. if sys.version_info < (3, 6): error = """ -translater 1.0+ does not support Python 2.x, 3.0, 3.1, 3.2, or 3.3. +trnslator 1.0+ does not support Python 2.x, 3.0, 3.1, 3.2, or 3.3. Python 3.6 and above is required. This may be due to an out of date pip. Make sure you have pip >= 9.0.1. """ @@ -47,18 +47,18 @@ with open(path.join(here, "requirements-dev.txt")) as f: dev_requires = [r.strip() for r in requirements_lines] setup( - name="translater", - version=find_version("translater", "__init__.py"), - packages=["translater"], + name="trnslator", + version=find_version("trnslator", "__init__.py"), + packages=["trnslator"], package_data={ - "translater": [ - "translater/ressources/originBUISketchUp.idf", - "translater/ressources/W74-lib.dat", - "translater/ressources/NewFileTemplate.d18", + "trnslator": [ + "trnslator/ressources/originBUISketchUp.idf", + "trnslator/ressources/W74-lib.dat", + "trnslator/ressources/NewFileTemplate.d18", ] }, include_package_data=True, - url="https://github.com/louisleroy5/translater", + url="https://github.com/louisleroy5/trnslator", license="-", author="Louis Leroy", author_email="louis.leroy@polymtl.ca", @@ -71,6 +71,6 @@ setup( test_suite="tests", entry_points=""" [console_scripts] - translater=translater.cli:cli + trnslator=trnslator.cli:cli """, ) diff --git a/tests/conftest.py b/tests/conftest.py index 54061c8..3c97b2d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,7 +5,7 @@ import sys import pytest -import translater as tr +import trnslator as tr # Parametrization of the fixture scratch_then_cache. The following array diff --git a/tests/test_cli.py b/tests/test_cli.py index a083b46..1333fb2 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -4,13 +4,13 @@ import pytest from click.testing import CliRunner from path import Path -from translater import settings, copy_file, log, load_idf -from translater.cli import cli +from trnslator import settings, copy_file, log, load_idf +from trnslator.cli import cli from tests.test_trnsys import get_platform class TestCli: - """Defines tests for usage of the translater Command Line Interface""" + """Defines tests for usage of the trnslator Command Line Interface""" @pytest.fixture( params=[ @@ -73,7 +73,7 @@ class TestCli: "--ep_version", "9-2-0", "--window_lib", - "translater/ressources/W74-lib.dat", + "trnslator/ressources/W74-lib.dat", "tests/input_data/trnsys/simple_2_zone.idf", "tests/input_data/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw", "--trnsidf_exe", @@ -95,7 +95,7 @@ class TestCli: "--ep_version", "9-2-0", "--template", - "translater/ressources/NewFileTemplate.d18", + "trnslator/ressources/NewFileTemplate.d18", "tests/input_data/trnsys/simple_2_zone.idf", "tests/input_data/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw", "--trnsidf_exe", diff --git a/tests/test_energyseries.py b/tests/test_energyseries.py index 1edd4c3..a839444 100644 --- a/tests/test_energyseries.py +++ b/tests/test_energyseries.py @@ -1,12 +1,12 @@ import os -import translater as tr +import trnslator as tr import pandas as pd import pytest from path import Path -from translater import EnergySeries, get_eplus_dirs, settings +from trnslator import EnergySeries, get_eplus_dirs, settings import numpy as np @@ -22,7 +22,7 @@ import numpy as np ], ) def energy_series(config, request): - from translater import ReportData + from trnslator import ReportData outputs = { "ep_object": "Output:Variable".upper(), @@ -62,7 +62,7 @@ def energy_series(config, request): params=(["Water Heater Tank Temperature", "WaterSystems:EnergyTransfer"]) ) def rd(request): - from translater import ReportData + from trnslator import ReportData file = Path("tests/input_data/trnsys/HeatPumpWaterHeater.sqlite") @@ -73,7 +73,7 @@ def rd(request): def test_EnergySeries(rd): import matplotlib.pyplot as plt - from translater import EnergySeries + from trnslator import EnergySeries es = EnergySeries.from_sqlite(rd) es.plot() diff --git a/tests/test_idf.py b/tests/test_idf.py index 5ce67e0..ef6aae9 100644 --- a/tests/test_idf.py +++ b/tests/test_idf.py @@ -2,15 +2,15 @@ import os import random import subprocess -import translater as tr +import trnslator as tr import matplotlib as mpl # use agg backend so you don't need a display on travis-ci import pytest from path import Path -import translater.settings -from translater import EnergyPlusProcessError, get_eplus_dirs, settings, \ +import trnslator.settings +from trnslator import EnergyPlusProcessError, get_eplus_dirs, settings, \ parallel_process mpl.use("Agg") @@ -85,7 +85,7 @@ def test_load_old(config): @pytest.mark.parametrize( "ep_version", - [translater.settings.ep_version, None], + [trnslator.settings.ep_version, None], ids=["specific-ep-version", "no-specific-ep-version"], ) def test_run_olderv(clean_config, ep_version): @@ -175,7 +175,7 @@ def test_area(archetype, area): """Test the conditioned_area property against published values desired values taken from https://github.com/canmet-energy/btap""" import numpy as np - from translater import load_idf + from trnslator import load_idf idf_file = Path("tests/input_data/necb/").glob("*{}*.idf".format(archetype)) idf = load_idf(next(iter(idf_file))) @@ -183,7 +183,7 @@ def test_area(archetype, area): def test_wwr(): - from translater import load_idf + from trnslator import load_idf idf_file = Path("tests/input_data/necb/").glob( "*{}*.idf".format("FullServiceRestaurant") @@ -194,7 +194,7 @@ def test_wwr(): def test_partition_ratio(): - from translater import load_idf + from trnslator import load_idf idf_file = Path("tests/input_data/necb/").glob("*LargeOffice*.idf") idf = load_idf(next(iter(idf_file))) @@ -202,7 +202,7 @@ def test_partition_ratio(): def test_space_cooling_profile(config): - from translater import load_idf + from trnslator import load_idf file = ( get_eplus_dirs(settings.ep_version) @@ -218,7 +218,7 @@ def test_space_cooling_profile(config): def test_space_heating_profile(config): - from translater import load_idf + from trnslator import load_idf file = "tests/input_data/necb/NECB 2011-Warehouse-NECB HDD Method-CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw.idf" wf = "tests/input_data/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" @@ -229,7 +229,7 @@ def test_space_heating_profile(config): def test_dhw_profile(config): - from translater import load_idf + from trnslator import load_idf file = "tests/input_data/necb/NECB 2011-Warehouse-NECB HDD Method-CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw.idf" wf = "tests/input_data/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" @@ -243,7 +243,7 @@ def test_dhw_profile(config): def test_old_than_change_args(clean_config): """Should upgrade file only once even if run_eplus args are changed afterwards""" - from translater import run_eplus + from trnslator import run_eplus file = ( get_eplus_dirs(settings.ep_version) diff --git a/tests/test_schedules.py b/tests/test_schedules.py index 4834034..2d93743 100644 --- a/tests/test_schedules.py +++ b/tests/test_schedules.py @@ -2,7 +2,7 @@ import os import pytest -from translater import ( +from trnslator import ( Schedule, load_idf, copy_file, diff --git a/tests/test_trnsys.py b/tests/test_trnsys.py index 6b70c9f..1e96b3f 100644 --- a/tests/test_trnsys.py +++ b/tests/test_trnsys.py @@ -5,7 +5,7 @@ import shutil import pytest -import translater as tr +import trnslator as tr import pandas as pd @@ -13,7 +13,7 @@ from path import Path from copy import deepcopy -from translater import ( +from trnslator import ( convert_idf_to_trnbuild, parallel_process, trnbuild_idf, @@ -27,7 +27,7 @@ from translater import ( ) # Function round to hundreds -from translater.trnsys import ( +from trnslator.trnsys import ( _assert_files, load_idf_file_and_clean_names, clear_name_idf_objects, @@ -72,7 +72,7 @@ from tests.conftest import get_platform def converttesteasy(request): file = request.param window_file = "W74-lib.dat" - template_dir = os.path.join("translater", "ressources") + template_dir = os.path.join("trnslator", "ressources") window_filepath = os.path.join(template_dir, window_file) template_d18 = "tests/input_data/trnsys/NewFileTemplate.d18" trnsidf_exe = "docker/trnsidf/trnsidf.exe" # 'docker/trnsidf/trnsidf.exe' @@ -770,7 +770,7 @@ def converttest(request): file = get_eplus_dirs(settings.ep_version) / "ExampleFiles" / request.param # file = request.param window_file = "W74-lib.dat" - template_dir = os.path.join("translater", "ressources") + template_dir = os.path.join("trnslator", "ressources") window_filepath = os.path.join(template_dir, window_file) template_d18 = "tests/input_data/trnsys/NewFileTemplate.d18" trnsidf_exe = "docker/trnsidf/trnsidf.exe" # 'docker/trnsidf/trnsidf.exe' @@ -1162,7 +1162,7 @@ class TestTrnBuild: def test_trnbuild_from_idf(self, config, trnbuild_file): # Gets file paths/names window_file = "W74-lib.dat" - template_dir = os.path.join("translater", "ressources") + template_dir = os.path.join("trnslator", "ressources") window_filepath = os.path.join(template_dir, window_file) weather_file = os.path.join( "tests", "input_data", "CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw" @@ -1305,7 +1305,7 @@ class TestTrnBuild: def test_trnbuild_from_simple_idf(config): # Path to weather file, window library and T3D template window_file = "W74-lib.dat" - template_dir = os.path.join("translater", "ressources") + template_dir = os.path.join("trnslator", "ressources") window_filepath = os.path.join(template_dir, window_file) # weather_file = os.path.join( # "tests", "input_data", "CAN_QC_Montreal-McTavish.716120_CWEC2016.epw" diff --git a/tests/test_utils.py b/tests/test_utils.py index 7053f66..0c7673b 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -3,7 +3,7 @@ import os import numpy as np -from translater import utils, timeit, settings +from trnslator import utils, timeit, settings from geomeppy.geom.polygons import Polygon3D from datetime import datetime diff --git a/translater.egg-info/PKG-INFO b/translater.egg-info/PKG-INFO deleted file mode 100644 index b396b23..0000000 --- a/translater.egg-info/PKG-INFO +++ /dev/null @@ -1,32 +0,0 @@ -Metadata-Version: 2.1 -Name: translater -Version: 1.0.0 -Summary: Convert IDF file (EnergyPlus) to BUI file (TRNBuild) -Home-page: https://github.com/louisleroy5/translater -Author: Louis Leroy -Author-email: louis.leroy@polymtl.ca -License: Polytechnique Montréal -Description: - # Translater - - **python for converting building simulation archetypes** - - Convert IDF file (EnergyPlus) to BUI file (TRNBuild) - - ## Overview - - ** Translater** is a Python package that helps converting building archetypes. The public feature released in this - version is the conversion of [EnergyPlus](https://energyplus.net) IDF models to Trnsys [TrnBuild](http://www.trnsys.com/features/suite-of-tools.php.html) Models (compatible with the multizone building model). For a list of features - currently in development see the [In development](#in-development) section. - - ## Authors - - This work is developed by a small team of building energy simulation enthusiasts - - - Louis Leroy, Master Student at Polytechnique Montréal (Corresponding Author) - - Samuel Letellier-Duchesne, PhD Candidate at Polytechnique Montréal - -Keywords: Building archetypes -Platform: UNKNOWN -Requires-Python: >=3.6 -Provides-Extra: dev diff --git a/translater.egg-info/SOURCES.txt b/translater.egg-info/SOURCES.txt deleted file mode 100644 index fe9ab48..0000000 --- a/translater.egg-info/SOURCES.txt +++ /dev/null @@ -1,29 +0,0 @@ -MANIFEST.in -README.md -requirements-dev.txt -requirements.txt -setup.cfg -setup.py -translater/__init__.py -translater/cli.py -translater/energydataframe.py -translater/energyseries.py -translater/idfclass.py -translater/plot.py -translater/reportdata.py -translater/schedule.py -translater/settings.py -translater/simple_glazing.py -translater/tabulardata.py -translater/trnsys.py -translater/umi_template.py -translater/utils.py -translater.egg-info/PKG-INFO -translater.egg-info/SOURCES.txt -translater.egg-info/dependency_links.txt -translater.egg-info/entry_points.txt -translater.egg-info/requires.txt -translater.egg-info/top_level.txt -translater/ressources/NewFileTemplate.d18 -translater/ressources/W74-lib.dat -translater/ressources/originBUISketchUp.idf \ No newline at end of file diff --git a/translater.egg-info/dependency_links.txt b/translater.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/translater.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/translater.egg-info/entry_points.txt b/translater.egg-info/entry_points.txt deleted file mode 100644 index 13bffef..0000000 --- a/translater.egg-info/entry_points.txt +++ /dev/null @@ -1,4 +0,0 @@ - - [console_scripts] - translater= translater.cli:cli - \ No newline at end of file diff --git a/translater.egg-info/requires.txt b/translater.egg-info/requires.txt deleted file mode 100644 index a125784..0000000 --- a/translater.egg-info/requires.txt +++ /dev/null @@ -1,32 +0,0 @@ -networkx -shapely -geomeppy -matplotlib>=2.1 -six -eppy -requests>=2.18 -pycountry -scikit-learn -scipy -pandas>=0.24 -pyomo -numpy>=1.17 -tqdm -tabulate -path.py -tsam -pint -click -outdated - -[dev] -coverage -coveralls -pytest -pytest-cov -scikit-learn -scipy -sphinx -sphinx_rtd_theme -recommonmark -sphinx-click diff --git a/translater.egg-info/top_level.txt b/translater.egg-info/top_level.txt deleted file mode 100644 index f2f5408..0000000 --- a/translater.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -translater diff --git a/translater/__pycache__/__init__.cpython-36.pyc b/translater/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index f948c036dd1dc9ec21cb11b155171f36690f6bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 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 diff --git a/translater/__pycache__/energyseries.cpython-36.pyc b/translater/__pycache__/energyseries.cpython-36.pyc deleted file mode 100644 index b9e4c5ebe0b4bd3708a4a407b841dfe4c53f7f45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24834 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

SG4JS?=O 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 UEAEz?a1;Iw#LT!U=H(av0N(ASHUIzs diff --git a/translater/__pycache__/reportdata.cpython-36.pyc b/translater/__pycache__/reportdata.cpython-36.pyc deleted file mode 100644 index bf07b1aed7b67b7996f4763b2e53d23a95422d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12376 zcmb_i-ESLLcAqbPllrnPTmH)I=1WYqbZlpLvrb|}Yf-i~7VSuKoD8;Q#=Ikm^oYaU z8QP{oZi>i@7%1FzKTs6y0*j(A+qb?HXn~?A`WNiuVxEfblhKzx^r7%W)8Dx>oEch_ zg2JK1!Pjtl%MVN&;;8ufHLK%rZ^`t`-Nwdt)72Zc>AJdW@q3o5oA}q=?w#PFvx&Qo z*=Bf5Z!B|j$I?yPcJ4RZTe|1yCS!RWAN)20+3K6!c7rY<=cd>5bBnyOZF#+phO7 zu9MJ1#c7u{U+FME?>Y5$cLzGy@C)2>EwA1bqS9JUlPakV+cmQ8XLg-IOa|)EaMl?{ z$Cygoh~mGK_;IxR?Ap0o7+?3CZE>e(JKd&xZpmq&nYQPiTX#0S`zE)}dE9Kfw&^)M zc^P05ex=j%OPk!;sSlgi0q#zKNJ>`L zrS~NFvX@~B#v|3r?qR&B22+`4=LYG1x|OH8zj!prG^Ih7r3N{c?yF6Cknbz}Py14< zz%m%&?4J5lWl$I>{amZaaxC93%u0L8AlJ{gN_~v5EcG@1Z=!youd!lSzc{vjQPh`O z6a7pd2z%4 zifyKI%j@zs+3h7^wU<7PrT?igPBPH@+s($d4s#zh@8K(vb$?pPNAE21E%#D%M<`bN zUXwd*Qk*)Ov_9{8ynIPtY@>+OR!p!u<_&M#O4in?c152*ufL}+S#EQyJ%UTvOJ;9D zzYvw{Yu&bf6Ncch1^pr(-?lJWTRic+tgl;^Xz8AbdR=!P=6Z7%W*?yF&YhOk@JOgk zyo3fuO7u;K>&)`ZrtMZnpdjz2XVrzsgC561S_{NKDyR8)2q2ve$Rd6a@)5VNd-kSn znXaXGxO1<`FseGFx}dim50{@0c28b$x;7K{o0tvsX!t)L2%D*y_h2w19IsceSFdd7 zoK@n6#e}&qQjO$}52{5o@j(@0oag4}@h@1zma7ju3o{ra4Lg_vud?d2z3s7BUWHU+ z9N%8$n$zV66sh-`n>$@hqgVpLw|hV(6deLl zjqNN@(ZeKn+vGdl&a!Q8jcuz_NuV9rCR9MInPVY1W0i3AJ+S-`WV}pkm{_Y1em}8< zA6RL)vL9H1mh%G(0~JpC0S8u1x(5eV5?;fIUM{cQSWTMxq6^y^sSy~QuCLT;)iwPm zH&$wi`mtr{;!URCsEyiiTtkQy(;|({fwnoe>Fd?y4gJQgjnVd#b}Cx8_O~9j8CiE^ z)ni*qbdu&5g7v~KMe_~1;Kj4gSQsItgc1iPfr;GJI|Sz?H9TQ2fF4o)MA1k)x35*# zs`~uOa_!dj>+@bEVNm*;WuUwd{|F{l--L~o-x+z=FC@y~zL|GytKNnd@)F#YXYxC{ zd3~|Aq|d+Vmf!KSSU^RoF`4KOnNE4q&o|v>+x5(L!}3+E0C0~{AYv6ijkRgV^nA_3 zBd!A4Pg@U~uIKvG%kTthj<@V|+bpP^;g;ROYUyW!mFuFPX}}@J>gON9+~hSoU=mLP zpWXFQzhj$dHr?&O)3f}H^}uRi_AF2ES+r#o5-T7-gD3nnJ)S~$M*IO^qcxJx6Mq^t zY2*u^r$d&A+ZLZ!vl8#L^_(6 zXW(mQD|0+3r1LZ4e6X5_;9%kWu;>i-6%YnkwR_ZGmB^paT%=Q&}isxD%bv6~a zb?I7z{9F1^GZYjY!Ph+t(v11Q5JV=@Go#O=VX4Gvzb#2<6?>t8V>OSIDHS z`by>W4{LgmQW=OnXd`FANiXgE8a%U@9|6xyWa-3tjpj8TNjySCFX zZTE5|etlQdZ>;GN?*v5R61-DWTg3a+05S29>pvNCoqg3M;~6rp@b9C(k)t6OMnJs7 za|_HR$-5237QFuvUI=)X{vW(Yub0zY2ZFEB6F=p3q4zK?%ky(Xch%y@P@|j@dd}a* zwIOs;Fy(TJ{`dtV#9vtvHG-$qdHx2-m-xCs>TRk0nkISL-8}!XEDbbS+RgX1FXh|PCzMCQ zlb>lHOKs(2sjotH)Y=A^J`YI0*l;Y~fEQ~!riTuH2M>*+XFc%hn`Q%1UysjFy$O!c zLxgz3R5^_}s*~mMH;E7$zX;;X)^oPXzlX=az}GE;NQ$DQd5df^Lfi_b%8Zpyy5cJad-}Oh#SGyU*JN>YYJHo#M?AcBFa|9gqIHQG;x>lQk1S^8J2yl4zgal zpV^aH?yknKd6_-wOPQi`O4w~-B5mbb`8^4E1y*boy%N>klf4O~`4n05ruwOVwx4FD zIcZMnXXqEEp&;KffyjIEaTX$)Hvb0FOG?Sy+T!LG)-MyuV9T8!I6)EJ#ni zz7RjYYPzpea2T!c(F;qMK2YBa0bZv7*D?`Lo5S2z91rdfn%lH=+s$1>%Xb{dMnKry z)Hit7T1dq1ait&u8Ha~MkFgfQ1R*vedFHe&{eIKi28`Q5mnb18*osnaQCA3rbap=r z^b~FxLR6vLZbe6~XtQhENEujd-PAE%#3C6o!@6Op-{>N5NO^^}Wg*HNW!rQci2We) zgPIjh>P<8g)pR(sctu}9>T!g7YWX@?(U*ozUm0zBLGL1lj)2}<#zJN#vKeCo^<>WX zl8}P1cS?sM3p`9@gySBxFC=d2k&O3;2eEGp4|SFNE#WxFvUzr7j4D1W3?D)fpB*3G zJg0jw$?&&Y^K+U`B28I@;Fwz|e zzf0Lq>T8%!Fx0!Zx62tnw>iw0`YBPz&qZqL7f5l!3DD0)V)wJiUZF*`#&I3Sz!)XoSFB73v&R6U$Kebf-@vW1Ncw z=eWSh0Ox;zlL>MDJ;ccgoXl7pTG2AVIU#UP2%PK_g})D+tiVzDe29}5IN7l{6Try= zXHMYE37i~o9sws8;&eisg22g*#hC<74mc+T&Pjoj2hMMRlMiwJF~lhfocvgvDd6OR zb4uWx5;%n?Dn9|7g1}L^6ylTwPGKz0G;j*QIW2Hb3!EZwJ_SxO#JLvYObDFfSezN) z6oGR_;G7XSCE)xTIHeHhNr*Eka7trwjsT|woU;PwtiYK7&VK=CBE0DD$tN0L=wlFzo8hhAz#haM zE3p`hD2i4K@`>78uGj-Ozd*Ma1ie@ecN^|E;YDzf9~Vn2c3GPUFY6AER(7W?N+K>A zj@{j9CsytK?o{M+iH3FL>;*^V(F}aBpfLEzP0BqUTGvBv>YHoDh_n{bJ~Hop^IL(3 zLz@N%aoTiuXj}7e4w3aaw1Qwntb>PEqn^?}DP@rkt%%|OX3i<+a41S3GAK#pNE}*y z7!G|SZs4#SD%7?}Xzgn*QoOO=V6fGV?S?S2ifTvk8O3JgT!{3?NnD8Z$IL($3oQjE zSZIR;NRTl=;JCPU9=OJ!t~@?_2!MWjitqn#g*Dp_2VJyld%;Dl^frILev5IMVQEKtgKc?n$Jb1 zI=$P_;@T%8jLgMycy2Zr&)9b(#*`OfEcMai^;?l1rG$x& zZ}42y;0sA2v$DQg#ZJL+{4?QfHNMdweLIb631i{pRgZ7&%D2;6UJUHjwHvo?4ttr8 zr_=FGU;lQRE|P+;Z&Yt4I_wvdll1uJZ%56)kbPx8sD3h{P}$+MKfYPg+;Coc5hd1Y zi>pH&7QyWJ)^@&~)@A}*Ua4JOUaNk1t6IDA$#9rw_ODOlS-Bsv@(#7b4%zaUu}gHYjO@XTf}>-SP9W|Hto8jkMY6AV0({-0&?TO(J)R>=1E? zbck>w9+7)Q?i1+|`5c7K@8P)A5FRPKI04{K)`LAQoTCc%xQcZgqk{!Wkz zXb{#Wk!>O^A~umW5t@VeXGB~gT_Ti);SY%H5}{;)pBc81$2K0aBP0<+ZPeR1wpBk* zR~Lv}B=Q!K?-Tg}kslIyo5+t04VB*%^t_-K1idKeTSj3xB=vBsY&eR-f4B`keuJ+# zd?~$wEipw)&tp>zTVlEJH@r{h-w@B!>F0h^&)w&qyC0ShpAUZn9Ay?ckF=aucF)8* zGsbt>h_cI+>7efw;`?I|WH^>_4r`gR%*gO!yX~=plXoieyb7+c*+!Y?mdaAd8fz?# z^L8rBpd`g6ak3Kmd?B#!x*;&^3zVlr|gDTf&&hi9ka2SM-?axwB!?j`361?j6h9?zn%^LTQNg|o{{en{x#epn_O_RS`iKgD4pMvizh8g- z^;3Mm#;zV|IbSDo6ogJnl2q#S7PeiYLz6l8zKJcrdzOt2EYdDsB_dcA$Rh1`oSq3H zENB_GzoIEnB;!hy&C6p`FO7U&Q5`wjNCJ*GfmBZMfanQ7g{!i*j8A#8Hu706Yqgq4 z$ZnKh^0RfZ&seYf`FefFp#!P7#tijY*R(~K>VBqPXHKJD7jx!|&y@vnNDv|Cw!`=w zar_pMH$bo!dDvZOgoU)1=Vx&!4JQt~9$%trSBYFCViFPKKmto-M`KCS9ygtWa4E5x zRWK8YZTYcODNZUH0w1}!S}YZdMGb%He3_mc^q2oadOzGBz;1eZvD2|By-%APA|(+WTGo+}XzR45H9hPtLYH&mJTvxfTtCfmWVm5L zEvdP9TR5RS0~GudDG%`=DV**FUvx{nMSM|ioA?r2yf{-zoYl%2|0_Hfo0*)B&+{)p zU@jNvdQ?&U35V0>=5USum#A5p|B~K1DzHR2xP^Iu|CBKLMCOSQhkgpDHak7h6rIVS zlitDBp+@INf`cac_+W6buF_o1uMwdU=3f$_j*4azTt=GUXWtE!`!b2ZB|D*$8(Hj= Q2XsoE`9h+tlb*ypN!uh% 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

24Z2Z)Q%_ z0WmBzmscLT1BG*$YXZDW>*27eX1ER`327=(-2lA^xr%^Ao;ii_4Bf^<@Px^=l0ntp zG-q#~Lb6b}R)H4)HJQpeO9;@cM29|38{nVR(gdUaJVO#?E!VibiEICZ;&)f-RnK`z z{KDDcS&%y*`8m!05kPeo=qNfBI*V|M!(jI=f)j)S3QH?%;t%#hA8s)~?iuKtRX;8z z@-u+#(O*;*7gJczOA;TWyQxwAcicvkLC0;l1r*3g#>~7uj`cbQQGXo#;y!zVa~ErP z9>8~N`t9^YG_`G{%+8dlO@=|lS}g5c&;$Gy91@mTyR{VNAk*TUz-fPNlVT2#o^)

O$@)%?&AN1k_wej{K!TuZO6#)K7 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 diff --git a/translater/__pycache__/settings.cpython-36.pyc b/translater/__pycache__/settings.cpython-36.pyc deleted file mode 100644 index e98f49460897b1c172b40e51c53fe938cd49ae37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4068 zcmZu!%~Ko66`vUmLZ1kPF*g2Uy^Fot#Ne;&dWko+G6+zu5EKJT(Ur>7pl-y#e8}A+ zdr>*L;2igyi>p$Vsy!t4{4;&s)82FPDX)8GS^})8?tcB=>wd4_`%TZ&vvRrczyJRF zm%q5jiBV#AG&~5zP$sN1~{JUiC6QZS8A&bIbm-s!;iAc*mqz*k> zJYiw5#tRX30tWn$4yyaj_UhLDW_`D@)2z3a*X!2c`ek0Lj+*WD!Tn2otGT(|YOKdn z>%iJ=Z1P;X)1Z=4%k8brx@Gaw%2wOj-Pv2&ZEm#(H(u>ETdT0GwYRfYUui6_Hg@aH zR%3N=d#%xKfMQ+fU6IaMD;tf~y%sE}A1pW9;P;R9)?iw(_Zy8LK-O#>49bdm(5UaA z>6Os$g#ig7%N-Eb3^4hrW}w10g$UBKAIKTd4rOE&LdMY4N*J(+_B)Xq22vT7H$g&O z$BU=8+M(|Tj`zx8@mPE#5wAP!k|bTY5k~uB zyG!D9VKX>#J;>zHyKBjoEw_6dxj{EJG?#F4h|cz&Y_QH;0T>S4I#b9E)aSQRAnGKnCz|O&&pVVx6)DP{#e#r;^pD zM@}aZPFiOyBK|OmD8Egd(+#@m27`$Oe`x{FFKjF?Y%VWYD8K9a$+`)#|2hr(y~K!^ zw_KKFM2bf?tyr$#A3dbp%8DGn$FoNv^_^%?J=k3RZsA~Y!Cy>`qU(*|jZ4Eo z65`n0QZ$|9dK92a{R%df`Y0?>CD|iIB$`PW7r}_i2|LE2(z*yil%jP6 zeY`Nl8M-#4hnPdvt8hc*oiOz4F5L_<@fgpiXk#dsAdR8o2+FuAP=pE!Kn#ru8e*Jc zC?O?&(3IdpB*LMzI7Aae)hiHTyf^|6G#-ONcp)JoP{Gjk5tV&6I!=|c5-E(EZs10P zJn6CS^7Cg;zaA7!amM~)a|+fT*KBWi8{x7y+s!v zeJt*O^Zb$L9xh@h`Z(PtZ`WLpq~DQ6{NzPPe2LOu28i#Wv6s*hSsy`dq@xTra0Z(n z3}iwTlf~ojbu@-^IR9QlSyAD@I4-Ij7;|_6zHpOVMt7fx%WH5~1aAJVoUnO#+2;3r zcRqCkPU=wN@a&t=>-(f;P#w(wCOS!VpkR|fF^aYVjZH%LPCL=w={I4tp_Bu&db?)u zVr@Uks=gobBc*mv2|YS;lcf`~0y;ZgJ! zd|MiRVn<0vB5^UZ#oigu*|tcRZGRBXNsslxv^aMhgT++d5$6&=F^VQnlLJDW<~%ut z&MRFKUGQC}bD$)>j=MWB<>R)^B5K?Jgh^_)dcmv|f7)s`u^LBCr#E3<`=lLu4@CbO zu`xGdqBjn@kkImn~_1`**M8ucQ41M0!fl#jE*HBet~_Mh_BJ0U@b558#q3(ZCy60Piv=S3%CN5%h-5$6Q> zsK_9_2HiiPu@ZDS-82eDA(MkgO2C6#z#oi#`{?PT$M9|l+|w!OQo1@qPYe1hJ`R;6 zTn1fkcwJ=n+#up+4+>2xa7jhhc@ZuI$36-@Oeimk%2Q2Te>f@0DpZO3z6+mfS%mU@ zpAlP%c@EawP`?nllih(zEA$8|33d=hP)&uW+-$bjws>CfJo1Kk@hTBIE)~UkIjh3P zM}5zR`^ydwPoUm{8v;Ywfo7dI4iqYf5PSC816S-wOyCCYguWjJHu#q=fj?#B$mx5L z-GOiEWIu3U_hDI5h%i1A(SV&XJJm`;QSO~~ZMawCYn48LSfR;uZugwdDOBg&JPF+Z zl}Gqc#aGl6UO5r{QW`58u4PnFv$t*lB|M)}`svZpl*p2;6ybhGr9HS-c1RZr8+wMy zaE=K4i>Evr$44TC7YA_LBv%G6ke>YpE;gv?K7~4-dl`fHPvTu*|A8)N6cqf4~1%RbAa`dmc#$_grLm)mLAA_0?D3X0(w9X76Tb|4rW4f9nOU19LYrF9L+@K9LvPy9M8n%oX8|_4i%GYsZ1)U z>S)WP|eVtbKly5%z?H0Gxx7)84b_9tS9xmbKh8(=`}6}i zKdj%cYd9a(AJ7MJKBhmYAH;b?e@H)s^KsqM59>pC^9g-eKZ2Z-`osEBoKNY;^bwp- z>&NvIIG@o^>ZfpiM6c#s`JDdk`ZM|rN{s23 z^jYMb*XQ)hIFIYE=nMKH?o8-c^sC63)UWB!;yk54r)O}!pub;#9_Net3;MU=JgsN- z7jb^Cp3|@6{EWV&>p0Kod3_n@OZtj_1Ls-2ps(UQr{C0zIA7M+^b*eR)64og&hz>$ z-N1Q4H}wk6i~5HC63$oj+xjNXSM@Euit{x+xDXirjyEwW1GB?HJE7r3VJEu@o| z%f+pga_RI0E+Ut6l^Z-)Zs}{oX**mjuhXfyC0yg^FQ! zODeljD%{%0XG^)YydBMzR#>K3>2LzHIMxQ`z$M)%;Q=yKI!#vP(HUYA0{x%p2L| z0v<>j8>MW1y|`i8?M8lS!!Qdk<+H_n$xhAZ*ULs_B3H>xEiR?`9r&BYuLr+p@G}oY z1A$7w3RpoaWW}w7mE4X!AFBmw!CI&muO(_pE4>=jgL-H?RBPA6tD)^cC9FsEs2ppsrqZwG3-D(zOEm6DvK-oDzQ@~vG1f$gAIwsWc8>$Ri1J)kv zu(j9PXYIG{vkqAITblKNHE2C(J!BoShPJz$dJng(ne{#>Zx7XmYey;vt!``BIStNKdpm~G%sJ}h^hnMS#vv}XMR0!@ZS1oK zx5Kq#Uf&+Ec3TIfZy&~2?3UC~e8q0-ev})j9J5BOhwz;vl@WaB2-?YZ9Y?y4Wv#x| z6MFBSKy9FMQu^k2<&>1$k2meMj-y3w+lktV%4zfvbB^KtQPgloT}y3`AYXcHo2`5l z{dfR5527FX?`oyNSu_@O-<8Gu%__>80h zUXgx8(g3kYKPqW}S)?D6G(auVk4qZh7U?G{PgrNHN32J!$E*v8J| zY5#k0Ju1ERB>H%_72gh{W%1g3(2@u4GDl^8T5)|)X6kOvQO?ZTlUDeRu<^s_%d^&# z`h&0IJ5b9(`JPzqEZP+WxaVwpO45fU{j{V3{E>f7(!-KJCg~%RJ}>EqB|Tnw%6boG zL()2HJ!L&@owLTQ^VYbP(2u^}hBvZxPh0Q7DhSmkYLnK4er$K3Hih#D&KHPAis#nG zY8O%Vymirf(wahj7gi!x*os(DE4C8hDyvOb#;vLC;72-Y@3r15tLvF-K+Eq7%mT)mfRJd4)oC$~c%Iar(7+;2TI5qP1mcFCGqeWo&FT_OYs z2HuF=`m1Y!dMmAIAb?Xj8=!N%TzV;QR5T;MvQf+#+VsSfM)0c*O_uV;%GPDT-(js% z))wby&uK~yweotUP%h<)T6v?gzELqpRk0(u zo!8cZR9GR?Yh}H#T*&M4+S>)*KyE32TO;Z)k7`ThvY{7Bxe71xm8B7_yezNeYc(m& z7Ar(zj%d>rtzc@ol2$0;#j35#Wkaifj5ag^Bs46Q>}*ieSB_ji`S@EF^}Xt?>PDAo z`qE9O4@Z!6dT??xx3*r)k9yzs)KgDs4{DQ}d1m9IH3#i#H*e>R6_Xu!J+Ez)ZX3Dv zb#!2%B%QImQCec(H`JpZ$?Aorigs3e`S3>erCf0%e|S_oHS)+&?XY=cWeFE2MjpjQ zCHqprl&i-cKiW`@>T>URxKb|Wja+Go6`dG4ftm)Fmko^Dpj_i}qkhTvU??$9bQE7S zHuANG%In{HqkNlRx0EXu@BT>`LZK4yJ%h(NUpc6Q4K>~_l=Sj#DJ4^mC9gep=2)?C zeMHYy8VfI}WkC8QTPbHNM(H{y`;hydvu@(3b~}#=oHwN6v;K>F_LkRePP5R8vrR30 zd(R&^;u}t9_Kaah)TfTyRBgzt7{j9t3l8_xi13SzgO~74n;9rkUDMeq?0?leCgI2p3jzh0;-6V&p1@RHjz9 zT5Ei+-c4>(rU;c}B(WL@CR7m(J!#~OEp3Qoq;@`U+{_pATiQ(Sdc8IyU)eB999?bb zdbwOY>VYWq&-Aj)$D>-VXyS9FsJy@jsT#iNT|q6W5wNPErgsUq*g?)G0YH5tKB*Pl z8}XXzysL6r|9ao$)I=Eg?goN*2vF2(8oQziqSo83&`)-`Tm;~edDJlQ#qyGx$hQT5 zsnW7MOiV6-pX>Fx42WQIVdXc08r8bG>>#ou&b<-bJ5qmng`gXVtGT$25%cZ|=<+@W z{8e_Tn9mu)IbqdsuKH)_#N6b9HaoYdp`=Wx{H=`wmRKH87_F_`&gbi(pIyUsg0GjQ z>Y-H^SpWc-fZ_Efn+`*l&6!z+)poStwow2smU`XNz_+G0J$w1e;(}ZA`76`jN3j|5 znIsdi>e-|X6XS8ayn&Y8$h{=cqgW{2(Fxzc@K@Wd^tdkXAZxA$pBkhC!wzAmvZO=>59f?Rmx?IZE3|Jrbt%d zJOEK=KZO}awVU~^+d#IcWMyM5U#gg(9!h9)xuJql5(}d*-VOB)zo>z5 zatgT!ksx$P?zF7xMj8E|Re<@$5pB@H_-Bdl2ZT^V!D-|0@ zUenf%@=FDXhqS`7cBGC8j&QQDuj^By;nf&L7aHC5)jO!!x7`4shkG@E;v9kdcm4Jj z)bZPXIcjctxt+?dXTjT;AXR3oopZv9j9$$d1rjXPqnUCkPmpA+mCXuP^hMBh7&gqQ z%6b`;ina&<4gwdHL*9PiChKfMbB-EjwZYstt$i zB$}XRv>j86bLV@<0psuX-l^e)-Q{30y#Og#rEF{&lyceaPPQSkFgv}DL{{aQc1q8i zg%$L7Zp)74N~Mil(QeOgu7hH87MPuKrVSQg_24*=4(F_5ySOenKm454$Vl~JDdjM0 zsv4&}mgdW&M@LRA*8pg+0(7%_APcmU1`R4#3-*}+*mxsoqumy2MRoz{N&X*+J@mw~Wy zcI>5c5s1KUTgt8HmI@UzZNn*V3Mu-?PPkNw9mZ-h9>y#)j`DDfhY=o*^Kb$OyUl3{ z38HF*kP1gW7Q|hC+){ZBQ_?i;;O*f{b~{K4;C#q>@y(_kUN5iP(G75}h8-baYIL&F z@Quov9X4+jA!WW*l(Gi2CIKVHyP@KW9hsh;nu9>PfUoJVlS;z3xidQksJ@n~*r9dZ zPT=$PEGJy3Y}ye5TRXCf|zs4P)6(0UEi( z*dyPszLo8%(4r{oBU&(lYwQH6SR{Z=+DZ2k>Ziszlp-!$7rNT+Zk~52y;3Y+zkpRS zFRLO}EUet9pgwoSU}d{=Y^-2h$gS6}XUmrWCheqq-?ZcF`7#JhDBB!L#og}ML$z9%yv!!xH76Z60yNwS!7}`!qO+d~nRe}7`ZfBl{ku#iD zS%r*MTH#?khI|P5fVxiWSx(+enj{B@oL9zaPJ??RvM{ie9p(y4V2-Lv5}1{$0xq>o zn?owe>X1^zVwfQ)ujWn%MnFK6t`LjEJFk$B^NT3)3UiiN_i8A(Kavi|f+6{r zinytch{|a^rem=n{)H34bTAQ2;hC;rA`(GfB)C7?-+L&W2&cOnpV@hJ5N}L}Bf(S% zzcA|HFVcbBL?{(b;he(#R4^4!;7;SeShNfGJ0d-3Ur#g?>`1XK^?zOAF4WK!3ZX^m zP$IS$Z9~1h^8IV9)4fVW@HN3iD2=B>_`0rWD%gYi(mPtg`!TjN)Di4J$uxck!p8rC z9$gCKz`rDZq(R2#5z; zaXYm^(EVoBu>T;@bEDyKq!_0Ee>R4#|eZsN|j8!GF>XnZmeYzcpNahRLCTmTEBs$EGl*Q z6zjQ-!*8O2W(N`h3|@bz3xn7b?1{_0B@P__*dmw(s6kvsVpF#Q7{uo>Bta{cM4nGt35Jt3jFts9|O5Ch}LqtC3n<4_i@ma|GRtQcxczFw{{Cg9KZds1+{+p)ySP zx;_S!`AmN6D)lbX&zT5EB9m%86vHtZTPzu$Mk|dcaImBDC@6W>V1lUw?Of8)q3p{H z3?yg~kyUh{@gY9;Lp(?)$4JSRR*e6R6>-3o{s&Ojh0X%zn>+Sd6#uf8-Le0#Ey!0NfjBo`VYVjELTVK2$T8-&RSTDq3 z-w@E-IrCQ&ST8u&A{eY7biVBDHY)iP=H5urIrSm1JDX#umY=bD?+dZGY*Q2$#tg{0{{iMM2&I1hfm!4E(f^vV&F3XCeuEpk_G|`Jn?O90RkRVn=P+F zm0Yau9UH%>9pg=HT(}cc!{BNcA>yg_u?}sDjI=feCQf^K?Nkk89>1LzI_}Ldx=KOH zN3VhR$9$q3!qa2YO};{v;Z}v{!de1HMA?sX@P~8Cnj<0%5Mq#p*6_xYIL> z^J9zCbF@k6#>{y)b#!2dwSb{N#n{OOw?Bh`)Umob{@x z_BY&cYfe@7-0g`JWCT&gYyLXkY{$W&7`c_a%t3)?lZH_?ggaO8J_b$+T#5jD0baui zAH*kRo@rZys0rYnT}G(RGeErnC*w0L(Ft1w@b_vUd8=unZ=g^FU11(XA|Nycsg_tM z1`32&JQV`%0VJ>=Q=h27;1f$U#N;2*L>qoG@jrkB?8L&f6T{R>Ar0sv={BUJPCC80 zC=+w0)=o@rwd0AD6{BStuzzwp2|EmxAA!Y=$`3W7Fb?)MpfyCS6Vgvcw*u%B-lWvSj7JZG+`j?4?{Qwr{w@*W>>aKF|0l4nBy zmDSI&7IavvJcBhZ5q0wq1}lQXxd_ewgu~_^S|I?8->W5wz%eSxRUqt}F(W1vm!Ne4 zASt;H!OkvRYs0t#g_B~dr}PN1)oK`{ggRCug7~ArQ3QrD+>7eCdM)sw0L)0^dg9dt zP=9P21jKfbcZjK83*5o{!P`G}D`q8(&jU~;tTsK#8UgM=t=-`nz)lDF6YvEv*HEUt zRT*cd0JqhtGvjyg`PJRpw5wCUKrw|2;}qopY!IlnFF0B~jda-(^Z3Uuq{OQiKU2eD z1(5lL0T@TYL=rdvopT2ikAdazy`ftXpw^&(Jz0%Fj-ingb{L8#J1QgzMSd{+ea1L|^Nd~9a&tkUjj zCy!Kzk#}Ko?(*Ei*%R*VQ)ji4NKeg=jc4a4r^emkm_sLjk;R0v{kKRx%U(N#M4*kpjNlB6Ot24(O&?N;UM{-CSydx#RCf3{e&!t<3V~Xf9g9wVsTNrY)S{b*1m_(9dlUm~jjRR% z4hBGyku?geh-Klefoq&pguw?vn8m$v=cHU5WMfd#{-oA#okQoruKHDUIpHR{83Z6| z4uDlc$68^4naHg1+i1@YK()Y@?!`d>RZk7D9dAt#SbcB!R+=EH-XFtZ*57jXT)T3}y7kx#I{@Ds4K6UDXyOT!Tv)66c?ijdl8d7k0m3FrGczPJr$jYVB? zYXC9-0eNa25G7|s7VE)@KV+5~eKtT4YbL=Yo1RH7Lo6hUg68)BE*|_5wtoPL0Kh;> zeq??r#~7eQBV@3YH|`|+y>Ta!h8;V{_1xy8GWH{oXh3Qq5{wY}El3(*_4<6c7Olmw zbZ{3y150BYw#>IWoW&3Zdpqw)`0Yq$Zgz4wVkf10*d=xwKL$NjSSggKs;Vd2)z;ph>F5K9~8oF5fp%h!Hh*sq)9+4n5#G^SQF-dl6L;9X@KO|Hkd40 zNDDU`BR89SiA;u4<7h69rS?-BU%2XV6+S^urdt)RE03~J&Oz}5sNF^(Cg<$+jpgBX zMY{95g)udL11Ts3u zZe%Ecf+C8%P)ni1b13w49ISpM0ukLrT>uUw3xNd$`~bvMLYTt1at1<%(xN|1a2C9_EZuHljSQtSQcL#Q82yx= ztfHZqX&}brDhi$?Xo5vwjWLCJ$ue;~q3%Os=vdo_D@md{ScDJOBAa^!O7>uuMpjc5 zP`=6{{MNH#4<1xj>p=bCI^57gg9CCS|+*jWID5X}LB;um+nMbycAy z>iQPvGmQ?s*J{q6W9Q&A;=`ky#niL&2~_~LJj%+C23W94odtMs%wu<0?Yy%pJ&Pb$ z$>7@1_#5FhTT0JnBFM-ZoR1(B>kDNQ8KQbNE;6;nLzM@vAhqU9re5a3!eKb3RuxgS zT3SEF)Ia0lpYzZ(_12L08=QJQNCeswKmnu}_sVg9(BOS<0ums4K=1Roz}g9K9udHX z$wS199}q-eU>^|o&47^tav(~;1SG;1GGS0?%Do^H6lnm74uDz^V!fD@8%o&72RvHR6@xWK~#iPuGCfp!O?HU@qC9ceG#zJY|TFf z`4Ghvj^#Enh37@TZNh5K(dN?BYmL@supYtG0g3M^y)lnybaz`Df))FT6OU;(-+TPV zv9)8*w6w0qlOWj~eX=$*4e)kp0o*Z7FflR5=Vlic=dX;5^hRMhWfVR8vs z2ZN^M;*G-6P3SP8>;|ay#z9F*$&A?$0nt7Iec})bQIU`uKhJ9Z1c%|2@!d=lQybrp zL#E5^1TkuWBsD|*rKs|aA3*^-jLS^7H+*g}J6N!jUT*Vp%HYXA;&RfE2&742^?|11 zIW6Zt$isU=J&=xf1Pzv6651OHo@v!0h{;C6>NGx05i5Lth<+enLK;$Rq#<`g8WS1m zq@uwqcBY&>nYnQ#P`+0q8Vnb9R&-%z?)=ycBrcaG7w4aw z7c1#|Rp%`#THfre?rlR#w{J-Mx2VVMpJrP@r@uTP$w3!m!DdLj!-QjJTc;*xCjr)_ z3*Ys7$gs3%Ke?rQj;$k`-Px+k5Pr?v`&lK%-TCOu^o5Iy<~?6qm-y~{eDZx)rY~Qb zoLy{LLu<5B$7|>W6JCNODTft0#*jc6Bd`LPg-a=~D`+wtGKBbsZcJqlcPZlgy8uxQ zp}++Zh-mwD=6w$jBJO^Jsqf|C`*QV`c61!**` z2#|^+MRgcdZAgI!Kq`q;Qc@|TQj%&z3ZBHc3$1Gnf-a=mk!qJz2T~o9>O`s&upO#w zs{>Fz4hSCuxj)@O-o>iY9Yb`8P;VXi6IrYDyr!qQEpnZ420l zaD}=i2>%i41Cj;vHxm-z`?b@_8dF~MCy8OPSXT@FdE*M+Hv#yluvQN~;R*Fop zjxHK%{af=`ZA}t+gJ1w)@JMRM|iZ3Fu=ELG}n?#s`C?1X2)ed=R1)3$P01E;{9K-@Hs2rB@EZkPkxiVOS^| zlCl-2EQRqF%0leo)Cs{1%7)GFkrJ^=9LgO+J+=V?d6fSNq#-{Q>1fpaBucaaUa2;s z9`p04526^<5;1=Zchi-2n*HvhGES93d(5w(6a+;m7*XXrD1OECc7Ho7-!I>GS3ZUAfJJ~@6%Y0(BYbEmue&f~3U7Y5u^Qf)a9$f~ zkoUWA$>*Ksw#kKK-xzoO>TdLif|KlK4c-la_i)Rq9&Ee;k6hl%!K0lrnetzzIB%>cDwFs%?;Rp-Z7JXo_z=?Cue*U!y8n0IUUQ3 zdaGe`_QzOx%IwdBGIp$BvUPTRdQKS%Zn6-;j?#Vzw26vV(e7rqWZgz(5hTHucfpek zPT0APB3uVW!6R;ZE-u&cPV#Vuhf_Q>LLuWZdO}TBzrCFN4 zY{x1B-))ERR8pm!IyzQUUcRKf{5CINQcixmlbhg~d1!aq3f+vmDSUnU$-w2ntrwxg zL0ayyx6)P^rMjSVYUh>cdAgwgS%gNnL+pPp!d?vl_w+dQO`SS}?1i$_Ju%(69a`=3 z~z=6Cz@yWa@jdI`1uvgomX0fGBeIan(rd|%IMPp#ML1i*gU2^*L4lk!uat=vOaJ3gL>sd|fUGN>~L#i9U5Zd3f+Qk@}dM{GU--Ta4 ze!KA-z;6$Jd-2xUvLC@JhJmS9R3|dWs+>jKI$k1`Q35Xtare z;>bf3gwAfI^)?I*y1ZJmXm!w~e(@?)=R&52`n*p8Vxo&AbUvC8)`IsK(E&!^LZ|1U z_yfV6bGk#52u2NcHTMt0DX8vYFH+R91e0)yeFSw_P6CxdsO!~%ufMCX3);JShshIS z=i>6SH|Zdt?WmNlGdS;Lu@HJtI+FgyH!aR`&e_yZ2m zVWx;O?U;NhJdjHC)rUipkf(M;!WAS4ql|JvH@?8KLAcs%*} zjs8QZ+@|}d2ZM}<`MyVZc$A07csRwwX&%n-aGZw|Je=g=C=bVY7{Ot9m(n$myUFyr zUg{=?UV+pMJnoh2x@6L0S`30Rye>K=r=>pYVC|}AIK29=oaZ_9{m=8-_&s*jzvriPxvl1xu+bUi?aU?RSl3mss$i_e z_b{nm<^rApc8~y+7g60`Vnj{qUjiwbBGcwD7U~fzJ9=e6PcCd6($Rj{-Sr0tNe zIHsfo%gh7umcj1i>trG}=5;TLW|8*Xh9-g0ml3wjjtp zW%EapZ94!fNflcdq#N^L6$pDknh{Gn2HU_RFhPU=z$&!)Y=IRNffqzs6lu`}TkNnB z)n}nx@frJx;u83y6`Fo$Sf_eu9-%47iPTLA{c2HH+5zFD-R9U4mJxvnm%GFhjzMJz z>VOWjh&OiA@Azg%_(b)I3*dOvvy7LRzggT;Y-p~4RQBcu$sDH#R_%kF`pXchuA zy>7^8(0uP_98+EIsr(tf#vk;P3ZfTsWrUz5E-8TP-{YY>sbl&@vWb{gNYBb6Ua&s%DN3#kb%JQ zCCn)e)08-kRP^-Ci1BeNg}Co&I%C#SddF%)MSr(ad;_E%ZF;vA@27&XP45AH3nv#i zOeLWongFQ(C{&Q`+uMcmNOzq6@?mq$q7#76c$Uh z9D=+un7ZU4N@mX7q6`M1eL%~)7La0Cohu4isp#(!Z3-l7UWJu~;|mCVbwlFGfs!p9 zgBjf5g6kVZDhl-aTA?y1;qpo(ccnfzY#=oC5)x4xG%Lj{4CPLoC=J4mvdD)Z1|;RaG!Q^6T2cA}(Qb&WKP+(eU9TbUUF^EvUXl#~&m zD}sPnOG34JIH7^yrVLUD?t`??#uC6%Bhzjkl&g@#!h6n83KNDEN%9AHSg@-@j2jm) z>Ue1)zpkjtCJOvV2qo|fFhE1~2pg*+KKjE1wWPw+ep?meA-?w$IN0%(Vy+69UX2gE zf9zQ1h2d&gd;a8`e8;R^M}z!ifiF0VD+N5h#F2vDUPMP%0Ud6IWPgB=^cMC95Yo+K zGZ=?}@|V3E@OdI*7A4oWfw5g7|8=mq4;2f`KS%;3G1FSx_G%;}S04{BLj!ua144 ztx2VZ?=z@(6YZg5heC{E0%sSoj)c!T!v-mHNs;xF08;jqPatK-3?;T7XZCOK;7RS2 zO>$jGCrW_-&LWHao_QXoSw|dnhsgektBpEZ?alBG7r5~X?qpI5eo+>XQIU7hY2wb3 zNx6Y|;AS5Nc*-DNo?0tAyj!GQtkF-ge!up z40fo%03rGwwGE(s5!(erDG%Er>_8FJHAeytQCBH{}DZV*Kz4hj}(i!^A}E~qgWYXlKY6n#rUA|j%s#f6Vz z#l56|VL1wSH@?GzOI);Eq#PUb91cJ{pj3fa=%>@8!$A`{%1M(s2azMRD?N9l%%jK= zk7g^pLXWC&^{14PFC_QqG!;&r2E93rHfgOuH1nNEWQYX6ejbrRZvZSaTSItd20x-~ zMy@#;9wuX)WnX;Eao-Ey|LjrixuaU<1vkE+JdIj%z#*)H0Nt2l&*R4c42fs6bINBZ z@tl{+IH}=C#&IhW&fR#D51!@WDIWd>s_?JqYjNL zOa|d6kRaVv46LEsK@WgQ&?9hS6ZtK*JfNr|o&!~Ma|i)jg3xUPi1$F*K;jCQqWNr+fJ_VTtkR>9qLi*+(ap2GugkUQPOlvjjWcRpEHHmxfm-TUg zIBYB-q>5uj-!Pr>(1^3{x|SPntUG(C8vG5qjX1oF=1S!5%69}5>v$c56pCQ+ZgWfI zan5I|h@C?uMEozEh1?ObBtX5RxG!E?oiTCG7%`$1xBtIq+Xmym>x;33;4ht|V^I88C+7GIX;Q z_Gj=>a2}N$1Cp&FkRzgVl|k3o?bmZf_7+0rptTZ40(dHTbGR*o2rq^8tq~L26@+>- zZg6FEu{j{B0}4N|r3y9tI&Rp}oM9kpXcQzTLXG|#WDR$~wcD8)b_k*`)&eiFLN%XB zNfbKeoJjeE0oP&Jz?81Dotfx$Hi!`(8RW2_Z{B;6LaVHX)9Hji=X&i&3j%EblvuBb z?E|Mqn%eKh&C-q=v#-Hl%uKQn_nur{GHl}1M?{2X^GtR=YR)qo!uf>txTD2MIHjS}W$D*K9}1z4WMeLLz*xy} zz6yi0p=mv@U`z>J?kACkW`oe65|eyzGTh8W#|A+kIRqEn10sUx7vGxBN*6t9By<3t zxb>@k7cOoO(ojQCZ-=E#T<;){rZfwBAGeOtcdw+x@iw0A)d%Q9gNQ})jf$_U^i_6& z&)XxLowQZ@E4v+sg*4z!TEr83bC<9brkuSdu(IH&f&j{hXsxu5fafYEzX%rmA^An1 zf4j`m6>QfrMSLwQkQro6auQ2b_KomNgWXy^t^(7ku!P4KB-pG}CeKPujMNE>b8ZRX z1qm1GzaYDk97pVA2#hNQXg>hZ1ZJsLJ8-7a(@ot{{)$vlHfxg!RT@9q<>{I*p)8b9 ze4mOFU0&W1ADT->K73SzrbShXT~FRYk9e>Qh!lUG=@5dy!o-LQ5npo)x`w#zM)`JQ z1oR^?7Feo`LQeyf&s|sWeq_}9()n8TI2_zrZ_|t4R(JF5;vX#!&sO`7966#*&Q54^ zQ`*e*`T4Q==QLz_3p|X4P1=Y;5_3Ne0(|>`5`mNvcOwK9Ya@TAV6pN9H;RN#4r3Mu zVd$d`zJ$sS`C#!unaj=y(5#^qG!`VG!bb(av5oxaXb$-q1eb^Vl6kYKrAO;6ZQVDA z+`c)W`i2}V)Tj|1bfmb#0#vynJ-!w^3M?fo0%4}(HZM?I+zZi;E|3#cX(0G!%l3@0 zJscPac!O0&cD#%j5hIn&inu?jSO`Hx&=$7Ij$SL2rYG#S2{PnrN!l@7AY8R^5Ve4p zRpH6(=wcQoZwPDz2jX(k;Ah$48RDjE1-){knm<1|{|u}vpVMZ>&TH4EXD8;aX)irC za%SYwkrSGRy%LU{(k8H|0A^sJF{)jH6+uBe&vh{FkQ)FLxIspgibGw^@>uimpM5eV zSvo3Ve3bpfIO~{TZhVPhn@gthfQT*K*eKmJjZxler)X5ILXRe* zq*w>^2&qs%NB}J~(85F&(Vrrba90@RLdJ*j8gFfoJ>~RV!q4OY>F}%DoFei5!c(=- z=Hue-dO|p+Fkna@;~&sO466qsR`}4tt#un~2I5vA%H@yU zK(m2&MgTl4RG8d+H?qjw%dE1a^0CSZc^lo@G9t-qc;tDGEEy`Oo-uw(5RP~xyyr1o zgzhM(M(G3+n@5x}G0pctjxlUazxW~|-iL*tE+kfDBziCk^j!~Ezxz4H+yIZV1aQUO zA|d1?l?rZ1mX0!0D7NB!ij8~<*aaN{v31#XLOtxEIAI((GFafy`f{|L>K%4QN(y?I z1#AuDD}~So^&Uh>zmfv3P3-9%lq$M_G!RF03g&nraCW0Z()h8L%p0J+Fo)smc}I*A z&HhU84(97?hy-v4+9d?F8A1*TQs}wvh>@c?iX0HNuhHx=EM;aevq8AhM3E#YW;^10 zAeJcl^$r+Z3-Ph~0yhznqMkFroai}v8pY_Dbcb;+>gBu~uUr!4Ks?_8VeKpD<#^=~ zOAV2?U}$tMV5QE1*k%aMTHEGN!kh`p597m7Zy?Tw9)FB}QN9*^>)UwiD==DO>tTeY zC-lU30zyET8v9V-LqV_uVXy-!C}G0b9W=zaA5f04bQ=4GrlEicA?hVb^eBn+l@yU>v)<++S{6fLT0NRbTE;G3gxe<^V28>Y%PytI69q z$|3n1s9$f*?ARuy1^KHg&rVNxPmzW_;y}y8rse}}SgpD1`C@&8ubo9fPiRB11pvv8 z6mBUpcY;o^nyxBskc5>kKoYO67N2er97Ce~}bl-tCHdhp}(Zh<0o zzWJz3KE=0Tc8IJDU3k55H=rHg>ntQJNFfBV;U%a%^t$X*AjG3Xp(j;`Wu zNR11FV|;)(jP$qhGE&YSDz830>(N-q72G7e*%4e&W_<_FJbJK~X<#FjhEf=!m^-j~ z;GNx!*c(#uzCd!w3%z$i^F)y@@*m=x<@HiRP^S=)i6@J>HHey?`d37ql+Fc0)%zQE zVDPhUsw`NV2s+&~EPhpuhi~WM6&}8WhY#XVJ$p^)WZ%Ht2E$5IZf}}Xe!<-g>tl!A zHPt>i)%TCPDo{)rN-Nx1;s_s|ae%qcs5{)6_w-SXv($Gf)6ly{+@?Rqr;1Hot|HW~ z@e7iH9g8Yk#;-~m5u%IO{RdJv7(gmV5t7%Usj=hN#^z@c$4^;8>{eZ0@8`oPnCWbq zNVMlOO2&7gcQTCrPcFit^zA6rUiwLOI;BphGjS9GcVcF`uR|2=u`3LooMGgC+`|qm zbv_XL-3uR>iEglPCc%{}sU$*MV@m;MreKlerjdTuQ= zt2o@|g!us^0tX_{(9qGu`yobr4|osf7wO0S2=4mwLVF{9p^k966I!1ZyvTtl6}!|F zG3Gs=O+;cX%0Xj<$n$mQx_V05_(y8np)WtZ)W(M5Zy$a=_>JRd{ut)Fl`{J%-&E2~ zm@ZuOcKZ6WKiB4Y*^(PST_;OSLlrG7M!p1w8hAoV_*SW^m@)~HldpiIh zA6Rl0*QuH2v*+Ru(R$|VGJc5Qt8cAs{_o&b=ZD)SUr1KTLuzQ zNmsD(Hm+YmNLO6LN=0&E7Y@6B;}fh!PtjsqK_$z1)YG`4i)P|C@j3JtmTOtubDeb%yI$Pt;OiI!S z6iKYdt%nejt*``1C&N2=mf5`7P#H5^S&cT~#^OfoTtRoRftI~v9AL^@mY@2KJtil#(6@~>jN9ZfF!+%9v+kher0m@`=L7;O410|!0 zCVC_hfa!8!WdqV9%BQ4D96}FTpPPultq8Hd)lH+ZC5p3gGj?+JHXD)Oj1 z-6S@!w0`k6Tt4cK!`U*nKY`$Vgu8YPd0oW)u^ayG-Rt+*TiFpM}y#vU3; z$I(eN4ex%xT6Y@zHi16g;=8;K#rW>@-W7KTtjC5`;XNXowR+6l&hn@}DFwFF|x zk%Mw3V-mXxWUrE0ZOGj&9>o3m9Qx+H(V*!<;%+)k z|7)rqjl%T}u1N2loH)uQ60nF&oB@kiwb+!k*^Ax_U(_C=YDtw={0j$Eycz0~iWM>& zq@ifD>G)tC2RQ;733{pt<-rC54|}Y8t#EedyH^LwYfvj}{bY+@T8Fb2bMVlm>K9G( zs$&~A)D;oCFtZWZ~9yhUw}|KN^&l<^ol(77${ zg>W%k+K{~=8-xmVaEp;0g_jQnm-3<%)yhjt@OMG^YR@9D7C@H_!Lo??r)Cj876wvw&{!Nk?9*q6-iVqI z1M~*=W8;k*qUDKTJ?g{z ze1UIem`=06!#vQgwAKEZY9u4niD5TO^m2XUGNOAr!mOBLpPp&wjNEcJAGgC8Ry&N_ znLcOUia0*&erAW0aQ1=~t4e62+>ti^FeR=Ovg73s1O+PrhAb<>*p8~rB*)?2h!Q>=h;g&1}AkBtknJfyfLHcff zm~H z!B+HJNohe+ZwJGYly~mB1DQJN-SuRkbbylPluLX-DF0u2F&j=p*d^$YVzCS_K)2>b=78g4smiv8u=d9;B+ zf?0^Dg&jU7!}r&5=E)He>;e}%?A4aWxR7W!cX=f(bod&#c0GI)cvIp)NGl+p_Z!|d zB2G83d)+Yb)QC1u@UA{#$HUqgut!S;cm~!VIX$9Xlg*Z;!|+AwD+Kon>K%4IXv()0 ztk-$(=mXtQ_P%fQ56|HSqO0+GbsSu_%6;2A zn`AA`H|+rp z_f`H1*(+qQu7kx|LT{)SL)J1qfe@n8*w&}sLd7uqpML9id!+#)oY}r}sx*P8I)w3_ z_9lAs!!0LyD|vwX-~y~=F+da#_>HLRo?lAuLMj_SwcO2be82?n%LGI%Y;n$D_htks z_pI_YP?i{PS2^Jd%|>7#B~kPbk2!mC9QG>ngMoMZpO~B!abB5dwV}XJQ1OX7eSFCWlsiF6byTP(HbX9!fHE@=r*v)`$@|tp!cSlPtUAL>e z8Wetf_p?v%c>{{WATVU%g4^2^t~xzjJw7%wqs^UvFM=E{U~evMdQ~4m#-|2 zUL8a5`SUZA6Vv02h!2}i(JfYAAS$O5vPWbLNwbgEcU$gpc4^XRj^xQA5Ch z9sAz<^_>uX(NW+j3B1p(ki>Vxj;VQ5-FJTO%IpM&bpij6_hD=^* zdaMg^CkLxz#(VVQ>&9=?DVAZCk%EB#Tv>~$Vq<>3ww|1%HN#LCuqnNHUSdIIK; zv)BR}5*j%0sfCik)_lBJHr3{nf62%GA0GY+hfJ3rT(J9~LB?^GK7(x%H$xHF8SG-O zQbw6gq<;>!hj6|BLdGvL_v5VhQ#>r;@KFjwK8!@*F@&Lj_(L52aPFXJ1Og9w_^X&< z*mDKus|f_ONQ6@`OO<_#!W|+!K~%#C#3qP2M$=YqR?4d``Ncv|6GIq6Q&vO_KoAW% zha;$m|6(DkqC;>Tq~N44)EAVNc_x$;n-DCG<7a*m2SgtWAQ~35dN7<67eN4~bJ)@g zx!j;Ci#=ChiUxxW`hUP%gyIpzX@%cESlH4JBMw#^ViO+Wn+Bl>_VeXlELi|KFAt%{ zv)H~0wJ7fv=#0I4%;CmEY4Kl4V~Yuf6OZo>tafm3VCqc~2iDC)Y_1)7U2dN7Z!6sh z!9j1F_%{9PQ(&&!s(%RTwv?xQ5A?f7XWxC9E43q+2u<1@L@Jn*bT6~G0# z0E7-jt(_+aPQGW{<9p_mY2T378>DM0X1=(r=ohF2N_YgpNRy& zMWrI!2S{}~l(Z7)pg|8U42}$k)KV4q-u8wjOH}2%V{gH2j_?eI;O0z?>%( zHhzdV>X206A7zUQk_xOOv}$rvv-=Uo2QvnNeBF5?5qGdlojCRplr@Ll;+Go#2VQ4K z33p%^!_z731%490Q_a%WUq{L3i10^H7o1bE^cnax7LG*H;SR*a3Bj)z!9-;FcfsG7 zKn4E*CJa8i6ybCDkY6ZMm_*J*0>s$dLG?P)a$BeCKJ5Ot zv7*TuG|Y3EQ!ax>l;u+S-cs}}AAFeyNm!G=_1+DSwan5>%VGWCGABj_Txsqb$i#S2 zHpDu!x&ECkmA5GCK#UN4Rjx|kXYF)DsIYWHh_G}+XfWf~@ZfOF4p$57hG!OX?iQwlAdCod&Dk*EIsid=t zno7zFy44T!8V34}SASE)9PWH4^Mk2gHx71Wr`k~Ix&gl(5u{?L71*k@4)o~GET5Q_uHavbi+d1uf@zOSr8=v!x2(RQer`&KG$2 zzj*k+ap1O$O_M`_v}}$SHhu|3GHt&18NbUXn`XoRj=WEDHYhigy#S~~Fv#Q2;5`q3 zl78|g!^b!oKH73JSlpBaQvs1%{ZoPFt&OC8+=#xkKy-5osh@{&t9f%(CR{;XML@6p^r29 zAd4n<+wk0T?sLz*v*$AIbD6jIoPuL5Ctsv_^2xl5%Dgig`Hz+}kF43}IP*lQnc5o~ z3J-;aVe>+C z8M8bK`rVBU#(k@G#1BUuP;1Ft1^q48aKmZ1#uh>i*Vss?;Tka~8m_UaP{TF07HYVL zn@Phpwi#-;#%4ou4b>#Sg4T$`JvmakO3y=>=4eFLq2h<>4>!E=jMZmy*WKHWHT$rq zjA%u(e@mr$&UbizFw;JRMZiH(=dtz8-zCT*vb>05Q*1IMxuN=?pkOF4?B=xm!^ zSR9*Q%nBL&CJ|mW^uRHh)Ya~5bhm{ClILw}{45G6viY}|qQK%!!o4>+5#PjI4ZO+8 z`eqUb@!q97pj_C@kp&P_%=;&hk!eRG@fMB|fIN-A!J~^`V5S@2?RzzDH$&zkYWM=z zM-LK#Bu%Y5Xchnh7$ye04BmGPp?~q|Kl;Ltub)j_)6RL0acnJrLh!zU1fjL4-NF09 z_8IG7a}xwC95}Ilir_;*24m+BSwBGJuqMX(z#5Ttr0y}&1NVprY3$5UMA61IT;ZH+ z#Lvbx$Z3>B)NG^`7C^i^x2{|Juc;Vt9l0-hGuoL2err`%efD>8#wwwU>`3pqqf#t` z>F7mQP@e?gO@b2KwW+lV3E-7-6rX<2e_{=%W8VGp@X*Gx3LW8j3%Nd5F1B&r*xH+(29M$Hh7cP#; z%TM59vf*M1`x?17M;_trshPQkobmC-5|fvGwLdYc;o4UK8PkjM{5a}i3msuKJoF?x zEBRh2eEDpPLd?cj&dgm~oWoX8vvaENMzzb6^NT2t4?zhxIX^aW$=x^iEaERZrrP+L z`i<H%OTO4#^&%xofEZz3-U zc&td*G-8NBXtDtDG-#Z&(3}+;$nxALPPU z;eiS<9Rg3)5(qO|fvr#smPxWn`b|1Nd_v_QPz>yl;0}O*onle-v#N}2E%3AT`XDNd zOHj=OfMEh5Md|-a!5yrpn6E;G;vR?>_bCv`@Q?)wleqP$s=fRxUhQo8UbiGHZkp?F zyG#89#&>%Mg7MI`JET|XaUhhPPj%eoDW^?> zY`ibNhTuO$AP5b_@qv|=?9~`W5LIr10H0w9USW5pcdIYr({BVz-zTMEM^;N?++MX1 zf(Sujt2J!5p!d3=e)ItbDb@Gs`}O)g0VCU=Oy68YR3cLY`W%c|!QpsMQ7AGz40}U8HqxyXBO^CS2TXD{8S6 z{F;F>!zy5^Jn{3m*MTPvpxrFj0l(!=i~wxq^zZ=YBl5d9Z-@)di`;&}dDCa%#oTi< zQtRbB-8^sg0-cZ2cI}O@q2AX8|M8ys+i}&+StWI%1(&@!_D1N|7q7ue@YZM1^U2jt zIOlZf8sD!!03moc1kDsRr}e>Y+VOSc&AfV$S2EgZnI8wOcK>+X`m<|l1M-J*3}L58 zSbwNvTCOS^^S`q=-)*kMM1-{fV}y`(7t~I98;ns%p}OTDViQp=$yXTU*2!<;bpF)~ zy5TIE=?8yxJ7@^d1r=pINT%}G>a3`(<1#DpmsJZZ0T{wKP7l&Wz$KeO} z;PA?R94_CF!{dWs+)`X)5{|&M3u$_$Ky9xWlqP#KXsU_zoUwJp4EgnS_K{Bxi_dGP?2ms2#Cm@+)vkW=tT+ za~XzFxI`9ea~B8+qF-VKT`H<8#>Rk7x&*B`%-@YniW#Ov91^9r9bpEn>0!QR2P@6% zv4E;ha^jFn3?vc$Q?x7$E7(sD-C$qzoNPVUADfUf6t=jRg1839$Prkq(?b}#nCO8h zXs~eITemS4i=<)a&M2^;)lfHgLP!S(pu3@uF(cq`Z-ai(>GVZ9P}6}vgRS#~kYs4l zQboy8ldgj{0FKYV`khwez(Sy1NSnQ=azNiwS}QE&Th_|$rFPaFbH0X@ z*q}<|E2PB~Z%M1!)^w{{-TF#rT0DWx^LDm_?7I6D`i?XwzVBKGTt*0}`ZS(GdY6 zeN4wr`2kAsAOTA75H_}FuTt{HKcEH)@g(fqCdd%%`w-P-qjzo*kC0>_+4Zn^ntuks z;D_P*5~5m{cU6>OkpHhDgp=eT)L&c=Nf@QX=0$OHIaf<=jX-LgM3A#rpwLZXUq}g~ z#hrIiHyuXk^74w6ti>(|5a8^xyXV5K%g^Ep%OnO_msdYpC2C^sOlQSbLI5O*Cjn5n zExkHYg2r9baD?<&_LIPFb%?L()uChQsgOy!$dmQ-KFH1b5NHZ<1`zuge(u;a0?Qja zLFk=WyblOys$UN_T|d}#eX!|z7rp>H$)P5&Q*w_1rtbLO&~H%!=-e$0`0niX-|^)S zSda+1Pux0njbqp0jNKj?yN8^y3mfYgyN`Nfhr8a`Su%D~-Zyr$GImoKyHomJjvd&p zb255|T8*CEb;hr8&kQg;>1zRfpNydMmK`J5;f&yZ89^NHF@kPO-)aQ!!w7atZ*|HD z9`;5=T@N)~4>w)68nLi3>Z`HUh^e}Fj+n|n;2$x>V)zp>Z&rsyw>>gj-Ibxq{X!m| zkPOLmk(<7iRs=iPky+fc!`T~IgOXi4c5!lSF9Q5Z@Z(Ut;xFwJWd(rl_8=tGEHN20MIhj6T2bzjl1>)C+~L5H56ql&rR2)bd&m zj15JID+*if(#GZ|$FlR2GZ0=)WG~NMo18y;QqV-TLz|qDjH&st@v|qYacv&LEF{{r zi&rj9PfRa9hl`kcrrNH}&3clyBh@as^yti!N2&>aG~&l-&0Pi4awu9>GU4n}HWM4C zasplBH`Vm17ove7a!e4Rsg#MOanW}a+eqpMba6U0rP5Ztv z^>x(PSWn816yUe&QxI}*1r@||kuxK_mfJM`AyRei3ATEF4-4JlL8#>qG4&lh{39N| z$OD6Di!d+~g)}{TO156ev@w=p7A9$!Rx~KOjZmB^c#v{xl34yRJj!hoWB{1agsyJj z{$CJXRgef^kAeskE&JiINu$DpL{wtRI6z-c_;n&TJ_M?@%lWq-x$xi&?r(Z>$axYp zZp$a#=MIDnw!quCnN%+2rGoILkZ|RdkZVEl37`=Jdc$5@0Cu!TLZ?7Z1lkZe?lq8+ zlyI(9G|pTXNGTwZ>Fv%BI zkGldScTT*OdM0@R@RiWjY>@2RJr04c+LL8zsQ@6I zsE(xcxWN&Z(JFQp7wV5YexU@IuMqZ3hh;D*8nBhCU@Iy1Cr;Mm5+D>bo!TKxPl8rU zfl^~QP*86w7m5N^1BKm)2?gOc;^bRN2Kyv6C$twRId#WM`f_0jKl z6pLu*ra_e;uZlRvKAevWKlO7G*B~R{2M0Ro!WF#R{cp*Z6%N@immU6Nok=-_?wu|2yt}8`n65 zgV;>d5fnxC0>Sn}WJFHVV3~Wa_u#u)@1iREy4HJu`%-+v);pzMbri0gy&Q~pFYU=U zYNh@E2(?!4n^Ba+J6_Vp|G*$s2h`)=s%6~kU&e}fdHZWvmTw&uduy1|AWQ*SzeWJm zq%2$`$W#+i{ol|B-~JYBmStM6+0SF0Z+=EN{GWbDI64R%{WjOEgP$pXk$pY6`xN@rKm}p@3N~38w7e3Vhc{@*vhuo%tU*@#v$-@FU6-xUM#=u*;Kk zmuDv5;R(0@>lQ@g_NMk$JQ*lB4*{x*mINfWHCKQ?|br_ z-!dwW{F~eCv4U|SxBe~y6nMm_Thna$QqFug)b);<-c2QL=m4)W|3{+2LD!0_f$Nsi z)h9WUl+(GNg7Qw3cnsiMF^6q4U=Ft+f-{=g!%m0qbF20Arfvo{ZCgX1?aW6|zm**K z*^u?}y_mPg_wn%kI3QRTBiMs6wA-nvn2{^kWi;cXWfcCGTr6oM0&P@5M&OUy5i)qk zTOwQ@3H-wNnS9IUhq*}9CK2KeR^=XN5?BhV!&ei;Q8ZDqB4!ux2lWoZA>M)0J1`5? ziVl}Z?$6DoC9YGNd|jdvt;C#ram774_y)L0FiO`g`~z0O<^;p-IoeRjXf?`g+^%?= z43*pQ-Yof+uEB=U^N<>IXUA6jU7i2ZGJEIxE`h|=U1gZZHC$*_oNC_=v)(VOADc<@L4qxJI z1my%_U-d}S;>fBw?^ABFBUI3WpTQ&5!~@3^fE6ZEaep09%EIb&8b^i8yck$7m< zNy1N7Wt=H~q@C0^;I_}WfwBbA86vfn4v=q;qUi7N+j~$vkfgtMBzPd$1@UPtd@yYA z{{P3;Jq78idk^^0cQ5JXL*}CJCU9muO;~c@ z|MzS3ZLQJ2WqMO-G4G1gx`5Ll)10_MnI?6yO<0ZM&G9k%a^RjO5>iM(M>PacTac`~ zdpSnHQ4AT} zQ4!i~Lwu9qg@k}zFjGc|VA50$xhJ8z#0I-%0032km=o@x%KWuEM#>F_&mLv@Zq#_+ zBH2cDuyx=r%)*7mdCtSRStE@O_Pqc890MhGq+n5gkm*->AX${@@%PYVNhhBYQ+amU zf3KNc$>ZsRoG@fYFm=RM(qOJ9Fl*-x{Df7Z#f6WXS9)UD4sQN3rwt6CJ|otH+`kS^ zu&-fSiMyX-RRXI#J8TLh0CD^hn^q+XcfZ)306Z-ec)#%)DBsoi9Z{HJ=hPP+MhFpr zUroR$3BDS_48bGD{1~@s$Ck}lK&8F1WqS&egCx~qKnZO+c4HF+5MNEYb@KYwi~I+p z6V*O4N9}qCye_a=GprWl*s!@yAY`u-+@#=kWB~UB=30ZZsZJb5pM0p*I)}5QTuhRVzU)} z&&~h0y{n6js))k-*LJ$y(jO3T1>80$l%&nZfGC!R(stX1vW0Ddb`jTwjn!JV&1|c5 z(}u*vMvd`FeNy9-Ci-BaZ@&3pV)TXQ^(Qg%ATi;==%b0>cjnIByFVZ)C@)g>?A+P8 zbMKuybLPyMbG`#l6oevaH%4Q*=z3(ZZWW}?jNA9spN4&b`W|7%bx#-bj(r7o8?;=tPmhfcodAyH z)X|vR_N+}qoZWUX+5@sVx=n zds2!q%M?RSSbvS83H=jK=)wtOQYQ-11s9c$*`o1y{7|^K`_@GsKNuG1n=+|z+;FE^ zv-=#x1&z6~bhKA__!Zhp_Mx?phod+wwJ;(y1ET?eS`-?kHsna?5NJ7}1S%MGtm`O@ z0CJTRxPG5CQmjk2c{?EuQ6hLl>1NTnO+Y1*ZU*|-r58;S4jsUKIhkEfw>p>30Hh(m zoQ~MTiwIa$YDS#~SlO=6%Hu+YL=IOz#P>FagwJtuML>WcjMM_#8EVZR0Ss0o5Djz& z0gHt}v!8kt|NhVxvjxzwC(s@Y2$G)Q@xkpvvsM>ngM*FzYzUu10tBvn(0IbND?oHS zy_4g6J(xcr`M}F?^5af^r{vRZRLZmLnn&e|HBLHG34c<)QnL$U&s0SA@tfczC@Braq7|=6&mde1sk$^w*sW0qY2Mc2M}@ zA?JY$wid$TvZZ*<1v1ZDKw3fEf|OkaMk^w5rP}tQ2V(1yAhvdVi?Aw zj0H3}G;(BkWO{HM7_=3;00tn~Z7H%Lc9AK3s`Q{Vm4bXzp$CNul>7ki)J4ohTGXL` zqK0ZQ_h;n2$Ct)SFgRfG(G16{X*372vmV12K7XSZXWf9Gn1e1F)LU`8dK(FDf*~>` zgVTY{kaSIk_Y^Lk$|#{&Hatm={%apK#2I{Gm9RHNWy zM(8jVK!@b7?kI!~ro8fd0|yYn1Na2-2_Y0a1nUcNhPEaE9l~@VBsHwdFfxhML8Kd` zAf_V~LQ07!-AOTeEr_{!gQlVK4c&`5rq!FcL~S^>Z=Az77)HeA=K|{(5a`~)>^PdF zPRA8QB@cWyFehQ_gwQRkz`LNaHo=_tS!7oO{BCixdk~&sB`@nzca?}q18_~iSBK>k z*Qu4!hXn_D6MJ)ZGwe>`n`5+b2Lz@;e8hSd&V4|A2PzyeoB)T55a=#i{tM4l+&phu z8U;pQIKjaXC(OGE4Izb%h{8QnjEvv$s%6^hY1SVw{VqtlX(l62n{Jx5iL^-=d{@SQ z)kjGNNUFNsGpOQIcDoo7zGm7php>L!0?TF4Abt8w1eyq@3eD240-^~A9E!phUqQmN zrUZusiw|BoC5ni#b$E$E0TF@^8oSiN9552Gx(p$<48T(*Z&;3z2fP55nU-U!2#K2r z1qRkOJJ0#9V2VNaZkH7*f58eBzs#fiHlX`8Wcx6n>vTVc-xx)x!xZ9g+%vxE#Po3C zw;9}nymNG7^7!Bc0;!!GnNH27&P-IJemhX)3pGKA5xbz^`p+)r5n6yg6m_pt24}y& zTXBonz5$rc-83o(aK+egCnScna%%5}j&9`0#3bwup;f7zhTQgKO&%P0GKo6vX=^o2 zSbWSboNWFb>|O7vulTXImsXZ{X`-P+*+U6JTo_6naOBWA8TA=3M7Y|PdWW;CVl4$J z6T4O z!6+D8?3JilRQ90yH9w8=H~E@Ho2cY9`!#bbUMRW0aQ+!2JTKJP1_iDhTPD)2AjHUa zPaj?_bcaw;hhRe2kZXhl?O&tRjA&!j&gI0o!P$!Gh8C+C{5*UsapJzcH?kDW?Szxt zM89(l;%iu*Xx0&V!Bctn*^v|x>Tb*H%KXjk)4WA@?r`qaVRb#0)gi=X_O{_4io5G` zIOm>>U_y_A3h6(H&QRco*4KB7{Lu=`2dgOQaug-@ar()n777D>{Z>UH{?%gPK=bqR zFetD6T~}pMH}!-JQ+x+^nhrbla;+{V2vuUzc@+AKgF-BV!WlT0KM`a?7jzKM0hbp(XCUnqoKXL?3Y;M`IZfW7X?IMjVEv@!3(MQPaIdoOCNJ+2~ zvSQ6eZ7IC0v-tubPZzamFb-nS{(h zpCwr#d5Po)61vOjUrD|v$&k#Fq)0B4q)DbpPLp)-Sr0SyEXf&?K@t&zm-*|PB(Iaa zMl#P|7fCLW5Y*d16@SOnAIw`IA>x;SMTqmbIMj&?koW~?8X9YwLW;4MSeR&TZOiVP z?5c=PM05nQE)%I(W<24N(jz=fReI9rxMWH71HT?3;s9H?@Fj>5ugjG17*^bVVk`7g zRe#~DKK{j2r)pK()NXZH#g#(3Lp7@{_&lf%h6mJBs#hIS3#u!8UOmtmRgNKvg137zD+uyx)`c41< diff --git a/translater/__pycache__/utils.cpython-36.pyc b/translater/__pycache__/utils.cpython-36.pyc deleted file mode 100644 index fb3df83edf64dec6f6df1aaa4dc191fc381b4b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28265 zcmeHwdyE`Mdf#+U&tqpFT&~FF<0z?*M~XWVj_o9d4>%wR92<#a0|D&36F(CmY1jc`14e|v zKMO=!Qq`B@qd{`S9e!eS66-Y)%UL2$EK%C-~NR^_})MI{!Hc%G6TOo zxPAslaM#XcR7P2?OvRk7iY@oqN>6B`@bfr6A{Gr6}i#%7mOtm6Dt%E0c1b zs!Yjwx-yNk-I`h3Q`uwj8`+k%W>u`U*~+ZkTdlp7IVt-rbxNJa`7>%!ox%BnI;$SV`Ds;C=hS2P^2O&e>T&g{cQfi!{%3cy zm1l7OgnAP9Ps;rzKhu0xJ*7VVZf4i2Tvq4RXYl?NbwNFi^HrtPMfF+Kb4@*?E+OYR z^{l##^YhAASJYKJc|q0HbLx3qeUExUeGi^}&OcJO)aTTT$a_(}q?VBPl6qNP$9YM8 zUcG|z%j$-@iSu>!1@$VIZ>Tran>gQ8tLl4I6*YZ9SvNA}#)m}6 zrLq-GzO0q6(TYYbEZb30d7&RR*8FIKsq$N)hf*`mpwq6lJ9^D)HM%}>oagoQcY~U4tcPw#$4^Txeqm>w&%CzV zXotS`YGLE9@2+p7mbUA+?>2O&z2>)3UB?Az-F4G~)0++DGecm#SdzLf>6PHTT(M@1 zoL8-PS{P1uAqaK(yt}!Ip_Q6Ee8g)jx7G15IZ)EAH(GwMn7-ZWtOWOads8<;RD=GZ z)aZ+iwfnyq@UsHA!B5q^+NyuQZ^h4Xw;h%Ex$o0_9n%8no5dsqJIHUbgH+(c`&1-LC4AQR4uxPIx;By$P&PKSt5e9Cs zQCoGrz`fe`^~(13)&{cfZIgSGSWxrYL)A$y*bEGR-Q`Sjm$%(EZqcq5@nfWm9Gfc` zmg^lIqUD#azYq*nsQqebG2)30Id7g~*gZ3J|1 z!DgC5E(*DEp@9n4FhADTfj(&q-i>K=P4kp*ujC zcuu1cH(y!0@%jx66ads}_3KDp-t-$QtEdB1rK9_lp-+|*01n`EOt6Uy=;Na6uPnMp zKYjY#>9a>;GV_WbZlIC<`j#+s0`Knr%Q0c}l^dp0XsJA}3n22*1Zp%BRp)tMTJvuE zs-c7GdNegi2BJyQq`33Z9uf`){z#i=%J3y7mE`U%q0I%!;VV3J~wd#eTj^@(J{Ph^Xx=09Q(Wvqs zJ%wvM!(^JtB$EjyvrNb>^yPl67I-syAQq^LqCv7J%F(w zc59Kf*gbod{8FBd!CufV5(5@auonW!#1atUs@5G{wgff;8IybrjnM~@tl|iWo*BDn z6)njdYJV1wF0;@RNFXX$%DQdq#n5hMn+`=5eVDxnbIrW6n+4`jj9?xQl|>Jou9>aF zEPE_!nRyoFHXH57&UKe>qFeF2Ux&!$s*WEBC-JvHnik#bE#CvrqpUy(3>MvNpgc2A zpEh4Q9b?Vugruxfo>?jvqbz7pR3r%#c-x&Ia`?F@*9b6Sqau)nat*S173EpX3jtQ5 z<0x3?k=G%_h|ZZDQNytv9L20-Yd*bJ6NuxA(}LFm;s1e)9^qTmGlcYx)wAX92=441 zh>LP}5_j1hT<<^-Y&!buVXlXgy=*V1?Dw6We9sE=%>qWL(#toC91$zienxU9kh_lD zQk;8Iawn1dW#mr9x%(t{8o6Ib?u^OBxAy37_nfJW{&qOq+`CgiIv37X_l6HN_o-~S zpXGM#=Dc!LPUYXXn+J9?JDKpHc^{%G%BJ7@c6g`>%n@A414jzpzsGdBCBl{m!7>Oa zdV(%<2thZ5ZBdFl1O9LLZv2o1Qidy(c^J=oQoch`>2F%tyW44~g!ZSR%?n_PBHE}<`vjzAkw(yo7#gvtByzfdGp&w7 zU#H#LPBX|Yfa$^^Pq`hL86HJTWI`tBXv&P~Ff6)P48sP!>ZEnB(o{xgg=U_~^QE#A z)93^MUL5bX~HIqd-yJVGY%{poh68^}HOE`oo{UI*GOfMT^ZtFRt zwC-ek;ANmwZU`>0lTfWi+~rcLbpdzz9Xl+527xE+IN?OkQJ`qM+2HrXQggC7wVP>9 zD=5J`xn4GCq5KSL&MK$52lOnrYkw>QYL;!z?q-6o;k-EuIn4ux`lw>hsUGY(pg|Mf z7HH6A=Q20~Q+;P=5ifUh8)5zQQy>aOnP;f0d+GQBNCvgca^Svk zd|_R8YTzDa^_J@%Ul6bp7I=6X_XC&lG%N=<%ZH*;BM`-+UGpIhgjz)Qu>|KV=0h|A zf@7K<6>uqHudPCz<-=UqQQkI;L!qv-T}IZW6bbS`xh2q?UD4z4C`pZ z2s6kZr7LIf=0C<^=*n~nR3)J+LN~Hg*;xoSd3zRgq-fjL94OC>#T?KS{N-)UI%=>b z$&YGLD(zguO)nF`2o*~&jy$#?*1|~S!ik@Cgi#o1im^A zl>%DahDcyB(<8aNZcKIOAR}lO_)TL@Kl`z*-#BCH zG#0*lRPUrA>9-BtfNWv6*P}xGSU-f$YoZtEL{2_70$cqw9u`6B1Ipi-2^;u2V@qxd zPR?ZVK>;U~Kj0~V_CvEfR%kWFAiHA&|E$kvUI8F`G@IJp;1zI#V4Q(6L9m2Ai#kL4 zoY+oS;6D9UFi)R%X`~io%vvKc)x`bJMowqlZ$}Od)saIpXE`fEMP$`Q(NA6&0Yr3& zWvj3RRFifjB@YoioUECNlC{s$9{IHSCZSdvyZj1R*VuE$JF6PEn9w;UQ3d1{Vee ziGUDu?5$Hh3#9SbP8LKmD@4+P66hR)vPeGyL@4J%=FUU6GI#dfG6-sQe>@qP#I#rI ztgXTLjz*@C9Wx?hv6s^puO*mcG!}XJo|!w0!DGHDfOVq1_u!)@WTHZ?)7n^T2T?xk zh;=e2=&j%8!xHLShd~Oa9lgv9Yio269ufrsthd^!LycmW1?yvL=Hna!Lte?@$h!_( zx`Db3-gJhz^C5tj>1K~L)XlP0DKy%mJuZFtfAE9Ol>?Ox zx1j^V0u8GUVG!koH3YCq`fdF>UXSvgz_Bt32_F-)>Ooj5JC$P6`wC>GxU-c~U3b>1 zQd6af=`2^HXjeodrOK;BFq%9wlX+0nDVt_QC#yAb()rFV5ZeXCeiRo}vJOGSfg$Eu zTxW6Z;Q9y=Cce+({*)@D_eI=aP!ll7f%i);YbYW26*ZaOPvL$!u7%HO>iJ;c3tv<- zLp6S&_9QiyXS?qiEcM*w&IXmzZNW@!4CQVE9)wy4N>YG1sW|c=5~suM^_UP3t3|rA zdHy~G8lu2?IGDtVAn%iNB%c%P=K1<*v0l9UUEh84fHs46Dz^&8tGX zQE(rDHx}X-KFk8VQT{p2A|DEgDdIJS_k#~P%_HZPPN%M$yewSy8+2Pm&Mi0|J|s!j z9ILWz&?dX&(V3h@Uq%sNiv6wzrj>6J369~#%;Xe}g2@3LJ-)O1`T9#JHy$;97*7UJ zUxWrQ)WQptge*1x;0p?l6x5|s;FCA8*QmPRB zUEHi>U_Jprq52>mKuzMD6)7I>0`0cH1_oj)C(MGuAZOQVSTL95zJY5iv(*e?b`A4* z4|96gQiTJVT^n-2^&J@Mm8FU>&pW$Tor;y6)_V8OO+3vGJTV;F6w;Y@tjakrPGJ2_<^b+lC@PaWjEK*I_rxcBPo~ zO@Enqw#|ezr(2X)VD?x7m3f!hKY#?+QckXmhWfxqfu4bPtwRM+qW45uIGLlIa2~zR zmuY+`=LDHyVI{mluKapsA_Y-oHAc~VZ;Q>QxU}90WODo@QJpTXOvw>zK*_T0Bi0dU z{=Aw4O*;Zkg6BghPRZ&rj^IrsL~$UaNI|sWslrMD!t66WqUuvS+3i`NW3iVNG<9Iz zn=(r4>zO-8pl4Z4AYRDe8K5#JfLH>K7?doRy1)5daPiHP)fF4&FrU z!`LT>Z}|%IZS1o{H&-|G_(un>X*hw$eCf~)4+hY&j}F|R3~=u|B8$a%p4IPR-~~1H zS8)|%A_DaAVi1o8oNKs+IEGYzjpawE?!KhtAV&TpVk8y*%%lSgRR1sU03)qgdTDLQ z@;`zSDNa)Br!Xcs`HQ$9PHue*URg^`3CaA)9eaCT$f5%i3dpNqV|EA|XJKQ8%+DaM zJ@8$lG_ZM~G>L9b6$Wy0l2aVWA+gS>iGiE~Fx=@m@a2`l9Edq;7c!sk71ZQ6a)Rx% zF}6>8eVyUH#5X~kTfTo=&>ckO&xi5XAn{)Dwn1ts`(l_tfSCvU3|He^C|2R>DZ%g) z$(QjcrQ0A(3nboUQtz7`Q=J$m_|mBf2lJ|DD8*DGJ~x9k_Hcgsxpz}2HmL} zA;g3#8VwkBXUv^6nfIluZIwKm;&uAOQ2Sh^5JRvsk%BEMCe>GR0**@IW=CH9kXArg z4u23Qq2EI8^;dX1GM$PsVP8k<0{uQqZ~|2d@i;+m!7vF#_4mkw7`~%ZY?DTo>L;U#7ykD-EyEihKjL6PLd^Ut4u z>7^5e#JibcsFpM&08RLqS?N0@8s~_MZ7nO_kJ$6RZpp0a~fY_%<3Mv z0%15o4SU6=&H8_Np#D4r1n9=f1Qh%hQ1CK@myI}n)5I$QSr8DZ8C|fs%0R)!3LLq_ zCa7_UZhe9HCUHVCOy`Mt=ihE`tgUY^#xK4-*3KPEzKInil?o{{oHP$l0%Q4A#8!%% zzTdVr-)r}sd5E)1s=1OFL1N?iNmV~d2Y=`_B-GY)ip{_4K}cR6ifc_DR+EQ<+%(=B z`yU**8|W_T7C{I|ZeF2dU!qAHZGi#>5&rmffT->wJT+`^V#c!53W77+r~2l7$oL4p zjY~BE^RNRG95kfK-VsdpM~@@|oEOStkz?d=y5dV%D}?ocAFIceegH)Rs zL_(7?{TZ0rheJ$a6Vt`mv@r9YB~$+7d)A8eRcrf|_cCV6W8xyJs5yZNU;0YsE0B#i z?carmo!a&=_KO0Z=X~<7;xe(#% zGS#IlNWuds_e%p)eF0P5Y3@S=!T#Nh{&iC)dNPj~gMunD`bbS2Vgwqk6O&#J;2Ir)b4m=fKf^v=#b5)HYf zcndgr-orH6Wssvq8{kCX)%_|d224k*ClKozO*j;cN(@(u@2$1+t~`K||&2 zbydlmF2gPX;%Dd=?F9NKnfwhVLI4XZu#&DXZ%e3BB?mi0Yg@PQI4UOSZRj3t=tAhC z;^+KrQ(>P1{xqIe@-S9xv|3RX-r!0JW^<5zP{f)h9fn%?w^&6Au!_@ATUA&ylyT?` z0aM_Z1<)QR2v6e0%-$&w!Ko|*4{VrHi`J|SA_#vu+`B13oMKqQ&!coo6e&%SAc_R^ zI4)>p0J(zVXVgBBGdnni)JQoDVuF;@%R@dOu!Kk4=A#?U@nxi^;KxR;1}>_X}6bwAei||2FtYI&w3Xe;R=k75({P{ zGVGbqVJz6zi_CxP%1)Nt1L7hKmb*3#l8E_|94utowE}1~%?Vz?D`qF+AuK%fl7S=i zvT$Txy9L28M2u>4dKX_}07E&~{TUMsLw8uMvo2wZaE^ttR)Jp2vDQ0zFeD1m$AyUB zg`i9?gP3{nGH*ptTknTTn#B!qFsXR)hZh?0UAANaX3(-=gc-w>j9>)Btt(`NB%uLh zdutAcUkgwm+M#cM&AtP~k`V;fe*&eVA~hWn0C=A5#j}xh8#DVTp7iO;N2Loi9MNKT zafc(#Z{;)H2iYK57BfI$(vsyF$R(?cdN+FY?!6`9hI5t-L{2yGk+gmrUGmi~vV!I5{e3c}Vjf*K*E#{r|J({a~i zmQSS3r#ILbAPchy+Q?gTaR?*Bju_xL3*ValRn%X@k^ZvrmBhvPnTn+{SZ!)mvVy)M zyi^>9En~G{?kku9pp6vQ=KI0+*G*WNP_^!Z{d_lmAZwdkpHg5NN6DGQ5#Z-#0YQj3 zO=Ih!_qUgUM;M_v)hs;3SOORak{RP3J^l$1b(Zo{~4O9{{@qOj)WYoTCKGZ6I6}K2?s<| zP5coKg`p%Msrc(Y+=t2_v=)=k4$T0<l_6u6Q}aD1n(2PmK3{^8{7a}wnk^l`wE36Fh_Y+J$_OQl3XJL1)#^{M4;-Zo zY}eg~?%RGTTrLoToPdBJqJq~tG$P}As#?9X;kDu?s9SYv02hIz{|%ck9mBBZw^|7t zIq@-n{}l@fOn(hmAFw^7!9^?=n3~eetKmq0gc^T;0YrY)tWmv6OdUex_`&@UnV;qn zJc1;I(tvO%8{R08;ux7@G!~S`+HE5f<@G;7dHp*~2$87BrDihsCwYbOrTV0aNnm3f zGW~Cv{5vL+8$*c@GoWHUKbxYTG4c+f-(Vl_ML+f;hvPDi;CUpJ;P92br#C+043et*xq1gleKvGI0WcznBcIyw6@yd+D3#24tzD~ z6|B_SXZVV8&GbnPd%-E!U&QLW`1^XJUBwE3jo|G?%)6Z7C`1Vmv-MUZ6wEN1wqVOI z;1Ngw(We4-u?AD9A5`_f#{J0Tmnr!zVh zhA^zT8YN~y+hknTQm4ESC_cQM!` z#P6Jisk?u@)Sat0+9L%Z$sa-&%=jF|Rg{PIr?#mOAG->vAr@&W*~_=C^Z_Q5JF;u) zR|u$Cyq3w&!GuwQt=YyRg_5Oz4|%Du$~jEpE%SH*7o53Z9+-=;SYkfofI*@MyRxz# z5FkSEgjfZ}^2Ice%GGOFK_<8l>pq$po3xB|_Y>~Tj_SBrO)e{w(0}EdrR_9E$D$%$ zGYgi788(ctUY`-0%HxHkV)q5pomg-9HGi`KvkFyT8oj2zl`z_;NL3%yDqelxPR zE0YLCqTGg$2l^?zF$z70z4;BokEAnG1S7EyTKW%gouV40Iv!aZ!FxzzY7V#T#|S@0 zARtst0IbqA^^BH9g(JB$$z(qC23+5;(NF% zm>TF>GpO9l?qH9DW*&9G)wP>tcsItS*!??67!e|o6VRkILi|pH5d%We#2@<9}LQTs&pQ68U1LMA$Mi-}-+!vc_dEN?PM7V0sE<0ymFCr2J#JSOIdrb>vO3 z5)*uZu3NXE1NH3NV5C1XB<~9@aP4mcXj(94E||fm^Z>!1W=j$L z{|iSShY0>D5C;VRw4_lq3*wVCaRTz;B7&U)2=Z9PXAaqgcfb>XjV0g@SZXQ+c3&9|fdkNh?LX;oHB*mT^^YrU*G5e=~@KTf`EA8B1zU zHF9ES%AsGx4IH%4y?30gi=s|GfdxbGNZiioV_Z`7WM;>?Gm~72{{qC0>LgT6V3x+S z8<{&ZB#OW?r~60O5UyvC2PzEY%9>f$Q+2m|^~@ zD}Kv|2S7lKWeR5Tjd&^Gh7p3!{se?tBOEtCe6uP_{-DA?U?E6#HB*snoj|q#IASDC zCdOtN90uRRWa78dk?Go-pX}PlgC)$XqX2{``kDwI<;@Bb&5#-B&1|fG71v}MX{#VS zvi+55#$d}H4t%8lm{pC8&ZJZ!BN`MzoQ(8Sgw71UN)D^J{CJ3brK?G<;|XU~JS-PO z8I&J73Q+_`9xmy{(j5#9ctiGG4nkp9j6pXtW^qJ&CM?1QFu_5kYk@Yia=!cb#)uxW z)lL#oe%`&bjEy(wzk@s}f+P2fVIO5o09Z)Dj6olIZFq8~BQ$E9Kkq*JWIx6j@+T!) zFcTMB_pD+L$1&xum_H4Fhd#X5gp30zxRb+br*nG8w{fDUWI0p?gi)8)yJz?_W$oo=v{u)3Jc&P?0e! z!6Yk4LqyYWG5KC5{1PIiF%&^mdX-CoL}L_@uAHq*4?$d4rL+VsjkaCk(IK|Igo_Lj z4rKqZt(l*$3?rvR86(QoanW=1<6EyWavu97oP`Ktfyl!a*|X-cDhwh;Rux3J$T8yn zP9EN*lUoaM`8U(@Ku#$Sm+%3&hNbKiq!T@OttfDKe*)h9l1EPpEbMSuB4S%~{65H% zC7wb(#uEwf5bVH#>CG4fGxZH29lJFWc>;|Er(AeV`C-q6&J?DIN{YAV>S}WILV%fx|Kg|vBL`2$CPg{fl zO!5T{&ZwDE3Q?5ML(K<<+AaJCkCJ$e{^v|#5Fpf@>@XuY#(Ww#mJKn!;{dD92e*m| zHtO}pR^d|7Fi|Z#;WK}=>Usy39I9$$Grt1_B zlA+cA6$OnKgbTp|Tj>qBsWh!J0Z|FDY2cG1b0FF)tP$o>d5MiW$r-T^^=0-X9C99n zm@6!2Z4I+`=4L7lkv*o;P{JZXk3}{|^bD;PV2`w1$Q5YpzKlrnV3Am+ZR;m`V2Fw( zbNgUSXPk{;ksfx!%Un*@l!)knl_a1U%YL}&gIk@$z;pfoSTp+FN8N>2{9O9ntC6%PyI3Kr!0cwgSOU`&c`gltb)W?`jgQRwn9g#DO>IcC?-x;E zIX*uSqmyA(NUeq~L9(h7VnIHYT`UFQ;{V8A zZ-5`$cOS)Z4z4k_7xA_H(g+IZ5&-=i2VL~C$&(mp>;}TzR1_k~O^G1or&ymATN|7L zHW$Z&Xj$Dq2E_s#gkX88dzw=cTbnUF!o;$2aRURMaeuUZ6kV(}u!Y^&p@di~v;YCp z?eLVT1VA&=F8t!|CN`xab>U72=EME3r32bd2vYnW1fk)NCK7Z14SqKrqPX$0Dg!2> zSk@*zgvH?NfCz$`*(rEHvUnI-?GZ3XlTuezO1(~Sle1(>MQ|NGLtx{OA14(7ei?@> z$}pa;HK@PFoVja(anq0hbAs7?51`L>ed0(SyTt(kFiG!f+l5H-dJlrerHHo1|zDcAj|iv+f6Q>Br46`}|?93|Mf%Mp}w|H*EtX z0tD-0&qZTlP4_-Z`ZVw|qdnc#FkBDLpE={p4t^Y`#Wsvv%RZ0-YpSr_0klR0NSKZP z3`2Yu2#JRhy2Vn`TlO@D3IZjDT6s^KNS6$CfHfGa20M3+?*?_Q;|`mlFd{3iEx}<3 z0Bsjb41xxt*A`vw6*Jez7m4o#&h+w8jKoi!j-z8Ovp@s6TSpO?$u8wm?Kmpz@|1( z{X3gMH+%W~n_a{nCwn%&dNRtr*l2HTbtlhk1p16bmz)_aar$H>f5p>SzuBEWa|xjx zusDfzvHMydIf%uweIxDa0!L#nJ~%7#>6g8ITU+_f1obrEN*6l+Y(!l_M%f zWwBC1m3X%pyBV_{tHpkC@dS%EH6=6UE%ae*k|zK#f$DUtTwKdH8T$m9CvM-EmAEpEf(yoWO|nn;SG8$KV7uu)^qn5B1&#llg&_v^c?rfAPseWpD3P-S zCK(&mB8OgqD1RG-2xmLQwb{xQ*FFvyi0}@`Sl*0;p#m7sfp>cn9H~2;gDPJ{#d~$#IVx_fZCjyR6 zw)+-V!}aw$86%$DaVWGGw`I-kQ4oJ9hO9oiSY zPlCk`jFnk2R$}Q7Jsoujlb9dQop~4`D6ClB%R)1T=Vme|`}3RTKL&UAb55S*u0!S? z^031aP)lI3N8m~^sR8cx_)Q=rH|MnBI~9v=0k%; zVg(NQ@oeL`j6BX+a`ba&yzu<-R9V_+W`-1n{ZFfz@jS{Oc(MUJBi_d-hf>IvA_n}H;f@|5R_lU z3zb5!vCQ_5pwLGX7giv3ZmsK!|C@m4mz+!&LpxAMpHQWRWk~6wa3mU^;fMO~BLR&h zc8`8WpTX#VI~~~xEK0(DQ^-rFr}=O^vXmIanJJDE|Q4Re1*s;TI&MXhkDX*cl#z=(5ia=nG>ciB``k%R{_In1F)t)!6#3*DK^O7NI zc4W2mGW_{0ZVe$ zz_h`vZMBDnq|ga-2zZtqMt9-2q_bT_-ya1dhTE6VxR{IUdcTp|DfF`XZoEdIs3s64 z>bz&wtzO{+_;5fdi|r%v)6&?dTRqx(C*QYzX!WbG1?yjC>95%JteRr^_mW!X)BNed zeA6cG{WsXAE$sFOK?1o+OWtyJChmN6i%}CZ#%0mS?3A{8y&{NrxHGwZN_y%1u%(~s zO=2BGriV@Udsv=-0qc{^6>=soa8<)IP9`kfE}`s~t;`NqFL#eh+$y)?pT;sK#~FFa9C`=944!6#!Hu2S%(eR2b4h4->|B!1_JkK_l*;bstwLyV-*ByGA`i^ zz5|8?S74)drtO7@KrRy(VJ-dkTr4z;*&*_i|sl3M8{m}}sUI$y- z=rfQFF4&&#xU{^6ylboU5+~kvw30=g<)lYK|`se zLMTh@(w86r#a+JFB+gy=qy+{hoTyMM%y#Ci=k27)Z@a^$#=em7Mp9%!me{><_N_AP zym9a2yhoWQAu=3Uk)g?a!#ipXBIX0v&6r)sf1NOz6?WU1@&d81P|;PwU?K-&icK{c zzl2yRZifl+By!;W2(eKbBaj0q&weF`&AZ_<0Oye(xitl9iI_Qp3yF*0w*v*Ujzu=y zUhV^=1CjAD7ZhP6vOI_-WmFbn_a{LN!xgFI=zoCZ(+M|(1NGP_9u9~joYz#{FAlYg z4j5?}#mgjOpNoIYws-e!m%e}|#VylM<9ei3pXs-%Y*i-LysaviBticf`aCso`MjHa z{-7)vu$zd(s#^(o27p7&67m`T0YfaVnU-V)M$!^&a*mN4Y0qc-?HS*Ihmr=&_ZtvH z!5;d&zG!+*QSqK{>(AZ`ic9@ZFX`KO3;!$NQz%xMLwr%Z@9tuK13OW`-uDFGe-a4- zys;>OX1ZvPS#N5v6k2~YQCr`LJ#rGc`7mGlX|_j{_G`SN+NPgGQl2*BLmaA<`cpV6 z^=GEEr~hsJAj=k#Hi;KJ3#zF!L-s?kcp;w8p3kQF&OB{ka2?VvFo(5HbFd8@v-CBztejg~TDk^%Do$7j zz!b_7^(8!nSbeQ*-86u<<#ei*+qDgGs*Mg~CLKZp4W%YWLgSxW59edbJXomh4o>pe!IE_YU zkue6c*P@AwA#sRGeY2!&&s%w*pRt&1KW?If8BY5b`9Bl#&m81GBFL`&24~K&($|8KrAr?U|4I8 ziWf|L_QgH;MDSxsXayMeXK=O1cs^j~ltZif_&@9sajsY>?k`;^JyDt~?k&y~r;#2g zexmqr@xkK9i^qz4ipPs*i!-Gov-@Wc&&;93{?a_k>@7WrH}*`;6!#V9iYM^SOmPaO Gr~fa%*Zdv; diff --git a/translater/__init__.py b/trnslator/__init__.py similarity index 72% rename from translater/__init__.py rename to trnslator/__init__.py index 7b87977..68b048d 100644 --- a/translater/__init__.py +++ b/trnslator/__init__.py @@ -1,18 +1,18 @@ ################################################################################ # Module: __init__.py -# Description: translater: Convert IDF file (EnergyPlus) to BUI file (TRNBuild) +# Description: trnslator: Convert IDF file (EnergyPlus) to BUI file (TRNBuild) # License: - -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ # Version of the package __version__ = "1.0.5" -# warn if a newer version of translater is available +# warn if a newer version of trnslator is available from outdated import warn_if_outdated from .utils import warn_if_not_compatible -warn_if_outdated("translater", __version__) +warn_if_outdated("trnslator", __version__) warn_if_not_compatible() from .utils import * diff --git a/translater/cli.py b/trnslator/cli.py similarity index 96% rename from translater/cli.py rename to trnslator/cli.py index 62cf901..edd052f 100644 --- a/translater/cli.py +++ b/trnslator/cli.py @@ -1,8 +1,8 @@ ################################################################################ # Module: cli.py -# Description: Implements translater functions as Command Line Interfaces +# Description: Implements trnslator functions as Command Line Interfaces # License: MIT, see full license in LICENSE.txt -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ import os import time @@ -14,7 +14,7 @@ from path import Path import click from tabulate import tabulate -from translater import ( +from trnslator import ( settings, cd, load_idf, @@ -83,7 +83,7 @@ pass_config = click.make_pass_decorator(CliConfig, ensure=True) "-c/-nc", "--use-cache/--no-cache", help="Use a local cache to save/retrieve many of " - "translater outputs such as EnergyPlus simulation results", + "trnslator outputs such as EnergyPlus simulation results", default=True, ) @click.option( @@ -138,10 +138,10 @@ def cli( trnsys_default_folder, ep_version, ): - """translater: Retrieve, construct, simulate, convert and analyse building + """trnslator: Retrieve, construct, simulate, convert and analyse building simulation templates - Visit translater.readthedocs.io for the online documentation. + Visit trnslator.readthedocs.io for the online documentation. """ cli_config.data_folder = data_folder cli_config.logs_folder = logs_folder diff --git a/translater/energydataframe.py b/trnslator/energydataframe.py similarity index 98% rename from translater/energydataframe.py rename to trnslator/energydataframe.py index ad0fb33..05a19d6 100644 --- a/translater/energydataframe.py +++ b/trnslator/energydataframe.py @@ -1,8 +1,8 @@ import matplotlib.pyplot as plt from pandas import DataFrame, Series, DatetimeIndex -from translater import EnergySeries, settings -from translater.energyseries import plot_energyseries_map, save_and_show +from trnslator import EnergySeries, settings +from trnslator.energyseries import plot_energyseries_map, save_and_show class EnergyDataFrame(DataFrame): diff --git a/translater/energyseries.py b/trnslator/energyseries.py similarity index 99% rename from translater/energyseries.py rename to trnslator/energyseries.py index e3f9998..27e4086 100644 --- a/translater/energyseries.py +++ b/trnslator/energyseries.py @@ -13,8 +13,8 @@ from matplotlib.colors import LightSource from pandas import Series, DataFrame, concat, MultiIndex, date_range from sklearn import preprocessing -import translater -from translater import log, rmse, piecewise, settings +import trnslator +from trnslator import log, rmse, piecewise, settings class EnergySeries(Series): @@ -550,7 +550,7 @@ class EnergySeries(Series): from pandas.core.reshape.reshape import unstack result = unstack(self, level, fill_value) - result.__class__ = translater.EnergyDataFrame + result.__class__ = trnslator.EnergyDataFrame return result.__finalize__(self) def stack(self, level=-1, dropna=True): diff --git a/translater/idfclass.py b/trnslator/idfclass.py similarity index 99% rename from translater/idfclass.py rename to trnslator/idfclass.py index 7f83c7b..16a00fc 100644 --- a/translater/idfclass.py +++ b/trnslator/idfclass.py @@ -3,7 +3,7 @@ # Description: Various functions for processing of EnergyPlus models and # retrieving results in different forms # License: MIT, see full license in LICENSE.txt -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ import datetime import glob @@ -31,9 +31,9 @@ from eppy.bunch_subclass import EpBunch from eppy.easyopen import getiddfile from path import Path, TempDir -import translater -import translater.settings -from translater import ( +import trnslator +import trnslator.settings +from trnslator import ( log, settings, EnergyPlusProcessError, @@ -44,7 +44,7 @@ from translater import ( EnergyPlusVersionError, get_eplus_dirs, ) -from translater.utils import _unpack_tuple +from trnslator.utils import _unpack_tuple class IDF(geomeppy.IDF): @@ -397,7 +397,7 @@ class IDF(geomeppy.IDF): return profile def run_eplus(self, **kwargs): - """wrapper around the :meth:`translater.idfclass.run_eplus` method. + """wrapper around the :meth:`trnslator.idfclass.run_eplus` method. If weather file is defined in the IDF object, then this field is optional. By default, will load the sql in self.sql. @@ -746,7 +746,7 @@ def load_idf( weather_file=None, ep_version=None, ): - """Returns a parsed IDF object from file. If *translater.settings.use_cache* + """Returns a parsed IDF object from file. If *trnslator.settings.use_cache* is true, then the idf object is loaded from cache. Args: @@ -756,7 +756,7 @@ def load_idf( the default EnergyPlus install location. output_folder (Path, optional): Either the absolute or relative path of the output folder. Specify if the cache location is different than - translater.settings.cache_folder. + trnslator.settings.cache_folder. include (str, optional): List input files that need to be copied to the simulation directory. Those can be, for example, schedule files read by the idf file. If a string is provided, it should be in a glob @@ -1708,7 +1708,7 @@ def run_eplus( ep_version = ep_version.replace(".", "-") else: # if no version is specified, take the package default version - ep_version = translater.settings.ep_version + ep_version = trnslator.settings.ep_version eplus_file = idf_version_updater( upgraded_file(eplus_file, output_directory), to_version=ep_version, @@ -2438,7 +2438,7 @@ def idf_version_updater(idf_file, to_version=None, out_dir=None, simulname=None) stderr="The specified EnergyPlus version (v{}) does not have" " the required transition program '{}' in the " "PreProcess folder. See the documentation " - "(translater.readthedocs.io/troubleshooting.html#missing-transition-programs) " + "(trnslator.readthedocs.io/troubleshooting.html#missing-transition-programs) " "to solve this issue".format(to_version, trans_exec[trans]), idf=idf_file.basename(), ) diff --git a/translater/reportdata.py b/trnslator/reportdata.py similarity index 99% rename from translater/reportdata.py rename to trnslator/reportdata.py index 82c317e..767ade7 100644 --- a/translater/reportdata.py +++ b/trnslator/reportdata.py @@ -7,7 +7,7 @@ import numpy as np import pandas as pd from path import Path -from translater import log, EnergySeries +from trnslator import log, EnergySeries class ReportData(pd.DataFrame): diff --git a/translater/ressources/NewFileTemplate.d18 b/trnslator/ressources/NewFileTemplate.d18 similarity index 100% rename from translater/ressources/NewFileTemplate.d18 rename to trnslator/ressources/NewFileTemplate.d18 diff --git a/translater/ressources/W74-lib.dat b/trnslator/ressources/W74-lib.dat similarity index 100% rename from translater/ressources/W74-lib.dat rename to trnslator/ressources/W74-lib.dat diff --git a/translater/ressources/originBUISketchUp.idf b/trnslator/ressources/originBUISketchUp.idf similarity index 100% rename from translater/ressources/originBUISketchUp.idf rename to trnslator/ressources/originBUISketchUp.idf diff --git a/translater/schedule.py b/trnslator/schedule.py similarity index 98% rename from translater/schedule.py rename to trnslator/schedule.py index 7ffca3d..9f38014 100644 --- a/translater/schedule.py +++ b/trnslator/schedule.py @@ -2,7 +2,7 @@ # Module: schedule.py # Description: Functions for handling conversion of EnergyPlus schedule objects # License: MIT, see full license in LICENSE.txt -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ import functools @@ -16,8 +16,8 @@ import pandas as pd from eppy.bunch_subclass import EpBunch from path import Path -import translater -from translater import log, settings +import trnslator +from trnslator import log, settings class Schedule(object): @@ -131,7 +131,7 @@ class Schedule(object): from eppy.easyopen import easyopen idf_scratch = easyopen(file.name) - idf_scratch.__class__ = translater.IDF + idf_scratch.__class__ = trnslator.IDF idf_scratch.add_object( ep_object="Schedule:Constant".upper(), @@ -833,7 +833,7 @@ class Schedule(object): hourly_values = self.get_file_ep_schedule_values(sched_epbunch) else: log( - "translater does not currently support schedules of type " + "trnslator does not currently support schedules of type " '"{}"'.format(sch_type), lg.WARNING, ) @@ -871,12 +871,12 @@ class Schedule(object): count_day = 0 for unique_day in unique_days: name = "d_" + self.Name + "_" + "%03d" % count_day - name, count_day = translater.check_unique_name( - "d", count_day, name, translater.settings.unique_schedules, suffix=True + name, count_day = trnslator.check_unique_name( + "d", count_day, name, trnslator.settings.unique_schedules, suffix=True ) dict_day[name] = unique_day - translater.settings.unique_schedules.append(name) + trnslator.settings.unique_schedules.append(name) # Create idf_objects for schedule:day:hourly ep_day = self.idf.add_object( @@ -906,14 +906,14 @@ class Schedule(object): count_week = 0 for unique_week in unique_weeks: week_id = "w_" + self.Name + "_" + "%03d" % count_week - week_id, count_week = translater.check_unique_name( + week_id, count_week = trnslator.check_unique_name( "w", count_week, week_id, - translater.settings.unique_schedules, + trnslator.settings.unique_schedules, suffix=True, ) - translater.settings.unique_schedules.append(week_id) + trnslator.settings.unique_schedules.append(week_id) dict_week[week_id] = {} for i in list(range(0, 7)): @@ -1165,7 +1165,7 @@ class Schedule(object): return None else: raise NotImplementedError( - "translater does not yet support The " 'Field_set "{}"'.format(field) + "trnslator does not yet support The " 'Field_set "{}"'.format(field) ) def __len__(self): diff --git a/translater/settings.py b/trnslator/settings.py similarity index 95% rename from translater/settings.py rename to trnslator/settings.py index 6861303..506f6cd 100644 --- a/translater/settings.py +++ b/trnslator/settings.py @@ -2,7 +2,7 @@ # Module: settings.py # Description: Various settings used across the package # License: MIT, see full license in LICENSE.txt -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ import logging as lg @@ -11,7 +11,7 @@ import pint from path import Path # locations to save data, logs, images, and cache -import translater +import trnslator data_folder = Path("data") logs_folder = Path("logs") @@ -27,8 +27,8 @@ log_file = False log_console = False log_notebook = False log_level = lg.INFO -log_name = "translater" -log_filename = "translater" +log_name = "trnslator" +log_filename = "trnslator" # usual idfobjects useful_idf_objects = [ @@ -125,7 +125,7 @@ trnsys_default_folder = Path(r"C:\TRNSYS18") # region read template - use io.BytesIO(settings.template) in code import pkg_resources -resource_package = translater.__name__ # Could be any module/package name +resource_package = trnslator.__name__ # Could be any module/package name # originBUISketchUp.idf template resource_path = "/".join(("ressources", "originBUISketchUp.idf")) @@ -171,5 +171,5 @@ class ZoneWeight(object): zone_weight = ZoneWeight(n=0) -# Latest version of EnergyPlus compatible with translater +# Latest version of EnergyPlus compatible with trnslator ep_version = "9-2-0" \ No newline at end of file diff --git a/translater/trnsys.py b/trnslator/trnsys.py similarity index 99% rename from translater/trnsys.py rename to trnslator/trnsys.py index 15b2171..d85fff3 100644 --- a/translater/trnsys.py +++ b/trnslator/trnsys.py @@ -2,7 +2,7 @@ # Module: trnsys.py # Description: Convert EnergyPlus models to TrnBuild models # License: MIT, see full license in LICENSE.txt -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ import io @@ -21,7 +21,7 @@ from geomeppy.geom.polygons import Polygon3D from path import Path from tqdm import tqdm -from translater import ( +from trnslator import ( log, settings, Schedule, @@ -788,7 +788,7 @@ def _remove_low_conductivity(constructions, idf, materials): Args: constructions (Idf_MSequence): CONSTRUCTION object from the IDF - idf (translater.idfclass.IDF object at 0x11e3d3208): the IDf object + idf (trnslator.idfclass.IDF object at 0x11e3d3208): the IDf object materials (Idf_MSequence): MATERIAL object from the IDF Returns: @@ -901,7 +901,7 @@ def get_idf_objects(idf): """Gets idf objects Args: - idf (translater.idfclass.IDF object at 0x11e3d3208): the IDf object + idf (trnslator.idfclass.IDF object at 0x11e3d3208): the IDf object Returns: materials (Idf_MSequence): MATERIAL object from the IDF @@ -967,7 +967,7 @@ def load_idf_file_and_clean_names(idf_file, log_clear_names): the old and new names in the console. Returns: - idf (translater.idfclass.IDF object at 0x11e3d3208): the IDf object + idf (trnslator.idfclass.IDF object at 0x11e3d3208): the IDf object """ log("Loading IDF file...", lg.INFO) @@ -1062,7 +1062,7 @@ def _add_change_adj_surf(buildingSurfs, idf): building surfaces ("BUILDINGSURFACE:DETAILED" in the IDF). Building surfaces to iterate over and determine if either a change on an adjacent surface is needed or the creation of a new one - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object """ adj_surfs_to_change = {} adj_surfs_to_make = [] @@ -1166,7 +1166,7 @@ def _get_schedules(idf): """Get schedules from IDF Args: - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object """ start_time = time.time() log("Reading schedules from the IDF file...") @@ -1203,7 +1203,7 @@ def clear_name_idf_objects(idfFile, log_clear_names=False): new name will be "stl_00000n" - limits length to 10 characters Args: - idfFile (translater.idfclass.IDF): IDF object where to clean names + idfFile (trnslator.idfclass.IDF): IDF object where to clean names log_clear_names: """ @@ -1771,7 +1771,7 @@ def _write_zone_buildingSurf_fenestrationSurf( fenestrationSurfs (idf_MSequence): IDF object from idf.idfobjects(). List of fenestration surfaces ("FENESTRATIONSURFACE:DETAILED" in the IDF). - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object lines (list): Text to create the T3D file (IDF file to import in TRNBuild). To be appended (insert) here n_ground (Vector 3D): Normal vector of the ground surface @@ -1927,7 +1927,7 @@ def _modify_adj_surface(buildingSurf, idf): Args: buildingSurf (EpBunch): Building surface object to modify - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object """ # Force outside boundary condition to "Zone" buildingSurf.Outside_Boundary_Condition = "Zone" @@ -1986,7 +1986,7 @@ def _inverse_vertices_surf(buildingSurf, idf, outside_bound_surf, idfobject_key) Args: buildingSurf (EpBunch): Building surface object to modify - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object outside_bound_surf (str): Name of the adjacent surface to the buildingSurf idfobject_key (str): Section name of the IDF where to find the @@ -2420,7 +2420,7 @@ def _write_gains(equipments, lights, lines, peoples, htm, old_new_names): Args: equipments (idf_MSequence): IDF object from idf.idfobjects(). List of equipments ("ELECTRICEQUIPMENT" in the IDF). - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object lights (idf_MSequence): IDF object from idf.idfobjects(). List of lights ("LIGHTS" in the IDF). lines (list): Text to create the T3D file (IDF file to import in @@ -2641,7 +2641,7 @@ def _write_constructions_end(constr_list, idf, lines): Args: constr_list (list): list of construction names to be written - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object lines (list): Text to create the T3D file (IDF file to import in TRNBuild). To be appended (insert) here """ @@ -2658,7 +2658,7 @@ def _write_constructions(constr_list, idf, lines, mat_name, materials): Args: constr_list (list): list of construction names to be written - idf (translater.idfclass.IDF): IDF object + idf (trnslator.idfclass.IDF): IDF object lines (list): Text to create the T3D file (IDF file to import in TRNBuild). To be appended (insert) here mat_name (list): list of material names to be written diff --git a/translater/utils.py b/trnslator/utils.py similarity index 98% rename from translater/utils.py rename to trnslator/utils.py index df32aa6..51ea953 100644 --- a/translater/utils.py +++ b/trnslator/utils.py @@ -2,7 +2,7 @@ # Module: utils.py # Description: Utility functions for configuration, logging # License: MIT, see full license in LICENSE.txt -# Web: https://github.com/louisleroy5/translater +# Web: https://github.com/louisleroy5/trnslator ################################################################################ # OSMnx # @@ -32,8 +32,8 @@ import pandas as pd from pandas.io.json import json_normalize from path import Path -from translater import settings -from translater.settings import ep_version +from trnslator import settings +from trnslator.settings import ep_version def config( @@ -62,7 +62,7 @@ def config( imgs_folder (str): where to save figures. cache_folder (str): where to save the simulation results. use_cache (bool): if True, use a local cache to save/retrieve many of - translater outputs such as EnergyPlus simulation results. This can + trnslator outputs such as EnergyPlus simulation results. This can save a lot of time by not calling the simulation and DataPortal APIs repetitively for the same requests. log_file (bool): if true, save log output to a log file in logs_folder. @@ -98,7 +98,7 @@ def config( # if logging is turned on, log that we are configured if settings.log_file or settings.log_console: - log("Configured translater") + log("Configured trnslator") def validate_epversion(ep_version): @@ -660,7 +660,7 @@ def get_eplus_dirs(version=ep_version): def warn_if_not_compatible(): """Checks if an EnergyPlus install is detected. If the latest version - detected is higher than the one specified by translater, a warning is also + detected is higher than the one specified by trnslator, a warning is also raised. """ eplus_homes = get_eplus_basedirs() @@ -668,7 +668,7 @@ def warn_if_not_compatible(): if not eplus_homes: warnings.warn( "No installation of EnergyPlus could be detected on this " - "machine. Please install EnergyPlus from https://energyplus.net before using translater" + "machine. Please install EnergyPlus from https://energyplus.net before using trnslator" ) if len(eplus_homes) > 1: # more than one installs @@ -691,7 +691,7 @@ def get_eplus_basedirs(): return eplus_homes else: warnings.warn( - "translater is not compatible with %s. It is only compatible " + "trnslator is not compatible with %s. It is only compatible " "with Windows, Linux or MacOs" % platform.system() ) @@ -802,7 +802,7 @@ def parallel_process(in_dict, function, processors=-1, use_kwargs=True): """A parallel version of the map function with a progress btr. Examples: - >>> import translater as tr + >>> import trnslator as tr >>> files = ['tests/input_data/problematic/nat_ventilation_SAMPLE0.idf', >>> 'tests/input_data/regular/5ZoneNightVent1.idf'] >>> wf = 'tests/input_data/CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw'