From 92375098539686f4787bd1cf0fa86f6c317ba585 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:33:03 +0000 Subject: [PATCH 01/44] Bump tables from 3.10.1 to 3.10.2 Bumps [tables](https://github.com/PyTables/PyTables) from 3.10.1 to 3.10.2. - [Release notes](https://github.com/PyTables/PyTables/releases) - [Changelog](https://github.com/PyTables/PyTables/blob/master/RELEASE_NOTES.rst) - [Commits](https://github.com/PyTables/PyTables/compare/v3.10.1...v3.10.2) --- updated-dependencies: - dependency-name: tables dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7117b657d..82d849ae7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "pyiron_snippets==0.1.4", "pysqa==0.2.3", "sqlalchemy==2.0.36", - "tables==3.10.1", + "tables==3.10.2", "tqdm==4.67.1", "traitlets==5.14.3", ] From 3158ae914abf88b054c4adbbee7f5fa1106e2133 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:33:15 +0000 Subject: [PATCH 02/44] [dependabot skip] Update environment --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-mini.yml | 2 +- .ci_support/environment.yml | 2 +- binder/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 3e8c287d7..d27cdf521 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -22,7 +22,7 @@ dependencies: - pyiron_snippets =0.1.4 - executorlib =0.0.7 - pysqa =0.2.3 -- pytables =3.10.1 +- pytables =3.10.2 - sqlalchemy =2.0.36 - tqdm =4.67.1 - traitlets =5.14.3 diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index 2d8c86c3d..ab5b3da4e 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -13,7 +13,7 @@ dependencies: - pyiron_snippets =0.1.3 - executorlib =0.0.7 - pysqa =0.2.3 -- pytables =3.10.1 +- pytables =3.10.2 - sqlalchemy =2.0.36 - tqdm =4.67.1 - traitlets =5.14.3 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 8e71723a6..91d91a747 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -20,7 +20,7 @@ dependencies: - pyiron_snippets =0.1.4 - executorlib =0.0.7 - pysqa =0.2.3 -- pytables =3.10.1 +- pytables =3.10.2 - sqlalchemy =2.0.36 - tqdm =4.67.1 - traitlets =5.14.3 diff --git a/binder/environment.yml b/binder/environment.yml index 57b91ad77..87f12c90e 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -19,7 +19,7 @@ dependencies: - pyiron_snippets =0.1.4 - executorlib =0.0.7 - pysqa =0.2.3 -- pytables =3.10.1 +- pytables =3.10.2 - sqlalchemy =2.0.36 - tqdm =4.67.1 - traitlets =5.14.3 From 48141653b6490eddec3b4227c37720f6afb70338 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 6 Jan 2025 11:10:57 +0100 Subject: [PATCH 03/44] Update unittests.yml --- .github/workflows/unittests.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 5bcc6fe3e..5f58c3780 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -30,10 +30,6 @@ jobs: - operating-system: ubuntu-latest python-version: '3.11' label: linux-64-py-3-11 - - - operating-system: ubuntu-latest - python-version: '3.10' - label: linux-64-py-3-10 steps: - uses: actions/checkout@v4 From c39198cede3739698610de64c466e1fa5c237eff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 04:19:09 +0000 Subject: [PATCH 04/44] Bump sqlalchemy from 2.0.36 to 2.0.37 Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.36 to 2.0.37. - [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases) - [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst) - [Commits](https://github.com/sqlalchemy/sqlalchemy/commits) --- updated-dependencies: - dependency-name: sqlalchemy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 40336f8c2..cb9c40edb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ dependencies = [ "pyiron_dataclasses==0.0.1", "pyiron_snippets==0.1.4", "pysqa==0.2.3", - "sqlalchemy==2.0.36", + "sqlalchemy==2.0.37", "tables==3.10.1", "tqdm==4.67.1", "traitlets==5.14.3", From 609a5a4d7f4b2cd51be04b16e3abcf5761c360f0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 04:19:28 +0000 Subject: [PATCH 05/44] [dependabot skip] Update environment --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-mini.yml | 2 +- .ci_support/environment.yml | 2 +- binder/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 488783fd4..eca2abc88 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -23,7 +23,7 @@ dependencies: - executorlib =0.0.7 - pysqa =0.2.3 - pytables =3.10.1 -- sqlalchemy =2.0.36 +- sqlalchemy =2.0.37 - tqdm =4.67.1 - traitlets =5.14.3 - jupyter-book =1.0.0 diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index 3a265d99d..b0268bf9b 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -14,7 +14,7 @@ dependencies: - executorlib =0.0.7 - pysqa =0.2.3 - pytables =3.10.1 -- sqlalchemy =2.0.36 +- sqlalchemy =2.0.37 - tqdm =4.67.1 - traitlets =5.14.3 - setuptools diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 681c7ed7e..a66197082 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -21,6 +21,6 @@ dependencies: - executorlib =0.0.7 - pysqa =0.2.3 - pytables =3.10.1 -- sqlalchemy =2.0.36 +- sqlalchemy =2.0.37 - tqdm =4.67.1 - traitlets =5.14.3 diff --git a/binder/environment.yml b/binder/environment.yml index ec0485615..aeef5eb4b 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -20,6 +20,6 @@ dependencies: - executorlib =0.0.7 - pysqa =0.2.3 - pytables =3.10.1 -- sqlalchemy =2.0.36 +- sqlalchemy =2.0.37 - tqdm =4.67.1 - traitlets =5.14.3 From 9638664c8b120cb0d9116604b25910c39db2d4de Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 13 Jan 2025 15:42:12 +0100 Subject: [PATCH 06/44] Change username during copy --- pyiron_base/jobs/job/core.py | 1 + pyiron_base/jobs/job/util.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pyiron_base/jobs/job/core.py b/pyiron_base/jobs/job/core.py index a018d1158..3d9342c64 100644 --- a/pyiron_base/jobs/job/core.py +++ b/pyiron_base/jobs/job/core.py @@ -876,6 +876,7 @@ def _internal_copy_to( _copy_database_entry( new_job_core=new_job_core, job_copied_id=self.job_id, + user_name=state.settings.login_user, ) else: new_job_core.reset_job_id(job_id=None) diff --git a/pyiron_base/jobs/job/util.py b/pyiron_base/jobs/job/util.py index 5e8dc9116..639f0fd79 100644 --- a/pyiron_base/jobs/job/util.py +++ b/pyiron_base/jobs/job/util.py @@ -42,7 +42,9 @@ def _copy_database_entry( - new_job_core: "pyiron_base.jobs.job.generic.GenericJob", job_copied_id: int + new_job_core: "pyiron_base.jobs.job.generic.GenericJob", + job_copied_id: int, + user_name: Optional[str] = None, ) -> None: """ Copy database entry from previous job @@ -57,6 +59,8 @@ def _copy_database_entry( db_entry["subjob"] = new_job_core.project_hdf5.h5_path db_entry["project"] = new_job_core.project_hdf5.project_path db_entry["projectpath"] = new_job_core.project_hdf5.root_path + if username is not None: + db_entry["username"] = username del db_entry["id"] job_id = new_job_core.project.db.add_item_dict(db_entry) new_job_core.reset_job_id(job_id=job_id) From 93e0f68dd03239fc8e1122a2842ec5ec7baed927 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 13 Jan 2025 16:04:30 +0100 Subject: [PATCH 07/44] Update util.py --- pyiron_base/jobs/job/util.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyiron_base/jobs/job/util.py b/pyiron_base/jobs/job/util.py index 639f0fd79..2d66a8e34 100644 --- a/pyiron_base/jobs/job/util.py +++ b/pyiron_base/jobs/job/util.py @@ -44,7 +44,7 @@ def _copy_database_entry( new_job_core: "pyiron_base.jobs.job.generic.GenericJob", job_copied_id: int, - user_name: Optional[str] = None, + username: Optional[str] = None, ) -> None: """ Copy database entry from previous job @@ -52,6 +52,7 @@ def _copy_database_entry( Args: new_job_core (GenericJob): Copy of the job object job_copied_id (int): Job id of the copied job + username (str): Optional name of the user to transfer the job to """ db_entry = new_job_core.project.db.get_item_by_id(job_copied_id) if db_entry is not None: From a487823ffd8b73758300b4877efad2493da60fdd Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 13 Jan 2025 16:04:56 +0100 Subject: [PATCH 08/44] Update core.py --- pyiron_base/jobs/job/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyiron_base/jobs/job/core.py b/pyiron_base/jobs/job/core.py index 3d9342c64..1e1c1de28 100644 --- a/pyiron_base/jobs/job/core.py +++ b/pyiron_base/jobs/job/core.py @@ -876,7 +876,7 @@ def _internal_copy_to( _copy_database_entry( new_job_core=new_job_core, job_copied_id=self.job_id, - user_name=state.settings.login_user, + username=state.settings.login_user, ) else: new_job_core.reset_job_id(job_id=None) From 395e8f5fa387b5cad1c8707e793ae1e2df87af4a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 21:12:08 +0000 Subject: [PATCH 09/44] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.8.6 → v0.9.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.8.6...v0.9.1) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3b10414e2..6828f747b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.8.6 + rev: v0.9.1 hooks: - id: ruff name: ruff lint From d067c6ffb9a82a2076baac9b85f9dc06718355ae Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 21:12:28 +0000 Subject: [PATCH 10/44] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pyiron_base/cli/control.py | 2 +- pyiron_base/jobs/master/list.py | 2 +- pyiron_base/jobs/master/parallel.py | 2 +- pyiron_base/storage/flattenedstorage.py | 2 +- tests/unit/database/test_database_access.py | 2 +- tests/unit/job/test_jobtypechoice.py | 9 ++++----- tests/unit/project/test_jobloader.py | 3 +-- 7 files changed, 10 insertions(+), 12 deletions(-) diff --git a/pyiron_base/cli/control.py b/pyiron_base/cli/control.py index cafc57c65..4b3ba5416 100644 --- a/pyiron_base/cli/control.py +++ b/pyiron_base/cli/control.py @@ -54,7 +54,7 @@ def main() -> None: mod.register(sub_parser) except AttributeError: warnings.warn( - "module '{}' does not define main or register " "function, ignoring" + "module '{}' does not define main or register function, ignoring" ) args = parser.parse_args() diff --git a/pyiron_base/jobs/master/list.py b/pyiron_base/jobs/master/list.py index 13d233c50..e2c255f3a 100644 --- a/pyiron_base/jobs/master/list.py +++ b/pyiron_base/jobs/master/list.py @@ -218,7 +218,7 @@ def run_if_refresh(self): Internal helper function the run if refresh function is called when the job status is 'refresh'. If the job was suspended previously, the job is going to be started again, to be continued. """ - log_str = "{}, status: {}, finished: {} parallel master " "refresh".format( + log_str = "{}, status: {}, finished: {} parallel master refresh".format( self.job_info_str, self.status, self.is_finished() ) self._logger.info(log_str) diff --git a/pyiron_base/jobs/master/parallel.py b/pyiron_base/jobs/master/parallel.py index c68520851..f22635a95 100644 --- a/pyiron_base/jobs/master/parallel.py +++ b/pyiron_base/jobs/master/parallel.py @@ -308,7 +308,7 @@ def run_if_refresh(self): Internal helper function the run if refresh function is called when the job status is 'refresh'. If the job was suspended previously, the job is going to be started again, to be continued. """ - log_str = "{}, status: {}, finished: {} parallel master " "refresh".format( + log_str = "{}, status: {}, finished: {} parallel master refresh".format( self.job_info_str, self.status, self.is_finished() ) self._logger.info(log_str) diff --git a/pyiron_base/storage/flattenedstorage.py b/pyiron_base/storage/flattenedstorage.py index f6a0dfe43..693686741 100644 --- a/pyiron_base/storage/flattenedstorage.py +++ b/pyiron_base/storage/flattenedstorage.py @@ -1040,7 +1040,7 @@ def read_array(name, hdf): # itemsize of original a is four bytes per character, so divide by four to get # length of the orignal stored unicode string; np.dtype('U1').itemsize is just a # platform agnostic way of knowing how wide a unicode charater is for numpy - dtype=f"U{a.dtype.itemsize//np.dtype('U1').itemsize}", + dtype=f"U{a.dtype.itemsize // np.dtype('U1').itemsize}", ) return a diff --git a/tests/unit/database/test_database_access.py b/tests/unit/database/test_database_access.py index b08c94284..b4bbfd3a2 100644 --- a/tests/unit/database/test_database_access.py +++ b/tests/unit/database/test_database_access.py @@ -107,7 +107,7 @@ def test_get_items_sql(self): # be sure that get_items_sql returns right result with right statement result = self.database.get_items_sql( where_condition="", - sql_statement="select * from simulation " "where id=%s" % key, + sql_statement="select * from simulation where id=%s" % key, )[-1] self.assertTrue(par_dict.items() <= result.items()) diff --git a/tests/unit/job/test_jobtypechoice.py b/tests/unit/job/test_jobtypechoice.py index a358c155c..8da717725 100644 --- a/tests/unit/job/test_jobtypechoice.py +++ b/tests/unit/job/test_jobtypechoice.py @@ -33,7 +33,7 @@ def test_attr(self): getattr(self.jobtypechoice, k) except AttributeError: self.fail( - "job class {} in JOB_CLASS_DICT, but not on " "JobTypeChoice".format(k) + "job class {} in JOB_CLASS_DICT, but not on JobTypeChoice".format(k) ) def test_extend_job_class_dict(self): @@ -44,14 +44,13 @@ def test_extend_job_class_dict(self): JOB_CLASS_DICT["TestClass"] = "my.own.test.module" self.assertTrue( "TestClass" in dir(self.jobtypechoice), - "new job class added to JOB_CLASS_DICT, but not " "returned in dir()", + "new job class added to JOB_CLASS_DICT, but not returned in dir()", ) try: getattr(self.jobtypechoice, "TestClass") except AttributeError: self.fail( - "new job class added to JOB_CLASS_DICT, but not defined " - "JobTypeChoice" + "new job class added to JOB_CLASS_DICT, but not defined JobTypeChoice" ) @@ -81,5 +80,5 @@ def test_attr(self): getattr(self.job_factory, k) except AttributeError: self.fail( - "job class {} in JOB_CLASS_DICT, but not on " "JobTypeChoice".format(k) + "job class {} in JOB_CLASS_DICT, but not on JobTypeChoice".format(k) ) diff --git a/tests/unit/project/test_jobloader.py b/tests/unit/project/test_jobloader.py index 7b3573ffd..59b13c139 100644 --- a/tests/unit/project/test_jobloader.py +++ b/tests/unit/project/test_jobloader.py @@ -22,8 +22,7 @@ def test_load(self): self.assertEqual( len(self.project.job_table()), len(self.project.load.__dir__()), - msg="Tab completion (`__dir__`) should see both jobs at this project " - "level", + msg="Tab completion (`__dir__`) should see both jobs at this project level", # Note: When job names are duplicated at different sub-project levels, the # job name occurs in the __dir__ multiple times, even though it will only # show up in the tab-completion menu once (where it accesses the top-most From 203a174481c27d3627f99ccf9433047d1100441a Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Tue, 14 Jan 2025 08:34:49 +0100 Subject: [PATCH 11/44] Update .readthedocs.yml --- .readthedocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 6bb1b86ef..85a1960dd 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -21,10 +21,11 @@ build: # Build documentation in the docs/ directory with Sphinx sphinx: builder: html + configuration: docs/conf.py # Optionally build your docs in additional formats such as PDF and ePub formats: [] # Install pyiron from conda conda: - environment: .ci_support/environment-docs.yml \ No newline at end of file + environment: .ci_support/environment-docs.yml From 44e762612471807696aaae15e94e8c4c7c8c1b38 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Tue, 14 Jan 2025 09:30:03 +0100 Subject: [PATCH 12/44] Read the docs OS update --- .readthedocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 85a1960dd..1bbb7ec71 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -6,9 +6,9 @@ version: 2 build: - os: "ubuntu-22.04" + os: "ubuntu-24.04" tools: - python: "mambaforge-22.9" + python: "mambaforge-23.11" jobs: pre_build: # Generate the Sphinx configuration for this Jupyter Book so it builds. From 3fd516a3524611ceddbc53050ae8beef98cc36ad Mon Sep 17 00:00:00 2001 From: jan-janssen Date: Wed, 15 Jan 2025 07:58:43 +0100 Subject: [PATCH 13/44] delayed: handling of lists as result --- pyiron_base/project/delayed.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyiron_base/project/delayed.py b/pyiron_base/project/delayed.py index 39fb0ff7b..55121da8b 100644 --- a/pyiron_base/project/delayed.py +++ b/pyiron_base/project/delayed.py @@ -261,6 +261,13 @@ def draw(self): def get_python_result(self): if isinstance(self._result, dict): return self._result[self._output_key] + elif isinstance(self._result, list): + if self._list_index is not None: + return self._result[self._list_index] + elif self._output_key is not None: + return self._result[int(self._output_key)] + else: + return self._result else: return getattr(self._result.output, self._output_key) From 51659ebbddd1049474e48eb648c49feee5cbff59 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Wed, 15 Jan 2025 10:57:20 +0100 Subject: [PATCH 14/44] Remove get_items_sql from DatabaseAccess Its unit tests are removed, but the method is retained because it is used in the unit tests from _get_items_dict --- pyiron_base/database/filetable.py | 2 +- pyiron_base/database/generic.py | 98 +----------- tests/unit/database/test_database_access.py | 165 ++++++++++++-------- 3 files changed, 101 insertions(+), 164 deletions(-) diff --git a/pyiron_base/database/filetable.py b/pyiron_base/database/filetable.py index 7a6d789bc..ad1194a9a 100644 --- a/pyiron_base/database/filetable.py +++ b/pyiron_base/database/filetable.py @@ -280,7 +280,7 @@ def get_items_dict( return_all_columns (bool): return all columns or only the 'id' - still the format stays the same. Returns: - list: the function returns a list of dicts like get_items_sql, but it does not format datetime: + list: the function returns a list of dicts, but it does not format datetime: [{'chemicalformula': u'Ni108', 'computer': u'mapc157', 'hamilton': u'LAMMPS', diff --git a/pyiron_base/database/generic.py b/pyiron_base/database/generic.py index f85b25f44..75a590fc0 100644 --- a/pyiron_base/database/generic.py +++ b/pyiron_base/database/generic.py @@ -281,7 +281,7 @@ def _job_dict( element_lst (list): list of elements required in the chemical formular - by default None Returns: - list: the function returns a list of dicts like get_items_sql, but it does not format datetime: + list: the function returns a list of dicts, but it does not format datetime: [{'chemicalformula': u'Ni108', 'computer': u'mapc157', 'hamilton': u'LAMMPS', @@ -502,100 +502,6 @@ def change_column_type( else: raise PermissionError("Not avilable in viewer mode.") - def get_items_sql( - self, where_condition: Optional[str] = None, sql_statement: Optional[str] = None - ) -> List[dict]: - """ - Submit an SQL query to the database - - Args: - where_condition (str): SQL where query, query like: "project LIKE 'lammps.phonons.Ni_fcc%'" - sql_statement (str): general SQL query, normal SQL statement - - Returns: - list: get a list of dictionaries, where each dictionary represents one item of the table like: - [{u'chemicalformula': u'BO', - u'computer': u'localhost', - u'hamilton': u'VAMPS', - u'hamversion': u'1.1', - u'id': 1, - u'job': u'testing', - u'masterid': None, - u'parentid': 0, - u'project': u'database.testing', - u'projectpath': u'/TESTING', - u'status': u'KAAAA', - u'subjob': u'testJob', - u'timestart': u'2016-05-02 11:31:04.253377', - u'timestop': u'2016-05-02 11:31:04.371165', - u'totalcputime': 0.117788, - u'username': u'User'}, - {u'chemicalformula': u'BO', - u'computer': u'localhost', - u'hamilton': u'VAMPS', - u'hamversion': u'1.1', - u'id': 2, - u'job': u'testing', - u'masterid': 0, - u'parentid': 0, - u'project': u'database.testing', - u'projectpath': u'/TESTING', - u'status': u'KAAAA', - u'subjob': u'testJob', - u'timestart': u'2016-05-02 11:31:04.253377', - u'timestop': u'2016-05-02 11:31:04.371165', - u'totalcputime': 0.117788, - u'username': u'User'}.....] - """ - - if where_condition: - where_condition = ( - where_condition.replace("like", "similar to") - if self._engine.dialect.name == "postgresql" - else where_condition - ) - try: - query = "select * from " + self.table_name + " where " + where_condition - query.replace("%", "%%") - result = self.conn.execute(text(query)) - except Exception as except_msg: - print("EXCEPTION in get_items_sql: ", except_msg) - raise ValueError("EXCEPTION in get_items_sql: ", except_msg) - elif sql_statement: - sql_statement = ( - sql_statement.replace("like", "similar to") - if self._engine.dialect.name == "postgresql" - else sql_statement - ) - # TODO: make it save against SQL injection - result = self.conn.execute(text(sql_statement)) - else: - result = self.conn.execute(text("select * from " + self.table_name)) - row = result.mappings().all() - if not self._keep_connection: - self.conn.close() - - # change the date of str datatype back into datetime object - output_list = [] - for col in row: - # ensures working with db entries, which are camel case - timestop_index = [item.lower() for item in col.keys()].index("timestop") - timestart_index = [item.lower() for item in col.keys()].index("timestart") - tmp_values = list(col.values()) - if (tmp_values[timestop_index] and tmp_values[timestart_index]) is not None: - # changes values - try: - tmp_values[timestop_index] = datetime.strptime( - str(tmp_values[timestop_index]), "%Y-%m-%d %H:%M:%S.%f" - ) - tmp_values[timestart_index] = datetime.strptime( - str(tmp_values[timestart_index]), "%Y-%m-%d %H:%M:%S.%f" - ) - except ValueError: - print("error in: ", str(col)) - output_list += [dict(zip(col.keys(), tmp_values))] - return output_list - def _check_chem_formula_length(self, par_dict: dict) -> dict: """ performs a check whether the length of chemical formula exceeds the defined limit @@ -900,7 +806,7 @@ def get_items_dict( return_all_columns (bool): return all columns or only the 'id' - still the format stays the same. Returns: - list: the function returns a list of dicts like get_items_sql, but it does not format datetime: + list: the function returns a list of dicts, but it does not format datetime: [{'chemicalformula': u'Ni108', 'computer': u'mapc157', 'hamilton': u'LAMMPS', diff --git a/tests/unit/database/test_database_access.py b/tests/unit/database/test_database_access.py index b4bbfd3a2..9fa48b4d9 100644 --- a/tests/unit/database/test_database_access.py +++ b/tests/unit/database/test_database_access.py @@ -16,10 +16,105 @@ from datetime import datetime from random import choice from string import ascii_uppercase +from typing import List, Optional from pyiron_base.database.generic import DatabaseAccess from pyiron_base._tests import PyironTestCase from sqlalchemy import text +# legacy method of DatabaseAccess; kept here only to test _get_items_dict +def get_items_sql( + self, where_condition: Optional[str] = None, sql_statement: Optional[str] = None +) -> List[dict]: + """ + Submit an SQL query to the database + + Args: + where_condition (str): SQL where query, query like: "project LIKE 'lammps.phonons.Ni_fcc%'" + sql_statement (str): general SQL query, normal SQL statement + + Returns: + list: get a list of dictionaries, where each dictionary represents one item of the table like: + [{u'chemicalformula': u'BO', + u'computer': u'localhost', + u'hamilton': u'VAMPS', + u'hamversion': u'1.1', + u'id': 1, + u'job': u'testing', + u'masterid': None, + u'parentid': 0, + u'project': u'database.testing', + u'projectpath': u'/TESTING', + u'status': u'KAAAA', + u'subjob': u'testJob', + u'timestart': u'2016-05-02 11:31:04.253377', + u'timestop': u'2016-05-02 11:31:04.371165', + u'totalcputime': 0.117788, + u'username': u'User'}, + {u'chemicalformula': u'BO', + u'computer': u'localhost', + u'hamilton': u'VAMPS', + u'hamversion': u'1.1', + u'id': 2, + u'job': u'testing', + u'masterid': 0, + u'parentid': 0, + u'project': u'database.testing', + u'projectpath': u'/TESTING', + u'status': u'KAAAA', + u'subjob': u'testJob', + u'timestart': u'2016-05-02 11:31:04.253377', + u'timestop': u'2016-05-02 11:31:04.371165', + u'totalcputime': 0.117788, + u'username': u'User'}.....] + """ + + if where_condition: + where_condition = ( + where_condition.replace("like", "similar to") + if self._engine.dialect.name == "postgresql" + else where_condition + ) + try: + query = "select * from " + self.table_name + " where " + where_condition + query.replace("%", "%%") + result = self.conn.execute(text(query)) + except Exception as except_msg: + print("EXCEPTION in get_items_sql: ", except_msg) + raise ValueError("EXCEPTION in get_items_sql: ", except_msg) + elif sql_statement: + sql_statement = ( + sql_statement.replace("like", "similar to") + if self._engine.dialect.name == "postgresql" + else sql_statement + ) + # TODO: make it save against SQL injection + result = self.conn.execute(text(sql_statement)) + else: + result = self.conn.execute(text("select * from " + self.table_name)) + row = result.mappings().all() + if not self._keep_connection: + self.conn.close() + + # change the date of str datatype back into datetime object + output_list = [] + for col in row: + # ensures working with db entries, which are camel case + timestop_index = [item.lower() for item in col.keys()].index("timestop") + timestart_index = [item.lower() for item in col.keys()].index("timestart") + tmp_values = list(col.values()) + if (tmp_values[timestop_index] and tmp_values[timestart_index]) is not None: + # changes values + try: + tmp_values[timestop_index] = datetime.strptime( + str(tmp_values[timestop_index]), "%Y-%m-%d %H:%M:%S.%f" + ) + tmp_values[timestart_index] = datetime.strptime( + str(tmp_values[timestart_index]), "%Y-%m-%d %H:%M:%S.%f" + ) + except ValueError: + print("error in: ", str(col)) + output_list += [dict(zip(col.keys(), tmp_values))] + return output_list class TestDatabaseAccess(PyironTestCase): """ @@ -81,70 +176,6 @@ def test_get_table_headings(self): for item in heading_list: self.assertTrue(item in self.database.get_table_headings()) - def test_get_items_sql(self): - """ - Tests get_items_sql function - Returns: - """ - self.add_items("Blub") - self.add_items("Bluk") - # has to return a list - self.assertIsInstance( - self.database.get_items_sql("chemicalformula LIKE 'Blu%'"), list - ) - self.assertRaises( - Exception, self.database.get_items_sql, "A Wrong where Clause" - ) # Where clause must be right - # A valid sqlstatement should also return a valid list - self.assertIsInstance( - self.database.get_items_sql( - where_condition="", sql_statement="select * from simulation" - ), - list, - ) - par_dict = self.add_items("BO") - key = par_dict["id"] - # be sure that get_items_sql returns right result with right statement - result = self.database.get_items_sql( - where_condition="", - sql_statement="select * from simulation where id=%s" % key, - )[-1] - self.assertTrue(par_dict.items() <= result.items()) - - def test_get_items_sql_like_regex(self): - """ - Tests the regex functionality of 'like' - Returns: - """ - elem1 = self.add_items("H4Ni2") - elem2 = self.add_items("H2") - elem3 = self.add_items("H6") - elem4 = self.add_items("HeNi2") - elem5 = self.add_items("H12Ni5") - elem6 = self.add_items("H12") - elem7 = self.add_items("He2") - - # H([0-9]*) matches H2, H6 and H12 - self.assertEqual( - [elem2, elem3, elem6], - self.database.get_items_sql(r"chemicalformula like 'H([0-9]*)'"), - ) - # He(\d)*(Ni)?\d* matches HeNi2, He2 - self.assertEqual( - [elem4, elem7], - self.database.get_items_sql(r"chemicalformula like 'He(\d)*(Ni)?\d*'"), - ) - # H\d*Ni\d* matches H4Ni2, H12Ni5 - self.assertEqual( - [elem1, elem5], - self.database.get_items_sql(r"chemicalformula like 'H\d*Ni\d*'"), - ) - # assert that not something random really is in the Database, recommended by Samuel Hartke - # Murat: 'Just ignore the line!' - self.assertEqual( - [], self.database.get_items_sql(r"chemicalformula like 'B\d[a-z]'") - ) - def test_add_item_dict(self): """ Tests add_item_dict function @@ -227,7 +258,7 @@ def test_get_items_dict_and(self): item_dict = {"hamilton": "VAMPE", "hamversion": "1.1"} self.assertEqual( self.database.get_items_dict(item_dict), - self.database.get_items_sql("hamilton='VAMPE' and hamversion='1.1'"), + get_items_sql(self.database, "hamilton='VAMPE' and hamversion='1.1'"), ) def test_get_items_dict_project(self): @@ -272,7 +303,7 @@ def test_get_items_dict_or(self): # tests an example or statement item_dict = {"chemicalformula": ["Blub", "Blab"]} # assert that both the sql and non-sql methods give the same result - sql_db = self.database.get_items_sql( + sql_db = get_items_sql(self.database, "chemicalformula='Blub' or chemicalformula='Blab'" ) dict_db = self.database.get_items_dict(item_dict) @@ -288,7 +319,7 @@ def test_get_items_dict_like(self): # tests an example like statement item_dict = {"status": "%AA%"} # assert that both the sql and non-sql methods give the same result - sql_db = self.database.get_items_sql("status like '%AA%'") + sql_db = get_items_sql(self.database, "status like '%AA%'") dict_db = self.database.get_items_dict(item_dict) for item in sql_db: self.assertTrue(item in dict_db) From 03109c1f9571ceced283aba738489e545df8afb9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:00:00 +0000 Subject: [PATCH 15/44] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/unit/database/test_database_access.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/unit/database/test_database_access.py b/tests/unit/database/test_database_access.py index 9fa48b4d9..07d0b42a4 100644 --- a/tests/unit/database/test_database_access.py +++ b/tests/unit/database/test_database_access.py @@ -21,6 +21,7 @@ from pyiron_base._tests import PyironTestCase from sqlalchemy import text + # legacy method of DatabaseAccess; kept here only to test _get_items_dict def get_items_sql( self, where_condition: Optional[str] = None, sql_statement: Optional[str] = None @@ -116,6 +117,7 @@ def get_items_sql( output_list += [dict(zip(col.keys(), tmp_values))] return output_list + class TestDatabaseAccess(PyironTestCase): """ Standard Unittest of the DatabaseAccess class @@ -303,8 +305,8 @@ def test_get_items_dict_or(self): # tests an example or statement item_dict = {"chemicalformula": ["Blub", "Blab"]} # assert that both the sql and non-sql methods give the same result - sql_db = get_items_sql(self.database, - "chemicalformula='Blub' or chemicalformula='Blab'" + sql_db = get_items_sql( + self.database, "chemicalformula='Blub' or chemicalformula='Blab'" ) dict_db = self.database.get_items_dict(item_dict) for item in sql_db: From 33ebfd1931c09c24dd60fd2bf8d6aeed61fd5b54 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Wed, 15 Jan 2025 14:12:41 +0100 Subject: [PATCH 16/44] Escape database queries Queries containing underscores take significantly longer when used in LIKE sql queries, often this is the result of filenames or directory paths containing them and not intended. If the sqlite backend is not used, no escaping is done. --- pyiron_base/database/generic.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/pyiron_base/database/generic.py b/pyiron_base/database/generic.py index 75a590fc0..13248271c 100644 --- a/pyiron_base/database/generic.py +++ b/pyiron_base/database/generic.py @@ -312,10 +312,26 @@ def _job_dict( 'username': u'test'},.......] """ + if not self._sql_lite: + def escape(s, escape_char='\\', special_chars="_%"): + """Insert escape_char in front of special_chars, unless present. + + Handles the cases where s already contains escaped characters, + including the escape character itself. + + Defaults for LIKE in SQL statements.""" + for c in special_chars: + if c in s: + s = s.replace(escape_char + c, c) + s = s.replace(c, escape_char + c) + return s + else: + def escape(s, escape_char='\\', special_chars="_%"): + return s dict_clause = {} # FOR GET_ITEMS_SQL: clause = [] if user is not None: - dict_clause["username"] = str(user) + dict_clause["username"] = escape(str(user)) # FOR GET_ITEMS_SQL: clause.append("username = '" + self.user + "'") if sql_query is not None: # FOR GET_ITEMS_SQL: clause.append(self.sql_query) @@ -329,18 +345,18 @@ def _job_dict( {str(element.split()[0]): element.split()[2] for element in cl_split} ) if job is not None: - dict_clause["job"] = str(job) + dict_clause["job"] = escape(str(job)) if project_path == "./": project_path = "" if recursive: - dict_clause["project"] = str(project_path) + "%" + dict_clause["project"] = escape(str(project_path)) + "%" else: - dict_clause["project"] = str(project_path) + dict_clause["project"] = escape(str(project_path)) if sub_job_name is None: dict_clause["subjob"] = None elif sub_job_name != "%": - dict_clause["subjob"] = str(sub_job_name) + dict_clause["subjob"] = escape(str(sub_job_name)) if element_lst is not None: dict_clause["element_lst"] = element_lst From 44028669fa2b5eedaed4db6f910e529f78069253 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:34:51 +0000 Subject: [PATCH 17/44] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pyiron_base/database/generic.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyiron_base/database/generic.py b/pyiron_base/database/generic.py index 13248271c..9a211d62e 100644 --- a/pyiron_base/database/generic.py +++ b/pyiron_base/database/generic.py @@ -313,7 +313,8 @@ def _job_dict( """ if not self._sql_lite: - def escape(s, escape_char='\\', special_chars="_%"): + + def escape(s, escape_char="\\", special_chars="_%"): """Insert escape_char in front of special_chars, unless present. Handles the cases where s already contains escaped characters, @@ -326,8 +327,10 @@ def escape(s, escape_char='\\', special_chars="_%"): s = s.replace(c, escape_char + c) return s else: - def escape(s, escape_char='\\', special_chars="_%"): + + def escape(s, escape_char="\\", special_chars="_%"): return s + dict_clause = {} # FOR GET_ITEMS_SQL: clause = [] if user is not None: From 2b04b40146c85d3f700b23d96774b03835dc150a Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Wed, 15 Jan 2025 13:54:51 +0000 Subject: [PATCH 18/44] Format black --- pyiron_base/database/generic.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyiron_base/database/generic.py b/pyiron_base/database/generic.py index 9a211d62e..853fcde16 100644 --- a/pyiron_base/database/generic.py +++ b/pyiron_base/database/generic.py @@ -326,6 +326,7 @@ def escape(s, escape_char="\\", special_chars="_%"): s = s.replace(escape_char + c, c) s = s.replace(c, escape_char + c) return s + else: def escape(s, escape_char="\\", special_chars="_%"): From feba57a000601e66abdf9f9a73fe02cfb693d904 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 15 Jan 2025 14:56:06 +0100 Subject: [PATCH 19/44] Update pyiron_base/jobs/job/util.py Co-authored-by: Niklas Siemer <70580458+niklassiemer@users.noreply.github.com> --- pyiron_base/jobs/job/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyiron_base/jobs/job/util.py b/pyiron_base/jobs/job/util.py index 2d66a8e34..8a8a962d5 100644 --- a/pyiron_base/jobs/job/util.py +++ b/pyiron_base/jobs/job/util.py @@ -52,7 +52,7 @@ def _copy_database_entry( Args: new_job_core (GenericJob): Copy of the job object job_copied_id (int): Job id of the copied job - username (str): Optional name of the user to transfer the job to + username (str): Optional name of the user to copy the job to """ db_entry = new_job_core.project.db.get_item_by_id(job_copied_id) if db_entry is not None: From 5ef7231025af7132a6b992ee76e15dc40dc8fa4d Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Wed, 15 Jan 2025 15:35:46 +0100 Subject: [PATCH 20/44] Clean up fetchall call --- pyiron_base/database/generic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyiron_base/database/generic.py b/pyiron_base/database/generic.py index 853fcde16..ace4ea4ad 100644 --- a/pyiron_base/database/generic.py +++ b/pyiron_base/database/generic.py @@ -900,10 +900,10 @@ def get_items_dict( self.conn.connection.create_function("like", 2, self.regexp) result = self.conn.execute(query) - row = result.fetchall() + results = [row._asdict() for row in result.fetchall()] if not self._keep_connection: self.conn.close() - return [dict(zip(col._mapping.keys(), col._mapping.values())) for col in row] + return results def get_job_status(self, job_id: int) -> Union[str, None]: try: From c9de1736b02631094eee20adc749473bb073dfc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 04:27:43 +0000 Subject: [PATCH 21/44] Bump executorlib from 0.0.7 to 0.0.8 Bumps [executorlib](https://github.com/pyiron/executorlib) from 0.0.7 to 0.0.8. - [Release notes](https://github.com/pyiron/executorlib/releases) - [Commits](https://github.com/pyiron/executorlib/compare/executorlib-0.0.7...executorlib-0.0.8) --- updated-dependencies: - dependency-name: executorlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 09bb24466..02fe91b11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ ] dependencies = [ "cloudpickle==3.1.0", - "executorlib==0.0.7", + "executorlib==0.0.8", "h5io_browser==0.1.5", "h5py==3.12.1", "numpy==2.2.1", From ca07bbecb746c545702b62555058769d025505ca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 04:28:01 +0000 Subject: [PATCH 22/44] [dependabot skip] Update environment --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-mini.yml | 2 +- .ci_support/environment.yml | 2 +- binder/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index f23f3317e..6f1fc479b 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -20,7 +20,7 @@ dependencies: - pyfileindex =0.0.32 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 -- executorlib =0.0.7 +- executorlib =0.0.8 - pysqa =0.2.3 - pytables =3.10.2 - sqlalchemy =2.0.37 diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index 84d0a3754..945ef4d37 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -11,7 +11,7 @@ dependencies: - pyfileindex =0.0.32 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.3 -- executorlib =0.0.7 +- executorlib =0.0.8 - pysqa =0.2.3 - pytables =3.10.2 - sqlalchemy =2.0.37 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index e348c2695..b7a016b63 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -18,7 +18,7 @@ dependencies: - pyfileindex =0.0.32 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 -- executorlib =0.0.7 +- executorlib =0.0.8 - pysqa =0.2.3 - pytables =3.10.2 - sqlalchemy =2.0.37 diff --git a/binder/environment.yml b/binder/environment.yml index 0d7ef6a73..cb0383bfb 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -17,7 +17,7 @@ dependencies: - pyfileindex =0.0.32 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 -- executorlib =0.0.7 +- executorlib =0.0.8 - pysqa =0.2.3 - pytables =3.10.2 - sqlalchemy =2.0.37 From ab84416e8e701364cb06cd53d950e816ff68a265 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 06:59:00 +0000 Subject: [PATCH 23/44] Bump cloudpickle from 3.1.0 to 3.1.1 Bumps [cloudpickle](https://github.com/cloudpipe/cloudpickle) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/cloudpipe/cloudpickle/releases) - [Changelog](https://github.com/cloudpipe/cloudpickle/blob/master/CHANGES.md) - [Commits](https://github.com/cloudpipe/cloudpickle/compare/v3.1.0...v3.1.1) --- updated-dependencies: - dependency-name: cloudpickle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 02fe91b11..9e4192a02 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", ] dependencies = [ - "cloudpickle==3.1.0", + "cloudpickle==3.1.1", "executorlib==0.0.8", "h5io_browser==0.1.5", "h5py==3.12.1", From e6bad0318367bf70d093290cc90e0b7765d9fd39 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 06:59:11 +0000 Subject: [PATCH 24/44] [dependabot skip] Update environment --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-mini.yml | 2 +- .ci_support/environment.yml | 2 +- binder/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 6f1fc479b..885c127bd 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -7,7 +7,7 @@ dependencies: - myst-parser - conda =24.7.1 - conda_subprocess =0.0.5 -- cloudpickle =3.1.0 +- cloudpickle =3.1.1 - gitpython =3.1.44 - h5io_browser =0.1.5 - h5py =3.12.1 diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index 945ef4d37..b8c30474c 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -1,7 +1,7 @@ channels: - conda-forge dependencies: -- cloudpickle =3.1.0 +- cloudpickle =3.1.1 - h5io_browser =0.1.5 - h5py =3.12.1 - monty =2024.12.10 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index b7a016b63..9197177a0 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -5,7 +5,7 @@ dependencies: - codacy-coverage - conda =24.7.1 - conda_subprocess =0.0.5 -- cloudpickle =3.1.0 +- cloudpickle =3.1.1 - gitpython =3.1.44 - h5io_browser =0.1.5 - h5py =3.12.1 diff --git a/binder/environment.yml b/binder/environment.yml index cb0383bfb..2d950d1bb 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -4,7 +4,7 @@ dependencies: - python - conda =24.7.1 - conda_subprocess =0.0.5 -- cloudpickle =3.1.0 +- cloudpickle =3.1.1 - gitpython =3.1.44 - h5io_browser =0.1.5 - h5py =3.12.1 From c16028a953aef680008d9ed1471162ea3c44aa00 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Jan 2025 14:42:38 +0100 Subject: [PATCH 25/44] Add test --- tests/unit/flex/test_decorator.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/unit/flex/test_decorator.py b/tests/unit/flex/test_decorator.py index 2db56c852..2c05de47f 100644 --- a/tests/unit/flex/test_decorator.py +++ b/tests/unit/flex/test_decorator.py @@ -41,6 +41,22 @@ def my_function_b(a, b=8): self.assertEqual(len(nodes_dict), 6) self.assertEqual(len(edges_lst), 6) + def test_delayed_return_types(self): + @job(output_key_lst=["a"]) + def my_function_a(a, b=8): + return {"a": a + b} + + @job(cores=2, output_key_lst=["0"]) + def my_function_b(a, b=8): + return [a + b] + + c = my_function_a(a=1, b=2, pyiron_project=self.project) + d = my_function_b(a=c.output.a, b=3, pyiron_project=self.project) + self.assertEqual(d.pull(), [6]) + nodes_dict, edges_lst = d.get_graph() + self.assertEqual(len(nodes_dict), 6) + self.assertEqual(len(edges_lst), 6) + if __name__ == "__main__": unittest.main() From 1ad74fb8e83e7ca9c80d3850abe4702e29e89ac7 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Jan 2025 14:58:19 +0100 Subject: [PATCH 26/44] Extend tests --- tests/unit/flex/test_decorator.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/unit/flex/test_decorator.py b/tests/unit/flex/test_decorator.py index 2c05de47f..20f8ebd04 100644 --- a/tests/unit/flex/test_decorator.py +++ b/tests/unit/flex/test_decorator.py @@ -42,19 +42,21 @@ def my_function_b(a, b=8): self.assertEqual(len(edges_lst), 6) def test_delayed_return_types(self): - @job(output_key_lst=["a"]) + @job def my_function_a(a, b=8): - return {"a": a + b} + return [a + b] @job(cores=2, output_key_lst=["0"]) def my_function_b(a, b=8): return [a + b] - c = my_function_a(a=1, b=2, pyiron_project=self.project) - d = my_function_b(a=c.output.a, b=3, pyiron_project=self.project) + c = my_function_a(a=1, b=2, pyiron_project=self.project, list_length=1) + for a in c: + d = my_function_b(a=a, b=3, pyiron_project=self.project) self.assertEqual(d.pull(), [6]) + self.assertEqual(c.pull(), [3]) nodes_dict, edges_lst = d.get_graph() - self.assertEqual(len(nodes_dict), 6) + self.assertEqual(len(nodes_dict), 7) self.assertEqual(len(edges_lst), 6) From 9efc7d92cc3f7bcc00d42f652713d7cab5fe53bd Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Fri, 17 Jan 2025 09:24:10 +0100 Subject: [PATCH 27/44] set to string --- pyiron_base/project/delayed.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pyiron_base/project/delayed.py b/pyiron_base/project/delayed.py index 55121da8b..f6aebb32f 100644 --- a/pyiron_base/project/delayed.py +++ b/pyiron_base/project/delayed.py @@ -259,7 +259,7 @@ def draw(self): draw(node_dict=node_dict, edge_lst=edge_lst) def get_python_result(self): - if isinstance(self._result, dict): + if isinstance(self._result, dict) and self._output_key is not None: return self._result[self._output_key] elif isinstance(self._result, list): if self._list_index is not None: @@ -268,8 +268,10 @@ def get_python_result(self): return self._result[int(self._output_key)] else: return self._result - else: + elif self._output_key is not None: return getattr(self._result.output, self._output_key) + else: + return self._result def get_file_result(self): return getattr(self._result.files, self._output_file) @@ -285,7 +287,7 @@ def pull(self): elif self._output_file is not None: return self.get_file_result() elif self._list_index is not None: - return self._result[self._list_index] + return self._result[str(self._list_index)] else: return self._result From e3bb84988034b9bb7b5316ec8fb31e824d6a676e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Fri, 17 Jan 2025 09:33:04 +0100 Subject: [PATCH 28/44] more fixes --- pyiron_base/project/delayed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyiron_base/project/delayed.py b/pyiron_base/project/delayed.py index f6aebb32f..10a3dc6bf 100644 --- a/pyiron_base/project/delayed.py +++ b/pyiron_base/project/delayed.py @@ -260,7 +260,7 @@ def draw(self): def get_python_result(self): if isinstance(self._result, dict) and self._output_key is not None: - return self._result[self._output_key] + return self._result[str(self._output_key)] elif isinstance(self._result, list): if self._list_index is not None: return self._result[self._list_index] From 8cb3dcbb06a31fb928398bc505d502223882ed0e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Fri, 17 Jan 2025 10:47:01 +0100 Subject: [PATCH 29/44] fixes --- pyiron_base/project/delayed.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyiron_base/project/delayed.py b/pyiron_base/project/delayed.py index 10a3dc6bf..0355b7595 100644 --- a/pyiron_base/project/delayed.py +++ b/pyiron_base/project/delayed.py @@ -286,7 +286,9 @@ def pull(self): return self.get_python_result() elif self._output_file is not None: return self.get_file_result() - elif self._list_index is not None: + elif isinstance(self._result, list) and self._list_index is not None: + return self._result[self._list_index] + elif isinstance(self._result, dict) and self._list_index is not None: return self._result[str(self._list_index)] else: return self._result From 7a3a8c9072808b3dcc3510fd4168510b65b312eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:17:10 +0000 Subject: [PATCH 30/44] Bump numpy from 2.2.1 to 2.2.2 Bumps [numpy](https://github.com/numpy/numpy) from 2.2.1 to 2.2.2. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.2.1...v2.2.2) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9e4192a02..8022b8215 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ dependencies = [ "executorlib==0.0.8", "h5io_browser==0.1.5", "h5py==3.12.1", - "numpy==2.2.1", + "numpy==2.2.2", "monty==2024.12.10", "pandas==2.2.3", "psutil==6.1.1", From b9d460481710e3d6a7fa0845fdf7156d3a81cb82 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:17:28 +0000 Subject: [PATCH 31/44] [dependabot skip] Update environment --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-mini.yml | 2 +- .ci_support/environment.yml | 2 +- binder/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 885c127bd..bec02e3fa 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -13,7 +13,7 @@ dependencies: - h5py =3.12.1 - jinja2 =3.1.5 - monty =2024.12.10 -- numpy =2.2.1 +- numpy =2.2.2 - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index b8c30474c..52e8d390b 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -5,7 +5,7 @@ dependencies: - h5io_browser =0.1.5 - h5py =3.12.1 - monty =2024.12.10 -- numpy =2.2.1 +- numpy =2.2.2 - pandas =2.2.3 - psutil =6.1.1 - pyfileindex =0.0.32 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 9197177a0..d2adb39c1 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -11,7 +11,7 @@ dependencies: - h5py =3.12.1 - jinja2 =3.1.5 - monty =2024.12.10 -- numpy =2.2.1 +- numpy =2.2.2 - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 diff --git a/binder/environment.yml b/binder/environment.yml index 2d950d1bb..056f70aea 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -10,7 +10,7 @@ dependencies: - h5py =3.12.1 - jinja2 =3.1.5 - monty =2024.12.10 -- numpy =2.2.1 +- numpy =2.2.2 - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 From 4a415945e639e675f9cb3812c634ea9f5cb52732 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 09:33:27 +0100 Subject: [PATCH 32/44] Update environment-docs.yml --- .ci_support/environment-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index bec02e3fa..601400629 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -9,7 +9,7 @@ dependencies: - conda_subprocess =0.0.5 - cloudpickle =3.1.1 - gitpython =3.1.44 -- h5io_browser =0.1.5 +- h5io_browser =0.1.6 - h5py =3.12.1 - jinja2 =3.1.5 - monty =2024.12.10 From 7a3355b008fc5eedffc1b5d8bb02ee55401e5b4c Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 09:33:45 +0100 Subject: [PATCH 33/44] Update environment-mini.yml --- .ci_support/environment-mini.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index 52e8d390b..5bffb48e1 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -2,7 +2,7 @@ channels: - conda-forge dependencies: - cloudpickle =3.1.1 -- h5io_browser =0.1.5 +- h5io_browser =0.1.6 - h5py =3.12.1 - monty =2024.12.10 - numpy =2.2.2 From 0d3d71b5e61334c54cd2ee205ad877dc13a04ade Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 09:34:02 +0100 Subject: [PATCH 34/44] Update environment.yml --- .ci_support/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index d2adb39c1..1991b40d0 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -7,7 +7,7 @@ dependencies: - conda_subprocess =0.0.5 - cloudpickle =3.1.1 - gitpython =3.1.44 -- h5io_browser =0.1.5 +- h5io_browser =0.1.6 - h5py =3.12.1 - jinja2 =3.1.5 - monty =2024.12.10 From 8f9b2779f131ff0c68d5e2071a7babb2a1a3673b Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 09:34:16 +0100 Subject: [PATCH 35/44] Update environment.yml --- binder/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binder/environment.yml b/binder/environment.yml index 056f70aea..885bb2a8a 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -6,7 +6,7 @@ dependencies: - conda_subprocess =0.0.5 - cloudpickle =3.1.1 - gitpython =3.1.44 -- h5io_browser =0.1.5 +- h5io_browser =0.1.6 - h5py =3.12.1 - jinja2 =3.1.5 - monty =2024.12.10 From 59613d285774e5120d6d4ac024d76eff95c3377e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 09:34:30 +0100 Subject: [PATCH 36/44] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8022b8215..fe1e3dc1e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ dependencies = [ "cloudpickle==3.1.1", "executorlib==0.0.8", - "h5io_browser==0.1.5", + "h5io_browser==0.1.6", "h5py==3.12.1", "numpy==2.2.2", "monty==2024.12.10", From 0a51271ba1895b5768ab42a858cb3c87ea266282 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 16:21:36 +0100 Subject: [PATCH 37/44] Update environment-docs.yml --- .ci_support/environment-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 601400629..5491ce5e9 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -17,7 +17,7 @@ dependencies: - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 - executorlib =0.0.8 From 513eda89727919cfe31b9e5938638b92cd057d04 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 16:21:54 +0100 Subject: [PATCH 38/44] Update environment-mini.yml --- .ci_support/environment-mini.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index 5bffb48e1..15810b10d 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -8,7 +8,7 @@ dependencies: - numpy =2.2.2 - pandas =2.2.3 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.3 - executorlib =0.0.8 From 727cac76a0b5d88994fbd8477629f538ef6e28ed Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 16:22:12 +0100 Subject: [PATCH 39/44] Update environment.yml --- .ci_support/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 1991b40d0..1ae4791b7 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -15,7 +15,7 @@ dependencies: - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 - executorlib =0.0.8 From 851ee1168734d809966110a3748e18a3352ce40a Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 16:22:32 +0100 Subject: [PATCH 40/44] Update environment.yml --- binder/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binder/environment.yml b/binder/environment.yml index 885bb2a8a..981963398 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -14,7 +14,7 @@ dependencies: - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 - executorlib =0.0.8 From 622029e9ab4663e6ac1d3b583945ed42dc43ac71 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 20 Jan 2025 16:22:58 +0100 Subject: [PATCH 41/44] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fe1e3dc1e..0dce7da3e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ dependencies = [ "monty==2024.12.10", "pandas==2.2.3", "psutil==6.1.1", - "pyfileindex==0.0.32", + "pyfileindex==0.0.33", "pyiron_dataclasses==0.0.1", "pyiron_snippets==0.1.4", "pysqa==0.2.3", From bcacb51706a9a718b2020ea51702825f5212877e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:08:10 +0000 Subject: [PATCH 42/44] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.9.1 → v0.9.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.9.1...v0.9.2) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6828f747b..07657a097 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.1 + rev: v0.9.2 hooks: - id: ruff name: ruff lint From 58854175bbdd143f686a8351227f2e423f1a7fbb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 04:37:46 +0000 Subject: [PATCH 43/44] Bump pyfileindex from 0.0.32 to 0.0.33 Bumps [pyfileindex](https://github.com/pyiron/pyfileindex) from 0.0.32 to 0.0.33. - [Release notes](https://github.com/pyiron/pyfileindex/releases) - [Commits](https://github.com/pyiron/pyfileindex/compare/pyfileindex-0.0.32...pyfileindex-0.0.33) --- updated-dependencies: - dependency-name: pyfileindex dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9e4192a02..b237d7cff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ dependencies = [ "monty==2024.12.10", "pandas==2.2.3", "psutil==6.1.1", - "pyfileindex==0.0.32", + "pyfileindex==0.0.33", "pyiron_dataclasses==0.0.1", "pyiron_snippets==0.1.4", "pysqa==0.2.3", From 4f1d81fb6b1985c6ca0bb354a21e33eeb2b41fa3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 04:40:53 +0000 Subject: [PATCH 44/44] [dependabot skip] Update environment --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-mini.yml | 2 +- .ci_support/environment.yml | 2 +- binder/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 885c127bd..d76de5a3a 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -17,7 +17,7 @@ dependencies: - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 - executorlib =0.0.8 diff --git a/.ci_support/environment-mini.yml b/.ci_support/environment-mini.yml index b8c30474c..fdd999580 100644 --- a/.ci_support/environment-mini.yml +++ b/.ci_support/environment-mini.yml @@ -8,7 +8,7 @@ dependencies: - numpy =2.2.1 - pandas =2.2.3 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.3 - executorlib =0.0.8 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 9197177a0..14f5e10fc 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -15,7 +15,7 @@ dependencies: - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 - executorlib =0.0.8 diff --git a/binder/environment.yml b/binder/environment.yml index 2d950d1bb..f220408f5 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -14,7 +14,7 @@ dependencies: - pandas =2.2.3 - pint =0.24.4 - psutil =6.1.1 -- pyfileindex =0.0.32 +- pyfileindex =0.0.33 - pyiron_dataclasses =0.0.1 - pyiron_snippets =0.1.4 - executorlib =0.0.8