From d9f49a0dbd18f04866d881f4045de86cc2699754 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 21 Nov 2022 10:42:22 -0700 Subject: [PATCH] Convert files with do2sunix --- .ci_support/pypi_vs_conda_names.json | 18 +-- .ci_support/update_environment.py | 144 ++++++++++----------- .github/workflows/UpdateDependabotPR.yml | 60 ++++----- CODE_OF_CONDUCT.md | 152 +++++++++++------------ LICENSE | 58 ++++----- MANIFEST.in | 6 +- README.rst | 48 +++---- pyiron_gui/__init__.py | 38 +++--- setup.cfg | 24 ++-- setup.py | 84 ++++++------- 10 files changed, 316 insertions(+), 316 deletions(-) diff --git a/.ci_support/pypi_vs_conda_names.json b/.ci_support/pypi_vs_conda_names.json index 9701b9c..917d1df 100644 --- a/.ci_support/pypi_vs_conda_names.json +++ b/.ci_support/pypi_vs_conda_names.json @@ -1,10 +1,10 @@ -{ - "tables": "pytables", - "pyiron-base": "pyiron_base", - "pyiron-atomistics": "pyiron_atomistics", - "pyiron-contrib": "pyiron_contrib", - "pyiron-experimental": "pyiron_experimental", - "pyiron-continuum": "pyiron_continuum", - "pyiron-gpl": "pyiron_gpl", - "pyiron-gui": "pyiron_gui" +{ + "tables": "pytables", + "pyiron-base": "pyiron_base", + "pyiron-atomistics": "pyiron_atomistics", + "pyiron-contrib": "pyiron_contrib", + "pyiron-experimental": "pyiron_experimental", + "pyiron-continuum": "pyiron_continuum", + "pyiron-gpl": "pyiron_gpl", + "pyiron-gui": "pyiron_gui" } \ No newline at end of file diff --git a/.ci_support/update_environment.py b/.ci_support/update_environment.py index 5e01eef..1a2f957 100644 --- a/.ci_support/update_environment.py +++ b/.ci_support/update_environment.py @@ -1,72 +1,72 @@ -# coding: utf-8 -# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department -# Distributed under the terms of "New BSD License", see the LICENSE file. - -import json -import re -import sys - -import yaml - -environment_file = '.ci_support/environment.yml' -name_mapping_file = '.ci_support/pypi_vs_conda_names.json' - - -class EnvironmentUpdater: - def __init__(self, package_name, from_version, to_version): - """ - Updates the version of a package in the conda environment file. - - Parameters: - package_name: Name of the package to update as available on PyPI - from_version: Version the package is before the update - to_version: Version to which the package should be updated - """ - self.from_version = from_version - self.to_version = to_version - with open(name_mapping_file, 'r') as f: - self._name_conversion_dict = json.load(f) - - with open(environment_file, 'r') as f: - self.environment = yaml.safe_load(f) - - self.package_name = self._convert_package_name(package_name) - - def _convert_package_name(self, name): - if name in self._name_conversion_dict.keys(): - result = self._name_conversion_dict[name] - else: - result = name - return result - - def _update_dependencies(self): - updated_dependencies = [] - - for dep in self.environment['dependencies']: - updated_dependencies.append(re.sub( - r'(' + self.package_name + '.*)' + self.from_version, - r'\g<1>' + self.to_version, - dep - )) - - self.environment['dependencies'] = updated_dependencies - - def _write(self): - with open(environment_file, 'w') as f: - yaml.safe_dump(self.environment, f) - - def update_dependencies(self): - """Update the version of the requested dependency in the environment file""" - self._update_dependencies() - self._write() - - -if len(sys.argv) != 7 or not (sys.argv[1] == 'Bump' and sys.argv[3] == 'from' and sys.argv[5] == 'to'): - raise ValueError(f"Title of a dependabot PR 'Bump from to ' expected, " - f"but got {' '.join(sys.argv[1:])}") -package_to_update = sys.argv[2] -from_version = sys.argv[4] -to_version = sys.argv[6] - -updater = EnvironmentUpdater(package_to_update, from_version, to_version) -updater.update_dependencies() +# coding: utf-8 +# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department +# Distributed under the terms of "New BSD License", see the LICENSE file. + +import json +import re +import sys + +import yaml + +environment_file = '.ci_support/environment.yml' +name_mapping_file = '.ci_support/pypi_vs_conda_names.json' + + +class EnvironmentUpdater: + def __init__(self, package_name, from_version, to_version): + """ + Updates the version of a package in the conda environment file. + + Parameters: + package_name: Name of the package to update as available on PyPI + from_version: Version the package is before the update + to_version: Version to which the package should be updated + """ + self.from_version = from_version + self.to_version = to_version + with open(name_mapping_file, 'r') as f: + self._name_conversion_dict = json.load(f) + + with open(environment_file, 'r') as f: + self.environment = yaml.safe_load(f) + + self.package_name = self._convert_package_name(package_name) + + def _convert_package_name(self, name): + if name in self._name_conversion_dict.keys(): + result = self._name_conversion_dict[name] + else: + result = name + return result + + def _update_dependencies(self): + updated_dependencies = [] + + for dep in self.environment['dependencies']: + updated_dependencies.append(re.sub( + r'(' + self.package_name + '.*)' + self.from_version, + r'\g<1>' + self.to_version, + dep + )) + + self.environment['dependencies'] = updated_dependencies + + def _write(self): + with open(environment_file, 'w') as f: + yaml.safe_dump(self.environment, f) + + def update_dependencies(self): + """Update the version of the requested dependency in the environment file""" + self._update_dependencies() + self._write() + + +if len(sys.argv) != 7 or not (sys.argv[1] == 'Bump' and sys.argv[3] == 'from' and sys.argv[5] == 'to'): + raise ValueError(f"Title of a dependabot PR 'Bump from to ' expected, " + f"but got {' '.join(sys.argv[1:])}") +package_to_update = sys.argv[2] +from_version = sys.argv[4] +to_version = sys.argv[6] + +updater = EnvironmentUpdater(package_to_update, from_version, to_version) +updater.update_dependencies() diff --git a/.github/workflows/UpdateDependabotPR.yml b/.github/workflows/UpdateDependabotPR.yml index 606ab2b..a141de6 100644 --- a/.github/workflows/UpdateDependabotPR.yml +++ b/.github/workflows/UpdateDependabotPR.yml @@ -1,30 +1,30 @@ -name: UpdateDependabotPR - -on: - pull_request_target: - branches: [ master ] - -jobs: - build: - runs-on: ubuntu-latest - if: (github.actor == 'dependabot[bot]') - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.pull_request.head.ref }} # Check out the head of the actual branch, not the PR - fetch-depth: 0 # otherwise, you will fail to push refs to dest repo - token: ${{ secrets.DEPENDABOT_WORKFLOW_TOKEN }} - - name: UpdateEnvironmentFile - shell: bash -l {0} - run: | - python .ci_support/update_environment.py ${{ github.event.pull_request.title }} - - name: UpdateDependabotPR commit - run: | - git config --local user.email "pyiron@mpie.de" - git config --local user.name "pyiron-runner" - git commit -m "[dependabot skip] Update environment" -a - - name: UpdateDependabotPR push - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.DEPENDABOT_WORKFLOW_TOKEN }} - branch: ${{ github.event.pull_request.head.ref }} +name: UpdateDependabotPR + +on: + pull_request_target: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + if: (github.actor == 'dependabot[bot]') + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} # Check out the head of the actual branch, not the PR + fetch-depth: 0 # otherwise, you will fail to push refs to dest repo + token: ${{ secrets.DEPENDABOT_WORKFLOW_TOKEN }} + - name: UpdateEnvironmentFile + shell: bash -l {0} + run: | + python .ci_support/update_environment.py ${{ github.event.pull_request.title }} + - name: UpdateDependabotPR commit + run: | + git config --local user.email "pyiron@mpie.de" + git config --local user.name "pyiron-runner" + git commit -m "[dependabot skip] Update environment" -a + - name: UpdateDependabotPR push + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.DEPENDABOT_WORKFLOW_TOKEN }} + branch: ${{ github.event.pull_request.head.ref }} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 346e29b..92b4451 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,76 +1,76 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at pyiron@mpie.de. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at pyiron@mpie.de. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/LICENSE b/LICENSE index fab7b34..2f17b49 100644 --- a/LICENSE +++ b/LICENSE @@ -1,29 +1,29 @@ -BSD 3-Clause License - -Copyright (c) 2020, Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2020, Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/MANIFEST.in b/MANIFEST.in index 9cfd420..6ee05f5 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ -include versioneer.py -include pyiron_gui/_version.py -include LICENSE +include versioneer.py +include pyiron_gui/_version.py +include LICENSE diff --git a/README.rst b/README.rst index 87ce9cf..5abe305 100644 --- a/README.rst +++ b/README.rst @@ -1,24 +1,24 @@ -pyiron_gui -============ -.. image:: https://coveralls.io/repos/github/pyiron/pyiron_gui/badge.svg?branch=master - :target: https://coveralls.io/github/pyiron/pyiron_gui?branch=master - :alt: Coverage Status - -.. image:: https://anaconda.org/conda-forge/pyiron_gui/badges/latest_release_date.svg - :target: https://anaconda.org/conda-forge/pyiron_gui/ - :alt: Release_Date - -.. image:: https://github.com/pyiron/pyiron_gui/workflows/Python%20package/badge.svg - :target: https://github.com/pyiron//pyiron_gui/actions - :alt: Build Status - - -This repository is for GUI extensions to the overall pyiron framework. - -Getting started: ----------------- -Test pyiron with mybinder: - -.. image:: https://mybinder.org/badge_logo.svg - :target: https://mybinder.org/v2/gh/pyiron/pyiron_gui/master - :alt: mybinder +pyiron_gui +============ +.. image:: https://coveralls.io/repos/github/pyiron/pyiron_gui/badge.svg?branch=master + :target: https://coveralls.io/github/pyiron/pyiron_gui?branch=master + :alt: Coverage Status + +.. image:: https://anaconda.org/conda-forge/pyiron_gui/badges/latest_release_date.svg + :target: https://anaconda.org/conda-forge/pyiron_gui/ + :alt: Release_Date + +.. image:: https://github.com/pyiron/pyiron_gui/workflows/Python%20package/badge.svg + :target: https://github.com/pyiron//pyiron_gui/actions + :alt: Build Status + + +This repository is for GUI extensions to the overall pyiron framework. + +Getting started: +---------------- +Test pyiron with mybinder: + +.. image:: https://mybinder.org/badge_logo.svg + :target: https://mybinder.org/v2/gh/pyiron/pyiron_gui/master + :alt: mybinder diff --git a/pyiron_gui/__init__.py b/pyiron_gui/__init__.py index 417d223..6435009 100644 --- a/pyiron_gui/__init__.py +++ b/pyiron_gui/__init__.py @@ -1,19 +1,19 @@ -__version__ = "0.1" -__all__ = [] - -# desired API -from pyiron_gui.project.project import activate_gui -from pyiron_gui.project.project_browser import ( - ProjectBrowser, - DataContainerGUI, - HasGroupsBrowser, -) - -# monkey patching -import pyiron_gui.monkey_patching - - -from ._version import get_versions - -__version__ = get_versions()["version"] -del get_versions +__version__ = "0.1" +__all__ = [] + +# desired API +from pyiron_gui.project.project import activate_gui +from pyiron_gui.project.project_browser import ( + ProjectBrowser, + DataContainerGUI, + HasGroupsBrowser, +) + +# monkey patching +import pyiron_gui.monkey_patching + + +from ._version import get_versions + +__version__ = get_versions()["version"] +del get_versions diff --git a/setup.cfg b/setup.cfg index f10443d..9289961 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,12 +1,12 @@ - -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -VCS = git -style = pep440-pre -versionfile_source = pyiron_gui/_version.py -#versionfile_build = -tag_prefix = pyiron_gui- -parentdir_prefix = pyiron_gui + +# See the docstring in versioneer.py for instructions. Note that you must +# re-run 'versioneer.py setup' after changing this section, and commit the +# resulting files. + +[versioneer] +VCS = git +style = pep440-pre +versionfile_source = pyiron_gui/_version.py +#versionfile_build = +tag_prefix = pyiron_gui- +parentdir_prefix = pyiron_gui diff --git a/setup.py b/setup.py index c5086ee..cf9f2b0 100644 --- a/setup.py +++ b/setup.py @@ -1,42 +1,42 @@ -""" -Setuptools based setup module -""" -from setuptools import setup, find_packages - -import versioneer - -setup( - name='pyiron_gui', - version=versioneer.get_version(), - description='Repository for GUI plugins to the pyiron IDE.', - long_description='http://pyiron.org', - - url='https://github.com/pyiron/pyiron_gui', - author='Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department', - author_email='siemer@mpie.de', - license='BSD', - - classifiers=[ - 'Development Status :: 4 - Beta', - 'Topic :: Scientific/Engineering :: Physics', - 'License :: OSI Approved :: BSD License', - 'Intended Audience :: Science/Research', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10' - ], - - keywords='pyiron', - packages=find_packages(exclude=["*tests*", "*docs*", "*binder*", "*conda*", "*notebooks*", "*.ci_support*"]), - install_requires=[ - 'pyiron_base==0.5.28', - 'pyiron_atomistics==0.2.59', - 'ipywidgets==7.7.1', - 'matplotlib==3.6.2', - 'numpy==1.23.4', - 'pandas==1.5.1', - ] -) +""" +Setuptools based setup module +""" +from setuptools import setup, find_packages + +import versioneer + +setup( + name='pyiron_gui', + version=versioneer.get_version(), + description='Repository for GUI plugins to the pyiron IDE.', + long_description='http://pyiron.org', + + url='https://github.com/pyiron/pyiron_gui', + author='Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department', + author_email='siemer@mpie.de', + license='BSD', + + classifiers=[ + 'Development Status :: 4 - Beta', + 'Topic :: Scientific/Engineering :: Physics', + 'License :: OSI Approved :: BSD License', + 'Intended Audience :: Science/Research', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10' + ], + + keywords='pyiron', + packages=find_packages(exclude=["*tests*", "*docs*", "*binder*", "*conda*", "*notebooks*", "*.ci_support*"]), + install_requires=[ + 'pyiron_base==0.5.28', + 'pyiron_atomistics==0.2.59', + 'ipywidgets==7.7.1', + 'matplotlib==3.6.2', + 'numpy==1.23.4', + 'pandas==1.5.1', + ] +)