From 3f3f50fddd537a6f2f9fef63163f6c07fb34c8d8 Mon Sep 17 00:00:00 2001 From: olivier Date: Thu, 17 Aug 2023 12:29:40 +0100 Subject: [PATCH 01/15] add habituation procedure to init fixtures --- alyx/actions/fixtures/actions.proceduretype.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/alyx/actions/fixtures/actions.proceduretype.json b/alyx/actions/fixtures/actions.proceduretype.json index 41e3a886f..e137094c2 100644 --- a/alyx/actions/fixtures/actions.proceduretype.json +++ b/alyx/actions/fixtures/actions.proceduretype.json @@ -14,7 +14,7 @@ "fields": { "name": "Water restriction", "json": null, - "description": "- Variation in the composition, constituents, quantity and/or availability of the diet and/or drinking water which may cause pain, suffering, distress or lasting harm - withholding of water" + "description": "- Variation in the compositigit con, constituents, quantity and/or availability of the diet and/or drinking water which may cause pain, suffering, distress or lasting harm - withholding of water" } }, { @@ -268,6 +268,15 @@ "json": null, "description": "Covers the acquisition of histological sections, the subsequent registration of slices to a common reference atlas and the eventual recovery of electrophysiology tracks through manual picking." } +}, + { + "model": "actions.proceduretype", + "pk": "e55c9ca1-3208-4b81-936f-75c0cf6e9565", + "fields": { + "name": "handling_habituation", + "json": null, + "description": "Rig habituation protocol for a new task and/or a new subject" + } }, { "model": "actions.proceduretype", From fd3a4207ca50cc7d13b951fef64edd757e7c6283 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 17 Aug 2023 11:37:02 +0000 Subject: [PATCH 02/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index e2e541dfa..a6f83da28 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -1,7 +1,7 @@ asgiref==3.7.2 backports.zoneinfo==0.2.1 -boto3==1.28.27 -botocore==1.31.27 +boto3==1.28.28 +botocore==1.31.28 certifi==2023.7.22 cffi==1.15.1 charset-normalizer==3.2.0 From 9f10d72f74a1cb6e889e53541617338f176af920 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 22 Aug 2023 10:16:56 +0000 Subject: [PATCH 03/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index a6f83da28..7d24ea1a2 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -1,11 +1,11 @@ asgiref==3.7.2 backports.zoneinfo==0.2.1 -boto3==1.28.28 -botocore==1.31.28 +boto3==1.28.31 +botocore==1.31.31 certifi==2023.7.22 cffi==1.15.1 charset-normalizer==3.2.0 -click==8.1.6 +click==8.1.7 colorlog==6.7.0 contourpy==1.1.0 coreapi==2.3.3 @@ -16,7 +16,7 @@ cryptography==41.0.3 cycler==0.11.0 Django==4.2.4 django-admin-list-filter-dropdown==1.0.3 -django-admin-rangefilter==0.10.0 +django-admin-rangefilter==0.11.0 django-autocomplete-light==3.9.7 django-cleanup==8.0.0 django-filter==21.1 @@ -33,7 +33,7 @@ docopt==0.6.2 docutils==0.20.1 drfdocs==0.0.11 flake8==6.1.0 -fonttools==4.42.0 +fonttools==4.42.1 globus-cli==3.16.0 globus-sdk==3.25.0 iblutil==1.7.0 From b53817b6ec62c5925e8ff7acf5ba0964c19d0d11 Mon Sep 17 00:00:00 2001 From: Miles Wells Date: Mon, 25 Sep 2023 16:15:34 +0300 Subject: [PATCH 04/15] Tag filter in dataset admin page --- alyx/data/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/alyx/data/admin.py b/alyx/data/admin.py index e2e9df01a..2950c0134 100644 --- a/alyx/data/admin.py +++ b/alyx/data/admin.py @@ -93,6 +93,7 @@ class DatasetAdmin(BaseExperimentalDataAdmin): list_filter = [('created_by', RelatedDropdownFilter), ('created_datetime', DateRangeFilter), ('dataset_type', RelatedDropdownFilter), + ('tags', RelatedDropdownFilter) ] search_fields = ('session__id', 'name', 'collection', 'dataset_type__name', 'dataset_type__filename_pattern', 'version') From 80771e430af3e927c76c44d6093776d244859c0c Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 25 Sep 2023 13:23:32 +0000 Subject: [PATCH 05/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 44 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index 7d24ea1a2..b2dfe7c4a 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -1,22 +1,22 @@ asgiref==3.7.2 backports.zoneinfo==0.2.1 -boto3==1.28.31 -botocore==1.31.31 +boto3==1.28.53 +botocore==1.31.53 certifi==2023.7.22 cffi==1.15.1 charset-normalizer==3.2.0 click==8.1.7 colorlog==6.7.0 -contourpy==1.1.0 +contourpy==1.1.1 coreapi==2.3.3 coreschema==0.0.4 coverage==6.5.0 coveralls==3.3.1 -cryptography==41.0.3 +cryptography==41.0.4 cycler==0.11.0 -Django==4.2.4 +Django==4.2.5 django-admin-list-filter-dropdown==1.0.3 -django-admin-rangefilter==0.11.0 +django-admin-rangefilter==0.11.1 django-autocomplete-light==3.9.7 django-cleanup==8.0.0 django-filter==21.1 @@ -24,8 +24,8 @@ django-ipware==5.0.0 django-js-asset==2.1.0 django-mptt==0.14.0 django-polymorphic==3.1.0 -django-reversion==5.0.4 -django-storages==1.13.2 +django-reversion==5.0.5 +django-storages==1.14 django-structlog==5.3.0 django-test-without-migrations==0.6 djangorestframework==3.14.0 @@ -34,38 +34,38 @@ docutils==0.20.1 drfdocs==0.0.11 flake8==6.1.0 fonttools==4.42.1 -globus-cli==3.16.0 -globus-sdk==3.25.0 +globus-cli==3.18.0 +globus-sdk==3.28.0 iblutil==1.7.0 idna==3.4 importlib-metadata==6.8.0 -importlib-resources==6.0.1 +importlib-resources==6.1.0 itypes==1.2.0 Jinja2==3.1.2 jmespath==1.0.1 -kiwisolver==1.4.4 -llvmlite==0.40.1 +kiwisolver==1.4.5 +llvmlite==0.41.0 lxml==4.9.3 Markdown==3.4.4 MarkupSafe==2.1.3 -matplotlib==3.7.2 +matplotlib==3.7.3 mccabe==0.7.0 -numba==0.57.1 +numba==0.58.0 numpy==1.24.4 -ONE-api==2.2.2 +ONE-api==2.3.0 packaging==23.1 pandas==2.0.3 -Pillow==10.0.0 +Pillow==10.0.1 psycopg2-binary==2.9.7 -pyarrow==12.0.1 +pyarrow==13.0.0 pycodestyle==2.11.0 pycparser==2.21 pyflakes==3.1.0 PyJWT==2.8.0 -pyparsing==3.0.9 +pyparsing==3.1.1 python-dateutil==2.8.2 python-magic==0.4.27 -pytz==2023.3 +pytz==2023.3.post1 PyYAML==6.0.1 requests==2.31.0 s3transfer==0.6.2 @@ -73,9 +73,9 @@ six==1.16.0 sqlparse==0.4.4 structlog==23.1.0 tqdm==4.66.1 -typing_extensions==4.7.1 +typing_extensions==4.8.0 tzdata==2023.3 uritemplate==4.1.1 urllib3==1.26.16 webdavclient3==3.14.6 -zipp==3.16.2 +zipp==3.17.0 From 68d45981db2c011ca57f92e6347a787d83781c77 Mon Sep 17 00:00:00 2001 From: Miles Wells Date: Thu, 12 Oct 2023 15:24:56 +0300 Subject: [PATCH 06/15] Exclude non-personal, non-globus endpoints from local file record delete --- alyx/data/transfers.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/alyx/data/transfers.py b/alyx/data/transfers.py index 523a352b1..01c219b3f 100644 --- a/alyx/data/transfers.py +++ b/alyx/data/transfers.py @@ -659,21 +659,22 @@ def globus_delete_local_datasets(datasets, dry=True, gc=None, label=None): """ For each dataset in the queryset delete the file records belonging to a Globus personal repo only if a server file exists and matches the size. - :param datasets: + :param datasets: data.models.Dataset query set :param label: label for the transfer :param dry: default True :return: """ # first get the list of Globus endpoints concerned - file_records = FileRecord.objects.filter(dataset__in=datasets) + file_records = FileRecord.objects.filter( + dataset__in=datasets, data_repository__globus_is_personal=True) + file_records = file_records.exclude(data_repository__globus_endpoint_id__isnull=True) globus_endpoints = file_records.values_list('data_repository__globus_endpoint_id', flat=True).distinct() label = label or 'alyx globus client' # create a globus delete_client for each globus endpoint gtc = gc or globus_transfer_client() - delete_clients = [] - for ge in globus_endpoints: - delete_clients.append(globus_sdk.DeleteData(gtc, ge, label=label)) + # Map of Globus endpoint UUID -> DeleteData client + delete_clients = {ge: globus_sdk.DeleteData(gtc, ge, label=label) for ge in globus_endpoints} def _ls_globus(file_record, add_uuid=False): N_RETRIES = 3 @@ -694,7 +695,6 @@ def _ls_globus(file_record, add_uuid=False): return [ls for ls in ls_obj['DATA'] if ls['name'] == path.name] # appends each file for deletion fr2delete = [] - del_client = [] for ds in datasets: # check the existence of the server file fr_server = ds.file_records.filter(exists=True, @@ -724,17 +724,16 @@ def _ls_globus(file_record, add_uuid=False): # the files exist local and remote, fr2delete.append(frloc.id) file2del = _filename_from_file_record(frloc) - del_client = [dc for dc in delete_clients if dc['endpoint'] == - str(frloc.data_repository.globus_endpoint_id)][0] + del_client = delete_clients[(gid := frloc.data_repository.globus_endpoint_id)] + assert del_client['endpoint'] == str(gid) del_client.add_item(file2del) logger.info('DELETE: ' + _filename_from_file_record(frloc)) # launch the deletion jobs and remove records from the database if dry: - return del_client - for dc in delete_clients: - # submitting a deletion without data will create an error - if dc['DATA'] == []: - continue + return delete_clients + # NB: filter empty clients as submitting a deletion without data will raise an error + for dc in filter(lambda x: x['DATA'], delete_clients.values()): + logger.info('Submitting delete for %i file(s) on %s', len(dc['DATA']), dc['endpoint']) gtc.submit_delete(dc) # remove file records frecs = FileRecord.objects.filter(id__in=fr2delete).exclude( From 50f89c5a4c2276d4e2c8d78526ba268bbf940633 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 13 Oct 2023 09:54:47 +0000 Subject: [PATCH 07/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index b2dfe7c4a..02f20aa71 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -1,10 +1,10 @@ asgiref==3.7.2 backports.zoneinfo==0.2.1 -boto3==1.28.53 -botocore==1.31.53 +boto3==1.28.63 +botocore==1.31.63 certifi==2023.7.22 -cffi==1.15.1 -charset-normalizer==3.2.0 +cffi==1.16.0 +charset-normalizer==3.3.0 click==8.1.7 colorlog==6.7.0 contourpy==1.1.1 @@ -13,30 +13,30 @@ coreschema==0.0.4 coverage==6.5.0 coveralls==3.3.1 cryptography==41.0.4 -cycler==0.11.0 -Django==4.2.5 +cycler==0.12.1 +Django==4.2.6 django-admin-list-filter-dropdown==1.0.3 -django-admin-rangefilter==0.11.1 +django-admin-rangefilter==0.11.2 django-autocomplete-light==3.9.7 django-cleanup==8.0.0 django-filter==21.1 -django-ipware==5.0.0 +django-ipware==5.0.1 django-js-asset==2.1.0 django-mptt==0.14.0 django-polymorphic==3.1.0 -django-reversion==5.0.5 -django-storages==1.14 -django-structlog==5.3.0 +django-reversion==5.0.6 +django-storages==1.14.2 +django-structlog==6.0.0 django-test-without-migrations==0.6 djangorestframework==3.14.0 docopt==0.6.2 docutils==0.20.1 drfdocs==0.0.11 flake8==6.1.0 -fonttools==4.42.1 +fonttools==4.43.1 globus-cli==3.18.0 globus-sdk==3.28.0 -iblutil==1.7.0 +iblutil==1.7.1 idna==3.4 importlib-metadata==6.8.0 importlib-resources==6.1.0 @@ -46,19 +46,19 @@ jmespath==1.0.1 kiwisolver==1.4.5 llvmlite==0.41.0 lxml==4.9.3 -Markdown==3.4.4 +Markdown==3.5 MarkupSafe==2.1.3 matplotlib==3.7.3 mccabe==0.7.0 numba==0.58.0 numpy==1.24.4 ONE-api==2.3.0 -packaging==23.1 +packaging==23.2 pandas==2.0.3 Pillow==10.0.1 -psycopg2-binary==2.9.7 +psycopg2-binary==2.9.9 pyarrow==13.0.0 -pycodestyle==2.11.0 +pycodestyle==2.11.1 pycparser==2.21 pyflakes==3.1.0 PyJWT==2.8.0 @@ -68,14 +68,14 @@ python-magic==0.4.27 pytz==2023.3.post1 PyYAML==6.0.1 requests==2.31.0 -s3transfer==0.6.2 +s3transfer==0.7.0 six==1.16.0 sqlparse==0.4.4 -structlog==23.1.0 +structlog==23.2.0 tqdm==4.66.1 typing_extensions==4.8.0 tzdata==2023.3 uritemplate==4.1.1 -urllib3==1.26.16 +urllib3==1.26.17 webdavclient3==3.14.6 zipp==3.17.0 From 04393fc9099af8747af1e229211cc4776a0ee8ab Mon Sep 17 00:00:00 2001 From: Miles Wells Date: Fri, 13 Oct 2023 17:06:35 +0300 Subject: [PATCH 08/15] mpciROIs.uuids dataset type fixture --- alyx/data/fixtures/data.datasettype.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/alyx/data/fixtures/data.datasettype.json b/alyx/data/fixtures/data.datasettype.json index d784f1f3d..9c02f9b82 100644 --- a/alyx/data/fixtures/data.datasettype.json +++ b/alyx/data/fixtures/data.datasettype.json @@ -2198,5 +2198,16 @@ "description": "Image meta-data listing the depths and dimensions of each field of view, acquisition parameters, channels, and the MLAP coordinates of the imaging window center.", "filename_pattern": "_*_rawImagingData.meta*" } + }, + { + "model": "data.datasettype", + "pk": "289cb419-274f-4699-ac43-7612de07382e", + "fields": { + "json": null, + "name": "mpciROIs.uuids", + "created_by": null, + "description": "Unique identifier assigned to each ROI when ALF files created after ROI detection.", + "filename_pattern": "" + } } ] From b03537fc265b85e20a1c4699ec6f305ddc782cc1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 16 Oct 2023 09:56:31 +0000 Subject: [PATCH 09/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index 02f20aa71..54ed71496 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -55,7 +55,7 @@ numpy==1.24.4 ONE-api==2.3.0 packaging==23.2 pandas==2.0.3 -Pillow==10.0.1 +Pillow==10.1.0 psycopg2-binary==2.9.9 pyarrow==13.0.0 pycodestyle==2.11.1 From ad6da097139ee2d1352f8f32d8d82fd0736c926b Mon Sep 17 00:00:00 2001 From: mayofaulkner Date: Mon, 16 Oct 2023 12:11:42 +0100 Subject: [PATCH 10/15] sort session task inline by status --- alyx/actions/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/alyx/actions/admin.py b/alyx/actions/admin.py index 3e79a9b13..73b1c9599 100644 --- a/alyx/actions/admin.py +++ b/alyx/actions/admin.py @@ -478,6 +478,7 @@ class TasksAdminInline(BaseInlineAdmin): extra = 0 fields = ('status', 'name', 'version', 'parents', 'datetime', 'arguments') readonly_fields = ('name', 'version', 'parents', 'datetime', 'arguments') + ordering = ('status',) def _pass_narrative_templates(context): From a1b0bc20a2c5b6a0ed0343df5af921c4c7899421 Mon Sep 17 00:00:00 2001 From: mayofaulkner Date: Mon, 16 Oct 2023 16:16:18 +0100 Subject: [PATCH 11/15] add ask parent filter --- alyx/jobs/templatetags/jobs_template_tags.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/alyx/jobs/templatetags/jobs_template_tags.py b/alyx/jobs/templatetags/jobs_template_tags.py index a9ac209e6..2c6bc7131 100644 --- a/alyx/jobs/templatetags/jobs_template_tags.py +++ b/alyx/jobs/templatetags/jobs_template_tags.py @@ -93,6 +93,13 @@ def get_task_colour(status): return "color:MediumSeaGreen" +@register.filter +def get_parents(obj): + parents = obj.parents.all() + + return parents + + @register.simple_tag(takes_context=True) def param_replace(context, **kwargs): """ From 731fc04440500ac18b8600f79fefab89e1ce1fed Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 18 Oct 2023 12:59:01 +0000 Subject: [PATCH 12/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index 54ed71496..c7b261ee2 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -1,7 +1,7 @@ asgiref==3.7.2 backports.zoneinfo==0.2.1 -boto3==1.28.63 -botocore==1.31.63 +boto3==1.28.65 +botocore==1.31.65 certifi==2023.7.22 cffi==1.16.0 charset-normalizer==3.3.0 @@ -52,7 +52,7 @@ matplotlib==3.7.3 mccabe==0.7.0 numba==0.58.0 numpy==1.24.4 -ONE-api==2.3.0 +ONE-api==2.4.0 packaging==23.2 pandas==2.0.3 Pillow==10.1.0 @@ -76,6 +76,6 @@ tqdm==4.66.1 typing_extensions==4.8.0 tzdata==2023.3 uritemplate==4.1.1 -urllib3==1.26.17 +urllib3==1.26.18 webdavclient3==3.14.6 zipp==3.17.0 From eaf0945549326ca77f92aabde26783e52c464e02 Mon Sep 17 00:00:00 2001 From: mayofaulkner Date: Wed, 25 Oct 2023 11:06:37 +0100 Subject: [PATCH 13/15] cortexlab cull subjects admin modifications --- alyx/subjects/admin.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/alyx/subjects/admin.py b/alyx/subjects/admin.py index 7c94fc309..6febd8192 100755 --- a/alyx/subjects/admin.py +++ b/alyx/subjects/admin.py @@ -1419,16 +1419,17 @@ def queryset(self, request, queryset): class CullMiceAdmin(SubjectAdmin): - list_display = ['nickname', 'birth_date', 'death_date', 'sex_f', 'ear_mark', - 'line', 'cage', 'responsible_user', 'to_be_culled', 'reduced', 'cull_l'] + list_display = ['nickname', 'to_be_culled', 'birth_date', 'death_date', 'sex_f', 'ear_mark', + 'line', 'zygosities', 'cage', 'responsible_user', 'reduced', 'cull_l'] ordering = ['-birth_date', '-nickname'] list_filter = [ResponsibleUserListFilter, CullSubjectAliveListFilter, + ZygosityFilter, ('line', LineDropdownFilter), ] list_editable = ['death_date', 'to_be_culled', 'reduced'] - ordering = ('-birth_date',) + ordering = ['-birth_date', '-nickname'] def sex_f(self, obj): return obj.sex[0] if obj.sex else '' From 08f0fe7ebe1c5b0ad6ea2ff23ad229845aad4666 Mon Sep 17 00:00:00 2001 From: Mayo Faulkner Date: Thu, 26 Oct 2023 09:17:05 +0100 Subject: [PATCH 14/15] bump version --- alyx/alyx/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alyx/alyx/__init__.py b/alyx/alyx/__init__.py index c31cd96fd..d08f5d9b8 100644 --- a/alyx/alyx/__init__.py +++ b/alyx/alyx/__init__.py @@ -1 +1 @@ -VERSION = __version__ = '1.16.1' +VERSION = __version__ = '1.16.2' From d123a146271a0e7c2650199895b0bef5c291cd39 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 26 Oct 2023 08:49:45 +0000 Subject: [PATCH 15/15] GitHub Actions generated requirements_frozen.txt --- requirements_frozen.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/requirements_frozen.txt b/requirements_frozen.txt index c7b261ee2..100d937a9 100644 --- a/requirements_frozen.txt +++ b/requirements_frozen.txt @@ -1,10 +1,10 @@ asgiref==3.7.2 backports.zoneinfo==0.2.1 -boto3==1.28.65 -botocore==1.31.65 +boto3==1.28.71 +botocore==1.31.71 certifi==2023.7.22 cffi==1.16.0 -charset-normalizer==3.3.0 +charset-normalizer==3.3.1 click==8.1.7 colorlog==6.7.0 contourpy==1.1.1 @@ -12,7 +12,7 @@ coreapi==2.3.3 coreschema==0.0.4 coverage==6.5.0 coveralls==3.3.1 -cryptography==41.0.4 +cryptography==41.0.5 cycler==0.12.1 Django==4.2.6 django-admin-list-filter-dropdown==1.0.3 @@ -20,7 +20,7 @@ django-admin-rangefilter==0.11.2 django-autocomplete-light==3.9.7 django-cleanup==8.0.0 django-filter==21.1 -django-ipware==5.0.1 +django-ipware==5.0.2 django-js-asset==2.1.0 django-mptt==0.14.0 django-polymorphic==3.1.0 @@ -44,13 +44,13 @@ itypes==1.2.0 Jinja2==3.1.2 jmespath==1.0.1 kiwisolver==1.4.5 -llvmlite==0.41.0 +llvmlite==0.41.1 lxml==4.9.3 Markdown==3.5 MarkupSafe==2.1.3 matplotlib==3.7.3 mccabe==0.7.0 -numba==0.58.0 +numba==0.58.1 numpy==1.24.4 ONE-api==2.4.0 packaging==23.2