From 5933a7afcc0a766e375bcd6aa75572ab066d7633 Mon Sep 17 00:00:00 2001 From: Lena Viktorsson Date: Wed, 15 Oct 2025 17:39:05 +0200 Subject: [PATCH 1/6] draft metadata json --- pyproject.toml | 2 +- src/shark_metadata/delivery_data.py | 176 +++++++++-- .../metadata_config/keywords.yaml | 208 +++++++++++++ .../metadata_config/methods.yaml | 294 ++++++++++++++++++ src/shark_metadata/metadata_config/misc.yaml | 75 +++++ .../metadata_config/monitoring_program.yaml | 36 +++ .../metadata_config/originator_contact.yaml | 144 +++++++++ .../metadata_config/url_linkage.yaml | 223 +++++++++++++ src/shark_metadata/metadata_from_package.py | 13 +- tests/test_get_metadata.py | 25 ++ tests/test_write_metadata.py | 19 +- uv.lock | 6 +- 12 files changed, 1170 insertions(+), 51 deletions(-) create mode 100644 src/shark_metadata/metadata_config/keywords.yaml create mode 100644 src/shark_metadata/metadata_config/methods.yaml create mode 100644 src/shark_metadata/metadata_config/misc.yaml create mode 100644 src/shark_metadata/metadata_config/monitoring_program.yaml create mode 100644 src/shark_metadata/metadata_config/originator_contact.yaml create mode 100644 src/shark_metadata/metadata_config/url_linkage.yaml create mode 100644 tests/test_get_metadata.py diff --git a/pyproject.toml b/pyproject.toml index 97bd35c..c8747fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ package = true [tool.uv.sources] sharkadm = { git = "https://github.com/nodc-sweden/SHARKadm" } -nodc-codes = { git = "https://github.com/nodc-sweden/nodc-codes" } +nodc-codes = { git = "https://github.com/nodc-sweden/nodc-codes/", tag = "v2.0.0" } [tool.ruff] diff --git a/src/shark_metadata/delivery_data.py b/src/shark_metadata/delivery_data.py index 35c3109..c60c415 100644 --- a/src/shark_metadata/delivery_data.py +++ b/src/shark_metadata/delivery_data.py @@ -1,7 +1,10 @@ +from importlib import resources from pathlib import Path from typing import Callable, Self import polars as pl +import yaml +from nodc_codes import get_translate_codes_object from sharkadm.data import get_polars_data_holder @@ -12,17 +15,42 @@ def _apply_on_column(function: Callable, column: str, dataframe: pl.DataFrame): return function(dataframe[column]) +def _load_all_yaml() -> dict: + resource = resources.files(__package__) / "metadata_config" + data = {} + for file in Path(resource).glob("*.yaml"): + key = file.stem + with open(file, encoding="utf-8") as f: + data[key] = yaml.safe_load(f) + return data + + +STATIC_METADATA = _load_all_yaml() + + +def get_static_metadata(metadata: dict, keys: list, lang: str = "en"): + for key in keys: + if not isinstance(metadata, dict): + return None + metadata = metadata.get(key) or metadata.get("default") + if metadata is None: + return None + if not isinstance(metadata, dict): + return None + return metadata.get(lang) + + class DeliveryData: _fields = ( "datatype", - "abstract", - "description", + "monitoring_program", + "method_description", "dataset_filename", - "discipline", + "keywords", "measuring_area_type", "coordinate_system", "platform_class", - "access_constraints", + "license", "min_year", "max_year", "min_date", @@ -31,19 +59,14 @@ class DeliveryData: "max_longitude_dd", "min_latitude_dd", "max_latitude_dd", + "stations", + "parameters", "taxonomic_coverage", "originator", - "contact", "orderer", "data_holding_centre", - "data distributor", "database_reference", "internet_access", - "address", - "postal_code", - "city", - "phone", - "email", "citation", ) @@ -65,22 +88,61 @@ def data(self): def delivery_note(self): return self._delivery_note + @property + def datatype(self): + return self.delivery_note.get("DTYPE", "") + + @property + def monitoring_program(self): + return self.delivery_note.get("MPROG") or self.delivery_note.get( + "monitoring_program_code" + ) + + @property + def originator(self): + return self.delivery_note.get("RLABO", "") + @property def fields(self): return self._fields def generate_metadata(self): print("\n".join(sorted(self._data.columns))) + print(self.delivery_note) return { - "datatype": self._delivery_note.get("DTYPE"), - "abstract": None, - "description": None, - "dataset_filename": self._source, - "discipline": None, - "measuring_area_type": None, - "coordinate_system": None, - "platform_class": None, - "access_constraints": None, + "datatype": get_translate_codes_object().get_english_name( + "delivery_datatype", self.datatype + ), # lista om metadata för flera paket från olika datatyper + "monitoring_program": get_static_metadata( + STATIC_METADATA, ["monitoring_program", self.monitoring_program], "en" + ), # lista om metadata skrivs för flera paket. + "method_description": get_static_metadata( + STATIC_METADATA, + ["methods", self.monitoring_program, self.datatype.lower()], + "en", + ), + "dataset_filename": self._source, # lista om metadata skrivs för flera paket. + "keywords": get_static_metadata( + STATIC_METADATA, + ["keywords", self.monitoring_program, self.datatype.lower(), "gcmd"], + "en", + ), + "measuring_area_type": get_static_metadata( + STATIC_METADATA, + ["misc", "measuring_area_type", self.datatype.lower()], + "en", + ), # point, polygon, transect, annat namn? + "coordinate_system": get_static_metadata( + STATIC_METADATA, + ["misc", "coordinate_system", self.datatype.lower()], + "en", + ), # alltid wgs84 + "platform_class": get_static_metadata( + STATIC_METADATA, ["misc", "platform_class", self.datatype.lower()], "en" + ), + "license": get_static_metadata( + STATIC_METADATA, ["misc", "license", self.datatype.lower()], "en" + ), # license.yaml, flyttat till misc "min_year": _apply_on_column(min, "visit_year", self._data), "max_year": _apply_on_column(max, "visit_year", self._data), "min_date": _apply_on_column(min, "sample_date", self._data), @@ -89,20 +151,66 @@ def generate_metadata(self): "max_longitude_dd": _apply_on_column(max, "sample_longitude_dd", self._data), "min_latitude_dd": _apply_on_column(min, "sample_latitude_dd", self._data), "max_latitude_dd": _apply_on_column(max, "sample_latitude_dd", self._data), - "taxonomic_coverage": None, - "originator": None, - "contact": None, - "orderer": None, - "data_holding_centre": None, - "data distributor": None, - "database_reference": None, - "internet_access": None, - "address": None, - "postal_code": None, - "city": None, - "phone": None, - "email": None, - "citation": None, + "stations": _apply_on_column( + lambda s: s.unique().to_list(), "station_name", self._data + ), + "parameters": _apply_on_column( + lambda s: s.unique().to_list(), "parameter", self._data + ), + "taxonomic_coverage": _apply_on_column( + lambda s: s.unique().to_list(), "scientific_name", self._data + ), + "originator": { + "name": get_translate_codes_object().get_english_name( + "LABO", self.originator + ), + "contact": get_static_metadata( + STATIC_METADATA, + ["originator_contact", self.originator, self.datatype], + "en", + ), + }, # lista med flera dicts om flera datapaket läses. + "orderer": get_translate_codes_object().get_english_name( + "LABO", self.delivery_note.get("ORDERER", "sample_orderer_code") + ), + "data_holding_centre": { + "name": get_static_metadata( + STATIC_METADATA, + ["misc", "data_holding_centre", self.datatype.lower(), "name"], + ), + "address": get_static_metadata( + STATIC_METADATA, + ["misc", "data_holding_centre", self.datatype.lower(), "address"], + ), + "postal_code": get_static_metadata( + STATIC_METADATA, + ["misc", "data_holding_centre", self.datatype.lower(), "postal_code"], + ), + "city": get_static_metadata( + STATIC_METADATA, + ["misc", "data_holding_centre", self.datatype.lower(), "city"], + ), + "phone": get_static_metadata( + STATIC_METADATA, + ["misc", "data_holding_centre", self.datatype.lower(), "phone"], + ), + "email": get_static_metadata( + STATIC_METADATA, + ["misc", "data_holding_centre", self.datatype.lower(), "email"], + ), + }, + "database_reference": get_static_metadata( + STATIC_METADATA, + ["misc", "database_reference", self.datatype.lower()], + ), + "internet_access": get_static_metadata( + STATIC_METADATA, + ["url_linkage", "shark", self.monitoring_program, self.datatype.lower()], + )[0]["url"], # url linkage, shark.smhi.se, shark.smhi.se/api/docs + "citation": get_static_metadata( + STATIC_METADATA, + ["misc", "citation", self.datatype.lower()], + ).format(originator=self.originator, project=self.monitoring_program), } @classmethod diff --git a/src/shark_metadata/metadata_config/keywords.yaml b/src/shark_metadata/metadata_config/keywords.yaml new file mode 100644 index 0000000..f21427e --- /dev/null +++ b/src/shark_metadata/metadata_config/keywords.yaml @@ -0,0 +1,208 @@ +# Metadata for Swedish marine environmental monitoring datasets. +# Repository: https://github.com/sharkdata/metadata + + +NATL: + default: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + sv: + - "Oceans > Marine Environment Monitoring" + bacterioplankton: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + chlorophyll: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + epibenthos: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Plants" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Plants" + greyseal: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + harbourporpoise: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + harbourseal: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + phytoplankton: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + picoplankton: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + primaryproduction: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + profile: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Ocean Temperature" + - "Oceans > Salinity/density" + - "Oceans > Ocean Optics" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Ocean Temperature" + - "Oceans > Salinity/density" + - "Oceans > Ocean Optics" + ringedseal: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + sealpathology: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Biology > Marine Mammals" + sedimentation: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Chemistry" + - "Oceans > Marine Sediments > Particle Flux" + - "Oceans > Marine Sediments > Sedimentation" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Chemistry" + - "Oceans > Marine Sediments > Particle Flux" + - "Oceans > Marine Sediments > Sedimentation" + physicalchemical: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Chemistry" + - "Oceans > Ocean Chemistry > Nutrients" + - "Oceans > Ocean Chemistry > Oxygen" + - "Oceans > Ocean Temperature > Water Temperature" + - "Oceans > Salinity/density > Density" + - "Oceans > Salinity/density > Salinity" + - "Oceans > Ocean Optics > Secchi Depth" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Chemistry" + - "Oceans > Ocean Chemistry > Nutrients" + - "Oceans > Ocean Chemistry > Oxygen" + - "Oceans > Ocean Temperature > Water Temperature" + - "Oceans > Salinity/density > Density" + - "Oceans > Salinity/density > Salinity" + - "Oceans > Ocean Optics > Secchi Depth" + zoobenthos: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Invertebrates" + - "Oceans > Marine Sediments" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Sediments" + zooplankton: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Invertebrates" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + - "Oceans > Marine Invertebrates" +PROJ: + default: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + sv: + - "Oceans > Marine Environment Monitoring" + planktonimaging: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Marine Biology" + ADCP: + gcmd: + en: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Ocean Circulation" + - "Oceans > Ocean Circulation > Ocean Currents" + - "Oceans > Ocean Circulation > Ocean Currents > Current Profiles" + sv: + - "Oceans > Marine Environment Monitoring" + - "Oceans > Ocean Circulation" + - "Oceans > Ocean Circulation > Ocean Currents" + - "Oceans > Ocean Circulation > Ocean Currents > Current Profiles" \ No newline at end of file diff --git a/src/shark_metadata/metadata_config/methods.yaml b/src/shark_metadata/metadata_config/methods.yaml new file mode 100644 index 0000000..afc315d --- /dev/null +++ b/src/shark_metadata/metadata_config/methods.yaml @@ -0,0 +1,294 @@ +# Metadata for Swedish marine environmental monitoring datasets. +# Repository: https://github.com/sharkdata/metadata + +# The | at the start indicates that the following should be interpreted as a string with \n when there is a new line. Blank line will be \n\n + +NATL: + bacterioplankton: + en: | + Data should be sampled and analyzed according to the HELCOM COMBINE Manual - Part C Annex C11 Guidelines concerning bacterioplankton growth determination. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/wp-content/uploads/2019/08/Manual-for-Marine-Monitoring-in-the-COMBINE-Programme-of-HELCOM_PartC_AnnexC11.pdf + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/bakteriell-syrekonsumtion.html + sv: | + Data ska samlas in och analyseras enligt HELCOM COMBINE Manual - Del C Bilaga C11 Riktlinjer för bestämning av bakterioplanktontillväxt, avvikelser från manualen kan förekomma. + + - HELCOM COMBINE Manual - Del C Bilaga C11: https://helcom.fi/wp-content/uploads/2019/08/Manual-for-Marine-Monitoring-in-the-COMBINE-Programme-of-HELCOM_PartC_AnnexC11.pdf + - Vägledning på Havs- och vattenmyndighetens webbplats: https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/bakteriell-syrekonsumtion.html + chlorophyll: + en: | + Data should be sampled and analyzed according to the HELCOM Guidelines for Measuring Chlorophyll a. + + - https://helcom.fi/wp-content/uploads/2019/08/Guidelines-for-measuring-chlorophyll-a.pdf + sv: | + Data samlas in och analyseras enligt HELCOM Monitoring Guidelines for Measuring Chlorophyll a. + + - https://helcom.fi/wp-content/uploads/2019/08/Guidelines-for-measuring-chlorophyll-a.pdf + epibenthos: + en: | + Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. However, deviations from the manual might occur. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-vegetationskladda-bottnar.html + - East coast https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-ostkust.html + - West coast https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-vastkust.html + sv: | + Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. Avvikelser från manualen kan förekomma. + + - Delprogrammet för vegetationsklädda bottnar: https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-vegetationskladda-bottnar.html + - Ostkust: https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-ostkust.html + - Västkust: https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-vastkust.html + greyseal: + en: | + Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/hav/samordning--fakta/miljoovervakning/miljoovervakningens-programomrade-kust-och-hav/delprogram-sal-och-havsorn.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/grasalsbestand.html + sv: | + Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/hav/samordning--fakta/miljoovervakning/miljoovervakningens-programomrade-kust-och-hav/delprogram-sal-och-havsorn.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/grasalsbestand.html + harbourporpoise: + en: | + The presence and distribution of Harbour porpoises are studied through recording click sounds with click detectors. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/marin-miljoovervakning/tumlare.html + sv: | + Förekomst och utbredning av tumlare övervakas genom att spela in klickljud med klickdetektorer. Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/marin-miljoovervakning/tumlare.html + harbourseal: + en: | + Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/hav/samordning--fakta/miljoovervakning/miljoovervakningens-programomrade-kust-och-hav/delprogram-sal-och-havsorn.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/bestand-av-knubbsal-och-vikaresal.html + sv: | + Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/hav/samordning--fakta/miljoovervakning/miljoovervakningens-programomrade-kust-och-hav/delprogram-sal-och-havsorn.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/bestand-av-knubbsal-och-vikaresal.html + phytoplankton: + en: | + Data should be sampled and analyzed according to the HELCOM Guidelines for monitoring of phytoplankton species composition, abundance and biomass. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vaxtplankton.html + sv: | + Data samlas in och analyseras enligt HELCOM Guidelines of phytoplankton species composition, abundance and biomass. Avvikelser från manualen kan förekomma. Information om programmet och metoderna finns också på Havs- och vattenmyndighetens webbplats + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf). + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vaxtplankton.html + picoplankton: + en: | + Data should be sampled and analyzed according to the HELCOM and OSPAR selected method in MacIsaac E A and Stockner J G 1993. Enumeration of phototrophic picoplankton by autoflourescence microscopy. In Handbook of methods in aquatic microbial ecology. Kemp P F, Sherr B F, Sherr E B, and Cole J J (eds.) Lewis, Boca Raton. pp. 187-197. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.ospar.org/documents?d=35398. + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + sv: | + Data samlas in och analyseras enligt riktlinjer från HELCOM och OSPAR: MacIsaac E A and Stockner J G 1993. Enumeration of phototrophic picoplankton by autoflourescence microscopy. In Handbook of methods in aquatic microbial ecology. Kemp P F, Sherr B F, Sherr E B, and Cole J J (eds.) Lewis, Boca Raton. pp. 187-197. Avvikelser från manualen kan förekomma. Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.ospar.org/documents?d=35398. + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + primaryproduction: + en: | + Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/primarproduktion.html + sv: | + Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/primarproduktion.html + ringedseal: + en: | + Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/hav/samordning--fakta/miljoovervakning/miljoovervakningens-programomrade-kust-och-hav/delprogram-sal-och-havsorn.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/bestand-av-knubbsal-och-vikaresal.html + sv: | + Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/hav/samordning--fakta/miljoovervakning/miljoovervakningens-programomrade-kust-och-hav/delprogram-sal-och-havsorn.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/bestand-av-knubbsal-och-vikaresal.html + sealpathology: + en: | + Necropsy findings and histopathological findings of dead seals. If the exact position of the findings are not know, the position will be stored in the county town (according to the Swedish Environmental Protection Agency). Information about the program and the methods are available in Swedish at the website of the Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/overvakningsmanualer-for-miljoovervakning/overvakningsmanualer/patologi-hos-grasal-vikaresal-och-knubbsal.html + sv: | + Obduktionsfynd och histopatologiska fynd från döda sälar. Om den exakta fyndplatsen inte är känd kommer positionen att anges i residensstaden (enligt Naturvårdsverkets riktlinjer). Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/overvakningsmanualer-for-miljoovervakning/overvakningsmanualer/patologi-hos-grasal-vikaresal-och-knubbsal.html + sedimentation: + en: | + Sedimentation traps is put out for a number of days to store the material that settles down through the water. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/sedimentation.html + sv: | + Sedimentationsfällor sätts ut under ett antal dagar för att samla upp det material som sjunker mot bottnen. Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html, + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/sedimentation.html + physicalchemical: + en: | + Oceanographic, physical and chemical data from water samples. Collected with bottle or CTD at discrete depths. Data should be sampled and analyzed according HELCOM Monitoring Guidelines. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/action-areas/monitoring-and-assessment/monitoring-guidelines/ + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/miljoovervakningens-metoder-och-overvakningsmanualer-inom-programomrade-kust-och-hav.htmlhtml + sv: | + Data samlas in och analyseras enligt HELCOM Guidelines. Data samlas in med vattenhämtare och CTD. Vilka parametrar som analyseras varierar med plats och tid, som utgångspunkt finns salthalt, temperatur, syre och näringsämnen. Ytterligare parametrar som ofta förekommer är klorofyll, pH och alkalinitet. Avvikelser från manualen kan förekomma. Information om programmet och metoderna finns också på Havs- och vattenmyndighetens webbplats. + + - HELCOM Monitoring Guidelines: https://helcom.fi/action-areas/monitoring-and-assessment/monitoring-guidelines/ + - Vägledning från Havs- och vattenmyndigheten: https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/miljoovervakningens-metoder-och-overvakningsmanualer-inom-programomrade-kust-och-hav.html + profile: + en: | + text + sv: | + text + zoobenthos: + en: | + Data should be sampled and analyzed according to the HELCOM and OSPAR selected method "Metodbeskrivning för provtagning och analys av mjukbottenlevande makroevertebrater i marin miljö" Leonardsson K. 2004 Umeå universitet, Institutionen för ekologi och geovetenskap, 26 p (In Swedish). However, deviations from the manual might occur. Samples are often taken with a sediment graber that is lowered from a boat and collect a known amount of bottom substrate. The material is filtered and the animals present in the sample is preserved for later to be determined, counted and weighed. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/mjukbottenlevande-makrofauna-trend--och-omradesovervakning.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/sediment---basundersokning.html. + - https://www.havochvatten.se/download/18.1690613b166605675de898f4/1539942622449/rapport-umu-metodbeskrivning-provtagning-analys-mjukbottenlevande-makroevertebrater-i-marin-miljo.pdf + + sv: | + Data samlas in och analyseras enligt riktlinjer från HELCOM och OSPAR: Leonardsson K., 2004. Metodbeskrivning för provtagning och analys av mjukbottenlevande makroevertebrater i marin miljö. Umeå universitet, Institutionen för ekologi och geovetenskap, 26 s. Avvikelser från manualen kan förekomma. Prover tas med en bottenhuggare som sänks ner från en båt och samlar upp en bestämd mängd bottensubstrat. Materialet silas och djuren i provet preserveras för att senare bestämmas, räknas och vägas. Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/mjukbottenlevande-makrofauna-trend--och-omradesovervakning.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/sediment---basundersokning.html + - https://www.havochvatten.se/download/18.1690613b166605675de898f4/1539942622449/rapport-umu-metodbeskrivning-provtagning-analys-mjukbottenlevande-makroevertebrater-i-marin-miljo.pdf + zooplankton: + en: | + Samples are collected by vertically hauling a plankton net through the water. Data should be sampled and analyzed according to the HELCOM Guidelines for Monitoring of Mesozooplankton. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/djurplankton-trend--och-omradesovervakning.html + sv: | + Prover samlas in genom att ett planktonnät dras vertikalt genom vattnet. Data samlas in och analyseras enligt HELCOM Guidelines for Monitoring of Mesozooplankton. Avvikelser från manualen kan förekomma. Information om programmet och metoderna finns också på Havs- och vattenmyndighetens webbplats. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf. + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/djurplankton-trend--och-omradesovervakning.html + jellyfish: + en: | + Samples are collected by vertically hauling a plankton net through the water. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/geleplankton.html + sv: | + Prover samlas in genom att ett planktonnät dras vertikalt genom vattnet. Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/geleplankton.html +NAT_REG: + picoplankton: + en: | + Data should be sampled and analyzed according to the HELCOM and OSPAR selected method in MacIsaac E A and Stockner J G 1993. Enumeration of phototrophic picoplankton by autoflourescence microscopy. In Handbook of methods in aquatic microbial ecology. Kemp P F, Sherr B F, Sherr E B, and Cole J J (eds.) Lewis, Boca Raton. pp. 187-197. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.ospar.org/documents?d=35398. + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html + sv: | + Data samlas in och analyseras enligt riktlinjer från HELCOM och OSPAR: MacIsaac E A and Stockner J G 1993. Enumeration of phototrophic picoplankton by autoflourescence microscopy. In Handbook of methods in aquatic microbial ecology. Kemp P F, Sherr B F, Sherr E B, and Cole J J (eds.) Lewis, Boca Raton. pp. 187-197. Avvikelser från manualen kan förekomma. Information om programmet och metoderna finns på svenska på Havs- och vattenmyndighetens webbplats. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.ospar.org/documents?d=35398. + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-fria-vattenmassan.html +REG_PROJ: + epibenthos: + en: | + Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. However, deviations from the manual might occur. + + - https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-vegetationskladda-bottnar.html + - East coast https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-ostkust.html + - West coast https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-vastkust.html + sv: | + Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. Avvikelser från manualen kan förekomma. + + - Delprogrammet för vegetationsklädda bottnar: https://www.havochvatten.se/overvakning-och-uppfoljning/miljoovervakning/organisation-och-programomraden/miljoovervakningens-programomrade-kust-och-hav/delprogram-vegetationskladda-bottnar.html + - Ostkust: https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-ostkust.html + - Västkust: https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vegetationskladda-bottnar-vastkust.html +REG_RECIP_PROJ: + phytoplankton: + en: | + Data should be sampled and analyzed according to the HELCOM Guidelines for monitoring of phytoplankton species composition, abundance and biomass. However, deviations from the manual might occur. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vaxtplankton.html + sv: | + Data samlas in och analyseras enligt HELCOM Guidelines for monitoring of phytoplankton species composition, abundance and biomass. Avvikelser från manualen kan förekomma. Information om programmet och metoderna finns också på svenska på Havs- och vattenmyndighetens webbplats. + + - https://helcom.fi/wp-content/uploads/2020/01/HELCOM-Guidelines-for-monitoring-of-phytoplankton-species-composition-abundance-and-biomass.pdf + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/vaxtplankton.html + zoobenthos: + en: | + Data should be sampled and analyzed according to the HELCOM and OSPAR selected method "Metodbeskrivning för provtagning och analys av mjukbottenlevande makroevertebrater i marin miljö" Leonardsson K. 2004 Umeå universitet, Institutionen för ekologi och geovetenskap, 26 p (In Swedish). However, deviations from the manual might occur. Samples are often taken with a sediment graber that is lowered from a boat and collect a known amount of bottom substrate. The material is filtered and the animals present in the sample is preserved for later to be determined, counted and weighed. Information about the program and the methods are available in Swedish at the website of Swedish Agency for Marine and Water Management. + + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/mjukbottenlevande-makrofauna-trend--och-omradesovervakning.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/sediment---basundersokning.html. + - https://www.havochvatten.se/download/18.1690613b166605675de898f4/1539942622449/rapport-umu-metodbeskrivning-provtagning-analys-mjukbottenlevande-makroevertebrater-i-marin-miljo.pdf + + sv: | + Data samlas in och analyseras enligt riktlinjer från HELCOM och OSPAR: Leonardsson K., 2004. Metodbeskrivning för provtagning och analys av mjukbottenlevande makroevertebrater i marin miljö. Umeå universitet, Institutionen för ekologi och geovetenskap, 26 s. Avvikelser från manualen kan förekomma. Prover tas med en bottenhuggare som sänks ner från en båt och samlar upp en bestämd mängd bottensubstrat. Materialet silas och djuren i provet preserveras för att senare bestämmas, räknas och vägas. Information om programmet och metoderna finns på Havs- och vattenmyndighetens webbplats. + + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/mjukbottenlevande-makrofauna-trend--och-omradesovervakning.html + - https://www.havochvatten.se/vagledning-foreskrifter-och-lagar/vagledningar/ovriga-vagledningar/undersokningstyper-for-miljoovervakning/undersokningstyper/sediment---basundersokning.html + - https://www.havochvatten.se/download/18.1690613b166605675de898f4/1539942622449/rapport-umu-metodbeskrivning-provtagning-analys-mjukbottenlevande-makroevertebrater-i-marin-miljo.pdf +PROJ: + planktonimaging: + en: | + Sampling is performed either using shipboard flow through systems (i.e. FerryBox) where the Imaging FlowCytobot (IFCB) is connected as an addon, or at specific locations with the IFCB is submerged in-situ. Other deployment methods are possible. + The IFCB uses flow cytometry technology and high-resolution images to detects particles in a water sample. Shapes in images are identified to best possible taxonomical levels using AI-assisted image analysis software. Volumes are estimated from the organism's two-dimensional boundary. + In short, analysis of phyto- and microzooplankton species composition, abundance and biomass is carried out for the following purposes + - to describe temporal trends as well as the intensity and occurrence of blooms + - to describe the spatial distribution of species + - to identify key species (e.g. dominating, harmful, potential non-indigenous and/or invasive species, as well as indicator species) + - to provide basic data for complex ecosystem analyses, food web studies, modelling as well as for requirements in the frame of the Marine Strategy Framework Directive of the European Union (MSFD; European Union 2008) and the EU Water Framework Directive (WFD; European Union 2000) + The analysis follows the methods provided + - Machine learning: Sosik, H. M. and Olson, R. J. (2007), Automated taxonomic classification of phytoplankton sampled with imaging-in-flow cytometry. Limnol. Oceanogr: Methods 5, 204-216. http://github.com/hsosik/ifcb-analysis + - Quality control: Hayashi, K., Walton, J., Lie, A., Smith, J. and Kudela M. Using particle size distribution (PSD) to automate imaging flow cytobot (IFCB) data quality in coastal California, USA. In prep. http://github.com/kudelalab/PSD + - Data processing: Anders Torstensson (2024). I 'R' FlowCytobot (iRfcb): Tools for Analyzing and Processing Data from the IFCB. R package version 0.3.10. https://doi.org/10.5281/zenodo.12533225. http://github.com/EuropeanIFCBGroup/iRfcb + In this dataset you will find data from Tångesund oceanographic platform, Swedish Skagerrak coast year 2016 (IFCB110), and from R/V Svea (https://vocab.nerc.ac.uk/collection/C17/current/77SE/) from year 2022 onwards (IFCB134). Other sampling platforms are possible. + + sv: | + Provtagning sker antingen med hjälp av genomflödessystem på fartyg (t.ex. FerryBox) där Imaging Flowcytobot (IFCB) använder en del av flödet, eller på specifika platser in-situ där IFCB sänks ner i vattnet. Fler provtagningsmetoder är möjliga. + IFCB använder teknologi från flödescytometri samt högupplöst foto för att detektera partiklar i ett vattenprov. Partiklars former i bilderna identifieras till så noggrann taxonomisk nivå som möjligt (släkte- eller artnivå) med hjälp av AI, samt dess storlek och volym räknas ut med hjälp av mjukvara för bildanalys. + Analyser av biomassa, abundans och artsammansättning av växt- och mikrodjurplankton görs av följande anledningar: + - För att beskriva tidsmässiga trender samt förekomst av blomningar och dess intensitet + - För att beskriva arters rumsliga utbredning + - För att identifiera nyckelarter (t.ex. dominerande, skadliga, potentiellt främmande och/eller invasiva arter, samt indikatorarter) + - För att tillhandahålla grundläggande data för ekosystemanalyser, näringsvävsstudier, modellering, samt för åtaganden inom havsmiljödirektivet och vattendirektivet + Analysen följer dessa metoder: + - Maskininlärning: Sosik, H. M. and Olson, R. J. (2007), Automated taxonomic classification of phytoplankton sampled with imaging-in-flow cytometry. Limnol. Oceanogr: Methods 5, 204-216. http://github.com/hsosik/ifcb-analysis + - Kvalitetskontroll: Hayashi, K., Walton, J., Lie, A., Smith, J. and Kudela M. Using particle size distribution (PSD) to automate imaging flow cytobot (IFCB) data quality in coastal California, USA. In prep. http://github.com/kudelalab/PSD + - Dataprocessering: Anders Torstensson (2024). I 'R' FlowCytobot (iRfcb): Tools for Analyzing and Processing Data from the IFCB. R package version 0.3.10. https://doi.org/10.5281/zenodo.12533225. http://github.com/EuropeanIFCBGroup/iRfcb + Data är insamlad från Tångesund oceanografiska plattform vid Orust på svenska kusten år 2016 (IFCB110), och från R/V Svea (https://vocab.nerc.ac.uk/collection/C17/current/77SE/) från år 2022 och framåt (IFCB134). Fler provtagningsplattformar är möjliga. + + ADCP: + en: | + The hull-mounted Acoustic Doppler Current Profiler (ADCP) measures the speed and direction of currents at multiple depths from the vessel to the seabed. The number of depth layers is determined by both the frequency of the ADCP and setup of the instrument. A vessel-mounted survey takes multiple current profile measurements at different points across a sailed track. Users can then see how the currents vary not only with depth, but across a geographic area. + In this dataset you will find data from R/V Svea in Skagerrak, Kattegat and the Baltic Sea from year 2022 onwards. + Sampling is performed using two separate transducers, RDI Teledyne Work Horse 600 kHz and RDI Teledyne Ocean Surveyor 150 kHz. The Work Horse uses depth cells of 2 meters, sampled from approximately -8 to -40 meters depth. The Ocean Surveyor uses depth cells of 8 meters, sampled from approximately -12 to -400 meters depth. The temporal average is 120 seconds for both sensors. + Processing and quality control are carried out using the CODAS software, version focal 20.04: + + - https://currents.soest.hawaii.edu/docs/adcp_doc/index.html + sv: | + Skrovmonterad Acoustic Doppler Current Profiler (ADCP) mäter hastighet och riktning på strömmarna på flera djup från fartygets undersida ner till havsbotten. Antalet djupceller bestäms av både frekvensen på ADCP och instrumentets inställningar. En undersökning med skrovmonterad ADCP tar många strömprofiler vid olika punkter längs en rutt. Användare kan sedan se hur strömmarna varierar inte bara med djup, utan också över ett geografiskt område. + I detta dataset hittar du data från R/V Svea i Skagerrak, Kattegatt och Östersjön från år 2022 och framåt. + Provtagning utförs med två separata sensorer, RDI Teledyne Work Horse 600 kHz och RDI Teledyne Ocean Surveyor 150 kHz. Work Horse använder djupceller på 2 meter, som samplas från cirka -8 till -40 meters djup. Ocean Surveyor använder djupceller på 8 meter, som samplas från cirka -12 till -400 meters djup. Det temporala medelvärdet är 120 sekunder för båda sensorerna. + Bearbetning och kvalitetskontroll utförs med hjälp av CODAS-programvaran, version focal 20.04: + + - https://currents.soest.hawaii.edu/docs/adcp_doc/index.html + planktonbarcoding: + en: | + text + sv: | + text + + diff --git a/src/shark_metadata/metadata_config/misc.yaml b/src/shark_metadata/metadata_config/misc.yaml new file mode 100644 index 0000000..5f98596 --- /dev/null +++ b/src/shark_metadata/metadata_config/misc.yaml @@ -0,0 +1,75 @@ +# Metadata for Swedish marine environmental monitoring datasets. +# Repository: https://github.com/sharkdata/metadata +--- + +license: + default: + en: + The data complies with the Creative commons CC0 license terms. + https://creativecommons.org/publicdomain/zero/1.0/deed.sv + sv: + Data följer licensvillkoren Creative commons CC0. + https://creativecommons.org/publicdomain/zero/1.0/deed.sv +data_holding_centre: + default: + "name": + en: + Swedish Meteorological and Hydrological Institute + sv: + Sveriges meteorologiska och hydrologiska institute + "address": + en: + Göteborgseskaderns plats 3 + "postal_code": + en: + SE-426 71 + "city": + en: + Västra Frölunda + "phone": + en: + +46-11-495 80 00 + "email": + en: + shark@smhi.se +database_reference: + default: + en: + SHARK - Swedish Ocean Archive, National Oceanographic Data Centre + sv: + SHARK - Svenskt havsarkiv, nationellt oceanografiskt datacenter +measuring_area_type: + default: + en: + point + sv: + point +coordinate_system: + default: + en: + WGS84 + sv: + WGS84 +platform_class: + default: + en: + ship + sv: + fartyg + greyseal: + en: + airplane + sv: + flygplan + ringedseal: + en: + airplane + sv: + flygplan +citation: + # vad finns det för nya tankar? + # datum för skapande, leverantör, ackreditering, år (min, max), datatyp + default: + en: | + The data used in this {project} has been downloaded from the Swedish National Oceanographic Data Centre at the Swedish Meteorological and Hydrological Institute (SMHI). Data has been collected within Swedish coordinated marine monitoring by {originator}. + diff --git a/src/shark_metadata/metadata_config/monitoring_program.yaml b/src/shark_metadata/metadata_config/monitoring_program.yaml new file mode 100644 index 0000000..897de75 --- /dev/null +++ b/src/shark_metadata/metadata_config/monitoring_program.yaml @@ -0,0 +1,36 @@ +# Metadata for Swedish marine environmental monitoring datasets. +# Repository: https://github.com/sharkdata/metadata +--- + +# delivery_note: MPROG +# info based on, MPROG, language +default: + en: + Monitoring data from the seas surrounding Sweden from unspecified programme or project. + sv: + Data från miljöövervakning i haven runt Sverige från okänt programm eller projekt +NATL: + en: + National monitoring data from the seas surrounding Sweden. + sv: + Data från nationell miljöövervakning i haven runt Sverige. +REG: + en: + Regional monitoring data from the seas surrounding Sweden. + sv: + Data från regional miljöövervakning i haven runt Sverige. +RECIP: + en: + Recipient control monitoring data from the seas surrounding Sweden. + sv: + Data från recipientkontroll i haven runt Sverige. +SRECIP: + en: + Coordinated recipient monitoring from the seas surrounding Sweden. + sv: + Data från samlad recipientkontroll i haven runt Sverige. +PROJ: + en: + Project data from the seas surrounding Sweden. + sv: + Data från miljöövervakningsprojekt i haven runt Sverige. diff --git a/src/shark_metadata/metadata_config/originator_contact.yaml b/src/shark_metadata/metadata_config/originator_contact.yaml new file mode 100644 index 0000000..f4abc2c --- /dev/null +++ b/src/shark_metadata/metadata_config/originator_contact.yaml @@ -0,0 +1,144 @@ +# Metadata for Swedish marine environmental monitoring datasets. +# Repository: https://github.com/sharkdata/metadata +--- + + +# originator_contact: +# delivery_note: kontaktperson men hur ska vi göra? funktionsmail bäst +# info based on, orginiator, discipline, language +SMHI: + default: + en: + shark@smhi.se + sv: + shark@smhi.se + phytoplankton: + en: + planktongroup@smhi.se + sv: + planktongroup@smhi.se + picoplankton: + en: + planktongroup@smhi.se + sv: + planktongroup@smhi.se + planktonbarcoding: + en: + planktongroup@smhi.se + sv: + planktongroup@smhi.se + planktonimaging: + en: + planktongroup@smhi.se + sv: + planktongroup@smhi.se + physicalchemical: + en: + svea@smhi.se + sv: + svea@smhi.se + profile: + en: + svea@smhi.se + sv: + svea@smhi.se +DEEP: + default: + en: + http://www.su.se/department-of-ecology-environment-and-plant-sciences/about-the-department/contact + sv: + http://www.su.se/institutionen-for-ekologi-miljo-och-botanik/om-institutionen/kontakt + epibenthos: + en: + benthos.emb@su.se + sv: + benthos.emb@su.se + zoobenthos: + en: + benthos.emb@su.se + sv: + benthos.emb@su.se +UMSC: + default: + en: + http://www.umu.se/en/contact-us/ + sv: + http://www.umu.se/kontakta-oss/ +GU: + default: + en: + http://www.gu.se/en/contact + sv: + http://www.gu.se/kontakt +SLCK: + default: + en: + http://www.gu.se/en/kristineberg/about-us/contact + sv: + http://www.gu.se/kristineberg/om-oss/kontakt +SLCT: + default: + en: + http://www.gu.se/en/tjarno/about-us/contact + sv: + http://www.gu.se/tjarno/om-oss/kontakt +MNHS: + default: + en: + informationen@nrm.se + sv: + informationen@nrm.se +NIRAS: + default: + en: + info@niras.se + sv: + info@niras.se +NATVAT: + default: + en: + info@naturvatten.se + sv: + info@naturvatten.se +ABLST: + default: + en: + stockholm@lansstyrelsen.se + sv: + stockholm@lansstyrelsen.se +MMAB: + default: + en: + info@marine-monitoring.se + en: + info@marine-monitoring.se +PELA: + default: + en: + info@pelagia.se + sv: + info@pelagia.se +AMK: + default: + en: + http://www.aquaticuskonsult.se/kontakt + sv: + http://www.aquaticuskonsult.se/kontakt +SGS: + default: + en: + se.ie.miljo@sgs.com + sv: + se.ie.miljo@sgs.com +SVVAEK: + default: + en: + info@vattenekologer.se + sv: + info@vattenekologer.se +XLST: + default: + en: + gavleborg@lansstyrelsen.se + sv: + gavleborg@lansstyrelsen.se diff --git a/src/shark_metadata/metadata_config/url_linkage.yaml b/src/shark_metadata/metadata_config/url_linkage.yaml new file mode 100644 index 0000000..d822aeb --- /dev/null +++ b/src/shark_metadata/metadata_config/url_linkage.yaml @@ -0,0 +1,223 @@ + +shark: + default: + default: + en: + - url: "http://shark.smhi.se/" + description: "SHARK är Svenskt HavsARKivs webbplats för nedladdning av data." + title: "SHARK" + - url: "https://shark.smhi.se/api/docs/" + description: "SHARK API är Svenskt HavsARKivs API för avancerad nedladdning av data." + title: "SHARK API" +gbif: + NAT: + zoobenthos: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-zoobenthos-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + zooplankton: + en: + - url: "http://www.gbif.se/ipt/resource?r=shark-zooplankton-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + greyseal: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-greyseal-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + harbourseal: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-harbourseal-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + bacterioplankton: + en: + - url: "http://www.gbif.se/ipt/resource?r=shark-bacterioplankton-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + epibenthos: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-epibenthos-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + phytoplankton: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-phytoplankton-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + picoplankton: + en: + - url: "http://www.gbif.se/ipt/resource?r=shark-picoplankton" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + ringedseal: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-ringedseal-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + sealpathology: + en: + - url: "http://www.gbif.se/ipt/resource?r=shark-sealpathology" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + jellyfish: + en: + - url: "http://www.gbif.se/ipt/resource?r=shark-jellyfish-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + harbourporpoise: + en: + - url: "http://www.gbif.se/ipt/resource?r=shark-harbour-porpoise-nat" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + REG_PROJ: + epibenthos: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-epibenthos-reg" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + REG_RECIP_PROJ: + phytoplankton: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-phytoplankton-reg" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" + zoobenthos: + en: + - url: "http://www.gbif.se/ipt/resource?r=smhi-zoobenthos-reg" + description: "Global Biodiversity Information Facility GBIF-Sweden, portalen för fri tillgång till data om biologisk mångfald." + title: "GBIF ipt" +scifilab: + PROJ: + planktonimaging: + en: + - url: "http://doi.org/10.17044/scilifelab.25883455" + description: "Science for Life Laboratory i samarbete med Figshare. Här finns samtliga manuellt annoterade bilder." + title: "SciLifeLab Data Repository" +ecotaxa: + PROJ: + planktonimaging: + en: + - url: "https://ecotaxa.obs-vlfr.fr/prj/822" + description: "Här finns alla manuellt annoterade bilder från Östersjön" + title: "EcoTaxa" + - url: "https://ecotaxa.obs-vlfr.fr/prj/14392" + description: "Här finns alla manuellt annoterade bilder från Kattegat och Skagerrak" + title: "EcoTaxa" + - url: "https://ecotaxa.obs-vlfr.fr/prj/899" + description: "Här finns alla manuellt annoterade bilder från Tångesund" + title: "EcoTaxa" + ADCP: + en: + - url: "" + description: "" + title: "" + - url: "" + description: "" + title: "" +smhi_open_data: + NAT: + bacterioplankton: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-bakterioplankton-i-sverige-sedan-1989 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-bakterioplankton-i-sverige-sedan-1989 + chlorophyll: + en: > + sv: > + phytoplankton: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-vaxtplankton-i-sverige-sedan-1983 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-vaxtplankton-i-sverige-sedan-1983 + picoplankton: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-picoplankton-i-sverige-sedan-2002 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-picoplankton-i-sverige-sedan-2002 + primaryproduction: + en: > + sv: > + epibenthos: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-vegetationskladda-bottnar-sedan-1992 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-vegetationskladda-bottnar-sedan-1992 + jellyfish: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-gel-plankton-i-sverige-sedan-2007 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-gel-plankton-i-sverige-sedan-2007 + zoobenthos: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-mjukbottenfauna-i-sverige-sedan-1971 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-mjukbottenfauna-i-sverige-sedan-1971 + zooplankton: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-djurplankton-i-sverige-sedan-1979 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-djurplankton-i-sverige-sedan-1979 + physicalchemical: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-fysiska-och-kemiska-parametrar-i-sverige-sedan-1893 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-fysiska-och-kemiska-parametrar-i-sverige-sedan-1893 + profile: + en: > + sv: > + greyseal: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-grasal-i-sverige-sedan-1989 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-grasal-i-sverige-sedan-1989 + harbourseal: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-knubbsal-i-sverige-sedan-1988 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-knubbsal-i-sverige-sedan-1988 + ringedseal: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-vikare-i-sverige-sedan-1995 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-vikare-i-sverige-sedan-1995 + sealpathology: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-patologi-hos-sal-i-sverige + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-patologi-hos-sal-i-sverige + harbourporpoise: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-tumlare-i-sverige + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-nationell-marin-miljoovervakning-av-tumlare-i-sverige + REG_PROJ: + epibenthos: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-regional-marin-miljoovervakning-samt-andra-overvakningsprojekt-av-vegetationskladda-bottnar-i-sverige-sedan-1994 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-regional-marin-miljoovervakning-samt-andra-overvakningsprojekt-av-vegetationskladda-bottnar-i-sverige-sedan-1994 + REG_RECIP_PROJ: + phytoplankton: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-regional-marin-miljoovervakning-recipientkontroll-samt-andra-overvakningsprojekt-av-vaxtplankton-i-sverige-sedan-1985 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-regional-marin-miljoovervakning-recipientkontroll-samt-andra-overvakningsprojekt-av-vaxtplankton-i-sverige-sedan-1985 + zoobenthos: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-regional-marin-miljoovervakning-recipientkontroll-samt-andra-overvakningsprojekt-av-mjukbottenfauna-i-sverige-sedan-1972 + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-regional-marin-miljoovervakning-recipientkontroll-samt-andra-overvakningsprojekt-av-mjukbottenfauna-i-sverige-sedan-1972 + PROJ: + planktonimaging: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-vaxt-och-mikrodjurplanktondata-insamlad-med-imaging-flowcytobots-ifcb-i-svenska-och-narliggande-vatten + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-vaxt-och-mikrodjurplanktondata-insamlad-med-imaging-flowcytobots-ifcb-i-svenska-och-narliggande-vatten + ADCP: + en: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-havsstromsdata-insamlad-med-skeppsmonterad-acoustic-doppler-current-profiler-adcp-i-svenska-och-angransande-vatten + sv: > + https://www.smhi.se/data/sok-oppna-data-i-utforskaren/shark-havsstromsdata-insamlad-med-skeppsmonterad-acoustic-doppler-current-profiler-adcp-i-svenska-och-angransande-vatten + diff --git a/src/shark_metadata/metadata_from_package.py b/src/shark_metadata/metadata_from_package.py index 6d37b1c..5a51dfc 100644 --- a/src/shark_metadata/metadata_from_package.py +++ b/src/shark_metadata/metadata_from_package.py @@ -1,5 +1,6 @@ import json from pathlib import Path +from zipfile import ZipFile import click @@ -11,7 +12,17 @@ def cli(package: Path): delivery_data = DeliveryData.from_shark_package(package) metadata = delivery_data.generate_metadata() - print(json.dumps(metadata, indent=2)) + print(json.dumps(metadata, indent=2, ensure_ascii=False)) + if package.is_dir(): + with open(package / "metadata.json", "w", encoding="utf-8") as f: + json.dump(metadata, f, indent=2, ensure_ascii=False) + else: + pass + # detta verkar modifiera zip-paketet, + # zip-paketet borde kanske inte röras utanför sharkadm? + # with ZipFile(package, mode="a") as zf: + # json_bytes = json.dumps(metadata, ensure_ascii=False, indent=2).encode("utf-8") + # zf.writestr("metadata.json", json_bytes) if __name__ == "__main__": diff --git a/tests/test_get_metadata.py b/tests/test_get_metadata.py new file mode 100644 index 0000000..e8146fc --- /dev/null +++ b/tests/test_get_metadata.py @@ -0,0 +1,25 @@ +import json + +from shark_metadata.delivery_data import _load_all_yaml, get_static_metadata + + +def test_create_combined_dict(): + result = _load_all_yaml() + assert isinstance(result, dict) + + +def test_get_default_when_missing_given_key(): + result = get_static_metadata( + _load_all_yaml(), ["monitoring_program", "coast"], lang="sv" + ) + assert isinstance(result, str) + + +def test_get_none_when_missing_key(): + result = get_static_metadata(_load_all_yaml(), ["monitoring_program"], lang="sv") + assert result is None + + +def test_get_none_when_wrong_key(): + result = get_static_metadata(_load_all_yaml(), ["monitoring_programxxxx"], lang="sv") + assert result is None diff --git a/tests/test_write_metadata.py b/tests/test_write_metadata.py index 93d1a0b..f95f378 100644 --- a/tests/test_write_metadata.py +++ b/tests/test_write_metadata.py @@ -2,7 +2,7 @@ def test_metadata_has_expected_fields(): - given_delivery_note_data = {"DTYPE": "Phytoplankton"} + given_delivery_note_data = {"DTYPE": "Phytoplankton", "ORDERER": "HAV"} # Given a delivery data object delivery_data = DeliveryData(delivery_note=given_delivery_note_data) @@ -13,14 +13,14 @@ def test_metadata_has_expected_fields(): # Then they correspond to the expected fields orderered_expected_fields = ( "datatype", - "abstract", - "description", + "monitoring_program", "dataset_filename", - "discipline", + "keywords", + "method_description", "measuring_area_type", "coordinate_system", "platform_class", - "access_constraints", + "license", "min_year", "max_year", "min_date", @@ -29,19 +29,14 @@ def test_metadata_has_expected_fields(): "max_longitude_dd", "min_latitude_dd", "max_latitude_dd", + "stations", + "parameters", "taxonomic_coverage", "originator", - "contact", "orderer", "data_holding_centre", - "data distributor", "database_reference", "internet_access", - "address", - "postal_code", - "city", - "phone", - "email", "citation", ) diff --git a/uv.lock b/uv.lock index 56cec9c..1e20668 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.12'", @@ -242,7 +242,7 @@ wheels = [ [[package]] name = "nodc-codes" version = "2.0.0" -source = { git = "https://github.com/nodc-sweden/nodc-codes#5e0a3f6a0900b3c34b9f8e0689f5c1daeb38ef9a" } +source = { git = "https://github.com/nodc-sweden/nodc-codes/?tag=v2.0.0#5e0a3f6a0900b3c34b9f8e0689f5c1daeb38ef9a" } dependencies = [ { name = "requests" }, ] @@ -851,7 +851,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "click", specifier = ">=8.3.0" }, - { name = "nodc-codes", git = "https://github.com/nodc-sweden/nodc-codes" }, + { name = "nodc-codes", git = "https://github.com/nodc-sweden/nodc-codes/?tag=v2.0.0" }, { name = "pyyaml", specifier = ">=6.0.3" }, { name = "sharkadm", git = "https://github.com/nodc-sweden/SHARKadm" }, ] From df2ba1076f1bb9913d92c3a77806205c390a40c5 Mon Sep 17 00:00:00 2001 From: Lena Viktorsson Date: Thu, 23 Oct 2025 14:33:06 +0200 Subject: [PATCH 2/6] cache filereading --- src/shark_metadata/delivery_data.py | 93 ++++++++++++++--------------- tests/test_get_metadata.py | 19 +++--- 2 files changed, 53 insertions(+), 59 deletions(-) diff --git a/src/shark_metadata/delivery_data.py b/src/shark_metadata/delivery_data.py index c60c415..a79d266 100644 --- a/src/shark_metadata/delivery_data.py +++ b/src/shark_metadata/delivery_data.py @@ -1,3 +1,4 @@ +from functools import cache from importlib import resources from pathlib import Path from typing import Callable, Self @@ -15,29 +16,27 @@ def _apply_on_column(function: Callable, column: str, dataframe: pl.DataFrame): return function(dataframe[column]) -def _load_all_yaml() -> dict: - resource = resources.files(__package__) / "metadata_config" - data = {} - for file in Path(resource).glob("*.yaml"): - key = file.stem - with open(file, encoding="utf-8") as f: - data[key] = yaml.safe_load(f) - return data +@cache +def _load_yaml(filename: str) -> dict: + resource = Path(resources.files(__package__)) / "metadata_config" / f"{filename}.yaml" + if Path(resource).exists(): + with open(resource, encoding="utf-8") as f: + return yaml.safe_load(f) + else: + return {} -STATIC_METADATA = _load_all_yaml() - - -def get_static_metadata(metadata: dict, keys: list, lang: str = "en"): +def get_static_metadata(filename: str, keys: list, lang: str = "en"): + metadata = _load_yaml(filename) for key in keys: if not isinstance(metadata, dict): - return None + return "NA" metadata = metadata.get(key) or metadata.get("default") if metadata is None: - return None + return "NA" if not isinstance(metadata, dict): - return None - return metadata.get(lang) + return "NA" + return metadata.get(lang, "NA") class DeliveryData: @@ -114,34 +113,34 @@ def generate_metadata(self): "delivery_datatype", self.datatype ), # lista om metadata för flera paket från olika datatyper "monitoring_program": get_static_metadata( - STATIC_METADATA, ["monitoring_program", self.monitoring_program], "en" + "monitoring_program", [self.monitoring_program], "en" ), # lista om metadata skrivs för flera paket. "method_description": get_static_metadata( - STATIC_METADATA, - ["methods", self.monitoring_program, self.datatype.lower()], + "methods", + [self.monitoring_program, self.datatype.lower()], "en", ), "dataset_filename": self._source, # lista om metadata skrivs för flera paket. "keywords": get_static_metadata( - STATIC_METADATA, - ["keywords", self.monitoring_program, self.datatype.lower(), "gcmd"], + "keywords", + [self.monitoring_program, self.datatype.lower(), "gcmd"], "en", ), "measuring_area_type": get_static_metadata( - STATIC_METADATA, - ["misc", "measuring_area_type", self.datatype.lower()], + "misc", + ["measuring_area_type", self.datatype.lower()], "en", ), # point, polygon, transect, annat namn? "coordinate_system": get_static_metadata( - STATIC_METADATA, - ["misc", "coordinate_system", self.datatype.lower()], + "misc", + ["coordinate_system", self.datatype.lower()], "en", ), # alltid wgs84 "platform_class": get_static_metadata( - STATIC_METADATA, ["misc", "platform_class", self.datatype.lower()], "en" + "misc", ["platform_class", self.datatype.lower()], "en" ), "license": get_static_metadata( - STATIC_METADATA, ["misc", "license", self.datatype.lower()], "en" + "misc", ["license", self.datatype.lower()], "en" ), # license.yaml, flyttat till misc "min_year": _apply_on_column(min, "visit_year", self._data), "max_year": _apply_on_column(max, "visit_year", self._data), @@ -165,8 +164,8 @@ def generate_metadata(self): "LABO", self.originator ), "contact": get_static_metadata( - STATIC_METADATA, - ["originator_contact", self.originator, self.datatype], + "originator_contact", + [self.originator, self.datatype], "en", ), }, # lista med flera dicts om flera datapaket läses. @@ -175,41 +174,41 @@ def generate_metadata(self): ), "data_holding_centre": { "name": get_static_metadata( - STATIC_METADATA, - ["misc", "data_holding_centre", self.datatype.lower(), "name"], + "misc", + ["data_holding_centre", self.datatype.lower(), "name"], ), "address": get_static_metadata( - STATIC_METADATA, - ["misc", "data_holding_centre", self.datatype.lower(), "address"], + "misc", + ["data_holding_centre", self.datatype.lower(), "address"], ), "postal_code": get_static_metadata( - STATIC_METADATA, - ["misc", "data_holding_centre", self.datatype.lower(), "postal_code"], + "misc", + ["data_holding_centre", self.datatype.lower(), "postal_code"], ), "city": get_static_metadata( - STATIC_METADATA, - ["misc", "data_holding_centre", self.datatype.lower(), "city"], + "misc", + ["data_holding_centre", self.datatype.lower(), "city"], ), "phone": get_static_metadata( - STATIC_METADATA, - ["misc", "data_holding_centre", self.datatype.lower(), "phone"], + "misc", + ["data_holding_centre", self.datatype.lower(), "phone"], ), "email": get_static_metadata( - STATIC_METADATA, - ["misc", "data_holding_centre", self.datatype.lower(), "email"], + "misc", + ["data_holding_centre", self.datatype.lower(), "email"], ), }, "database_reference": get_static_metadata( - STATIC_METADATA, - ["misc", "database_reference", self.datatype.lower()], + "misc", + ["database_reference", self.datatype.lower()], ), "internet_access": get_static_metadata( - STATIC_METADATA, - ["url_linkage", "shark", self.monitoring_program, self.datatype.lower()], + "url_linkage", + ["shark", self.monitoring_program, self.datatype.lower()], )[0]["url"], # url linkage, shark.smhi.se, shark.smhi.se/api/docs "citation": get_static_metadata( - STATIC_METADATA, - ["misc", "citation", self.datatype.lower()], + "misc", + ["citation", self.datatype.lower()], ).format(originator=self.originator, project=self.monitoring_program), } diff --git a/tests/test_get_metadata.py b/tests/test_get_metadata.py index e8146fc..82e9a68 100644 --- a/tests/test_get_metadata.py +++ b/tests/test_get_metadata.py @@ -1,25 +1,20 @@ import json -from shark_metadata.delivery_data import _load_all_yaml, get_static_metadata - - -def test_create_combined_dict(): - result = _load_all_yaml() - assert isinstance(result, dict) +from shark_metadata.delivery_data import get_static_metadata def test_get_default_when_missing_given_key(): result = get_static_metadata( - _load_all_yaml(), ["monitoring_program", "coast"], lang="sv" + "monitoring_program", ["coast"], lang="sv" ) - assert isinstance(result, str) + assert not result == "NA" def test_get_none_when_missing_key(): - result = get_static_metadata(_load_all_yaml(), ["monitoring_program"], lang="sv") - assert result is None + result = get_static_metadata("monitoring_program", [], lang="sv") + assert isinstance(result, str) def test_get_none_when_wrong_key(): - result = get_static_metadata(_load_all_yaml(), ["monitoring_programxxxx"], lang="sv") - assert result is None + result = get_static_metadata("monitoring_programxxx", [], lang="sv") + assert isinstance(result, str) From 01e0c4d56663a60a6be90f3d1623024d361a79df Mon Sep 17 00:00:00 2001 From: Lena Viktorsson Date: Thu, 30 Oct 2025 18:44:38 +0100 Subject: [PATCH 3/6] restructure metadata_config dict generate readme fixes to metadata_config yaml files removed unecessary write to zipfile --- src/shark_metadata/delivery_data.py | 139 +++++++++++------- src/shark_metadata/metadata_config/misc.yaml | 28 +++- .../metadata_config/readme.yaml | 36 +++++ .../metadata_config/url_linkage.yaml | 12 +- src/shark_metadata/metadata_from_package.py | 12 +- tests/test_get_metadata.py | 8 +- 6 files changed, 162 insertions(+), 73 deletions(-) create mode 100644 src/shark_metadata/metadata_config/readme.yaml diff --git a/src/shark_metadata/delivery_data.py b/src/shark_metadata/delivery_data.py index a79d266..ccaf416 100644 --- a/src/shark_metadata/delivery_data.py +++ b/src/shark_metadata/delivery_data.py @@ -16,6 +16,19 @@ def _apply_on_column(function: Callable, column: str, dataframe: pl.DataFrame): return function(dataframe[column]) +def _apply_on_columns(function: Callable, columns: list, dataframe: pl.DataFrame): + if not all(col in dataframe.columns for col in columns): + return None + return function(dataframe.select(columns)) + + +def build_parameter_unit_mapping(sub_df: pl.DataFrame): + result = ( + sub_df.group_by("parameter").agg(pl.col("unit").unique()).to_dict(as_series=False) + ) + return {p: u for p, u in zip(result["parameter"], result["unit"])} + + @cache def _load_yaml(filename: str) -> dict: resource = Path(resources.files(__package__)) / "metadata_config" / f"{filename}.yaml" @@ -26,17 +39,48 @@ def _load_yaml(filename: str) -> dict: return {} +def restructure_by_language(filename: str) -> dict: + """ + Restructure the nested metadata dict so that 'en' and 'sv' become the top-level keys. + + Example: + Input: + {'NATL': {'bacterioplankton': {'en': 'text', 'sv': 'text'}}} + Output: + {'en': {'NATL': {'bacterioplankton': 'text'}}, + 'sv': {'NATL': {'bacterioplankton': 'text'}}} + """ + data = _load_yaml(filename) + result = defaultdict(lambda: defaultdict(dict)) + + def walk(node, path): + if isinstance(node, dict): + langs = {"en", "sv"} & node.keys() # find intersection + if langs: + for lang in langs: + # navigate to the correct nested location in result[lang] + d = result[lang] + for key in path[:-1]: + d = d.setdefault(key, {}) + d[path[-1]] = node[lang] + else: + for k, v in node.items(): + walk(v, [*path, k]) + + walk(data, []) + + return {lang: dict(result[lang]) for lang in result} + + def get_static_metadata(filename: str, keys: list, lang: str = "en"): - metadata = _load_yaml(filename) - for key in keys: - if not isinstance(metadata, dict): - return "NA" - metadata = metadata.get(key) or metadata.get("default") - if metadata is None: - return "NA" - if not isinstance(metadata, dict): - return "NA" - return metadata.get(lang, "NA") + metadata = restructure_by_language(filename) + if metadata.get(lang): + metadata = metadata.get(lang) + for key in keys: + metadata = metadata.get(key) or metadata.get("default") + if metadata is None: + return "NA" + return metadata class DeliveryData: @@ -89,7 +133,7 @@ def delivery_note(self): @property def datatype(self): - return self.delivery_note.get("DTYPE", "") + return self.delivery_note.get("DTYPE") or self.delivery_note.get("DATA_FORMAT") @property def monitoring_program(self): @@ -105,9 +149,15 @@ def originator(self): def fields(self): return self._fields + def generate_readme(self): + return get_static_metadata( + "readme", + ["default"], + "en", + ) + def generate_metadata(self): print("\n".join(sorted(self._data.columns))) - print(self.delivery_note) return { "datatype": get_translate_codes_object().get_english_name( "delivery_datatype", self.datatype @@ -142,22 +192,25 @@ def generate_metadata(self): "license": get_static_metadata( "misc", ["license", self.datatype.lower()], "en" ), # license.yaml, flyttat till misc - "min_year": _apply_on_column(min, "visit_year", self._data), - "max_year": _apply_on_column(max, "visit_year", self._data), - "min_date": _apply_on_column(min, "sample_date", self._data), - "max_date": _apply_on_column(max, "sample_date", self._data), - "min_longitude_dd": _apply_on_column(min, "sample_longitude_dd", self._data), - "max_longitude_dd": _apply_on_column(max, "sample_longitude_dd", self._data), - "min_latitude_dd": _apply_on_column(min, "sample_latitude_dd", self._data), - "max_latitude_dd": _apply_on_column(max, "sample_latitude_dd", self._data), + "min_year": _apply_on_column(min, "visit_year", self.data), + "max_year": _apply_on_column(max, "visit_year", self.data), + "min_date": _apply_on_column(min, "sample_date", self.data), + "max_date": _apply_on_column(max, "sample_date", self.data), + "min_longitude_dd": _apply_on_column(min, "sample_longitude_dd", self.data), + "max_longitude_dd": _apply_on_column(max, "sample_longitude_dd", self.data), + "min_latitude_dd": _apply_on_column(min, "sample_latitude_dd", self.data), + "max_latitude_dd": _apply_on_column(max, "sample_latitude_dd", self.data), + # Which transformer to get station_name without synonyms, i.e. not reported_? "stations": _apply_on_column( - lambda s: s.unique().to_list(), "station_name", self._data + lambda s: s.unique().to_list(), "reported_station_name", self.data ), - "parameters": _apply_on_column( - lambda s: s.unique().to_list(), "parameter", self._data + "parameters": _apply_on_columns( + build_parameter_unit_mapping, ["parameter", "unit"], self.data ), + # Do we need a transformer to get the column scientific_name? + # Do we want reported or a transformed column? "taxonomic_coverage": _apply_on_column( - lambda s: s.unique().to_list(), "scientific_name", self._data + lambda s: s.unique().to_list(), "reported_scientific_name", self.data ), "originator": { "name": get_translate_codes_object().get_english_name( @@ -170,34 +223,11 @@ def generate_metadata(self): ), }, # lista med flera dicts om flera datapaket läses. "orderer": get_translate_codes_object().get_english_name( - "LABO", self.delivery_note.get("ORDERER", "sample_orderer_code") + "LABO", self.delivery_note.get("sample_orderer_code", "Not specified") + ), + "data_holding_centre": get_static_metadata( + "misc", ["data_holding_centre", "smhi"] ), - "data_holding_centre": { - "name": get_static_metadata( - "misc", - ["data_holding_centre", self.datatype.lower(), "name"], - ), - "address": get_static_metadata( - "misc", - ["data_holding_centre", self.datatype.lower(), "address"], - ), - "postal_code": get_static_metadata( - "misc", - ["data_holding_centre", self.datatype.lower(), "postal_code"], - ), - "city": get_static_metadata( - "misc", - ["data_holding_centre", self.datatype.lower(), "city"], - ), - "phone": get_static_metadata( - "misc", - ["data_holding_centre", self.datatype.lower(), "phone"], - ), - "email": get_static_metadata( - "misc", - ["data_holding_centre", self.datatype.lower(), "email"], - ), - }, "database_reference": get_static_metadata( "misc", ["database_reference", self.datatype.lower()], @@ -209,7 +239,12 @@ def generate_metadata(self): "citation": get_static_metadata( "misc", ["citation", self.datatype.lower()], - ).format(originator=self.originator, project=self.monitoring_program), + ).format( + originator=self.originator, + project=get_translate_codes_object().get_english_name( + "project", self.monitoring_program + ), + ), } @classmethod diff --git a/src/shark_metadata/metadata_config/misc.yaml b/src/shark_metadata/metadata_config/misc.yaml index 5f98596..c0d0abd 100644 --- a/src/shark_metadata/metadata_config/misc.yaml +++ b/src/shark_metadata/metadata_config/misc.yaml @@ -11,25 +11,39 @@ license: Data följer licensvillkoren Creative commons CC0. https://creativecommons.org/publicdomain/zero/1.0/deed.sv data_holding_centre: + smhi: + en: + name: Swedish Meteorological and Hydrological Institute + address: Göteborgseskaderns plats 3 + postal_code: SE-426 71 + city: Västra Frölunda + phone: +46-11-495 80 00 + email: shark@smhi.se + sv: + namn: Sveriges meteorologiska och hydrologiska institut + adress: Göteborgseskaderns plats 3 + postadress: 426 71 Västra Frölunda + tel: +46-11-495 80 00 + e-post: shark@smhi.se default: - "name": + name: en: Swedish Meteorological and Hydrological Institute sv: Sveriges meteorologiska och hydrologiska institute - "address": + address: en: Göteborgseskaderns plats 3 - "postal_code": + postal_code: en: SE-426 71 - "city": + city: en: Västra Frölunda - "phone": + phone: en: +46-11-495 80 00 - "email": + email: en: shark@smhi.se database_reference: @@ -71,5 +85,5 @@ citation: # datum för skapande, leverantör, ackreditering, år (min, max), datatyp default: en: | - The data used in this {project} has been downloaded from the Swedish National Oceanographic Data Centre at the Swedish Meteorological and Hydrological Institute (SMHI). Data has been collected within Swedish coordinated marine monitoring by {originator}. + The data was collected within the project/program '{project}' and has been downloaded from the Swedish National Oceanographic Data Centre at the Swedish Meteorological and Hydrological Institute (SMHI). Data has been collected within Swedish coordinated marine monitoring by {originator}. diff --git a/src/shark_metadata/metadata_config/readme.yaml b/src/shark_metadata/metadata_config/readme.yaml new file mode 100644 index 0000000..cbd6421 --- /dev/null +++ b/src/shark_metadata/metadata_config/readme.yaml @@ -0,0 +1,36 @@ +# Metadata for Swedish marine environmental monitoring datasets. +# Repository: https://github.com/sharkdata/metadata +--- + + # readme och meatadata fyller olika syften. vill nog ha en readme och en metadatafil. endast ha innehåll i readme som beskriver, inget om innehållet + # Kolla med MW och MPB om innehåll i readme. kan vi slakta något? + +default: + en: | + This database contains marine environmental monitoring data delivered to the Swedish National data host for oceanographic and marine biological environmental data + + Data packages are compressed to zip-format. + Name of the zip-file always starts with SHARK_ and then follows the structure: datatype_year_deliverer + + The zip-file contains: + - File "shark_data.txt": This is the published data product (tab-separated text file) + - File "shark_metadata.json": Gives an overview and description of the dataset and the terms of use. Describes the contents of the zip-file in English and Swedish. + - Folder "received_data": Contains one or multiple original data files from the data deliverer (e.g. semi-colon delimited, tab-delimited or xml files), followed by supplementary files from the data deliverer with relevant information for the delivered data (in different formats such as pdf). + - Folder "processed_data": Contains one or multiple edited data files (e.g. semi-colon separated csv-, txt- or xlm-format), with corrected data (e.g. corrected codes, species, and station name) and adapted to the SHARK data handling system, a delivery_note.txt where the provider of the data describes the content of the delivered data and sometimes a change_log.txt file that specifies changes made by the Swedish National data host in the data review process. + + Data reporting guide and code descriptions used by the Swedish National data host (in Swedish language) is available here http://www.smhi.se/data/hav-och-havsmiljo/datavardskap-oceanografi-och-marinbiologi + sv: | + Denna databas innehåller marin miljöövervakningsdata som levererats till datavärden SMHI. + + #Ta bort nedan rad? Vad betyder detta egentligen stämmer inte? + Filerna är ordnade efter Övervakningsår/Datatyp/Dataleverantör enligt LABO-kod/Versionsnummer enligt datum. + + Datapaket är komprimerade i zip-format. + + Zip-filen innehåller: + - Filen "shark_data.txt". Detta är den publiserade dataprodukten (tabbavgränsad textfil). + - Filen "shark_metadata.json". Ger en översikt och beskrivning av data, samt villkor för användning. Beskriver innehållet i zip-filen både på engelska och på svenska. + - Mappen "received_data". Innehåller en eller flera levererade datafiler från dataleverantören (kan vara semikolonseparerat, tabbavgränsade, Excel-filer eller xml-filer), samt medföljande filer från leverantören (i olika format som t.ex. pdf) som anses vara relevant tillsammans med levererade data. + - Mappen "processed_data". Innehåller en eller flera redigerade datafiler (kan vara semikolonseparerat, tabbavgränsade eller xml-filer), som är korrigerad (t.ex. koder, arter och stationsnamn) och anpassad till SHARKs datahanteringssystem, en delivery_note.txt där dataleverantören visar vad dataleveransen innehåller, en analyse_info.txt där information om analyserna presenteras, en sampling_info.txt där information om provtagningen presenteras och ibland en change_log.txt fil som dokumenterar förändringar gjorda av datavärden under leveranskontroll och databearbetning. + + Här finns en guide för inrapportering av data, inklusive kodbeskrivningar använda inom datavärdskapet. http://www.smhi.se/data/hav-och-havsmiljo/datavardskap-oceanografi-och-marinbiologi diff --git a/src/shark_metadata/metadata_config/url_linkage.yaml b/src/shark_metadata/metadata_config/url_linkage.yaml index d822aeb..446115c 100644 --- a/src/shark_metadata/metadata_config/url_linkage.yaml +++ b/src/shark_metadata/metadata_config/url_linkage.yaml @@ -3,12 +3,12 @@ shark: default: default: en: - - url: "http://shark.smhi.se/" - description: "SHARK är Svenskt HavsARKivs webbplats för nedladdning av data." - title: "SHARK" - - url: "https://shark.smhi.se/api/docs/" - description: "SHARK API är Svenskt HavsARKivs API för avancerad nedladdning av data." - title: "SHARK API" + - url: "http://shark.smhi.se/" + description: "SHARK är Svenskt HavsARKivs webbplats för nedladdning av data." + title: "SHARK" + - url: "https://shark.smhi.se/api/docs/" + description: "SHARK API är Svenskt HavsARKivs API för avancerad nedladdning av data." + title: "SHARK API" gbif: NAT: zoobenthos: diff --git a/src/shark_metadata/metadata_from_package.py b/src/shark_metadata/metadata_from_package.py index 5a51dfc..e014361 100644 --- a/src/shark_metadata/metadata_from_package.py +++ b/src/shark_metadata/metadata_from_package.py @@ -1,6 +1,5 @@ import json from pathlib import Path -from zipfile import ZipFile import click @@ -12,17 +11,16 @@ def cli(package: Path): delivery_data = DeliveryData.from_shark_package(package) metadata = delivery_data.generate_metadata() + readme = delivery_data.generate_readme() print(json.dumps(metadata, indent=2, ensure_ascii=False)) if package.is_dir(): - with open(package / "metadata.json", "w", encoding="utf-8") as f: + with open(package / "shark_metadata.json", "w", encoding="utf-8") as f: json.dump(metadata, f, indent=2, ensure_ascii=False) + print(readme) + with open(package / "readme.txt", "w", encoding="utf-8") as f: + f.write(readme) else: pass - # detta verkar modifiera zip-paketet, - # zip-paketet borde kanske inte röras utanför sharkadm? - # with ZipFile(package, mode="a") as zf: - # json_bytes = json.dumps(metadata, ensure_ascii=False, indent=2).encode("utf-8") - # zf.writestr("metadata.json", json_bytes) if __name__ == "__main__": diff --git a/tests/test_get_metadata.py b/tests/test_get_metadata.py index 82e9a68..200120e 100644 --- a/tests/test_get_metadata.py +++ b/tests/test_get_metadata.py @@ -1,7 +1,13 @@ import json -from shark_metadata.delivery_data import get_static_metadata +from shark_metadata.delivery_data import get_static_metadata, get_static_metadata +def test_get_new(): + result = get_static_metadata( + "misc", + ["data_holding_centre", "smhi"]) + print(result) + assert result == "NA" def test_get_default_when_missing_given_key(): result = get_static_metadata( From a73f00bd3071496893d4012caa614d4a043f8188 Mon Sep 17 00:00:00 2001 From: Lena Viktorsson Date: Thu, 30 Oct 2025 18:52:03 +0100 Subject: [PATCH 4/6] sharkadm for shark archive path point to sharkadm branch with new PolarsArchiveDataHolders --- pyproject.toml | 2 +- src/shark_metadata/delivery_data.py | 21 +- uv.lock | 448 +++++++++++++++------------- 3 files changed, 261 insertions(+), 210 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c8747fb..6242541 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,8 +32,8 @@ dev = [ package = true [tool.uv.sources] -sharkadm = { git = "https://github.com/nodc-sweden/SHARKadm" } nodc-codes = { git = "https://github.com/nodc-sweden/nodc-codes/", tag = "v2.0.0" } +sharkadm = { git = "https://github.com/nodc-sweden/SHARKadm", rev = "polars_archive_dataholders" } [tool.ruff] diff --git a/src/shark_metadata/delivery_data.py b/src/shark_metadata/delivery_data.py index ccaf416..d3d9398 100644 --- a/src/shark_metadata/delivery_data.py +++ b/src/shark_metadata/delivery_data.py @@ -1,3 +1,4 @@ +from collections import defaultdict from functools import cache from importlib import resources from pathlib import Path @@ -6,7 +7,9 @@ import polars as pl import yaml from nodc_codes import get_translate_codes_object -from sharkadm.data import get_polars_data_holder +from sharkadm import controller as sharkadm_controller +from sharkadm import multi_transformers, transformers +from sharkadm.sharkadm_logger import adm_logger def _apply_on_column(function: Callable, column: str, dataframe: pl.DataFrame): @@ -249,7 +252,21 @@ def generate_metadata(self): @classmethod def from_shark_package(cls, package_path: Path) -> Self: - sharkadm_dataholder = get_polars_data_holder(package_path) + adm_logger.print_on_screen() + controller = sharkadm_controller.get_polars_controller_with_data(package_path) + print(f"\t\t{controller.data_holder.data.columns=}") + print(f"\t\t{controller.data_holder.data_structure=}") + for transformer, args, kwargs in ( + (transformers.PolarsReplaceCommaWithDot, (), {}), + (multi_transformers.DateTimePolars, (), {}), + (multi_transformers.PositionPolars, (), {}), + (transformers.PolarsWideToLong, (), {}), + (transformers.PolarsRemoveColumns, ("COPY_VARIABLE.*",), {}), + # (transformers.AddStationInfo, (), {}), # uses pandas + ): + controller.transform(transformer(*args, **kwargs)) + + sharkadm_dataholder = controller.data_holder return cls( data=sharkadm_dataholder.data, delivery_note=sharkadm_dataholder.delivery_note.data, diff --git a/uv.lock b/uv.lock index 1e20668..ceb1383 100644 --- a/uv.lock +++ b/uv.lock @@ -26,55 +26,75 @@ wheels = [ [[package]] name = "charset-normalizer" -version = "3.4.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" }, - { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" }, - { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" }, - { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" }, - { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" }, - { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" }, - { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" }, - { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, - { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, - { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, - { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, - { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, - { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, - { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, - { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, - { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, - { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, - { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, - { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, - { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, - { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, - { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, - { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, - { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, - { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, - { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, - { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, - { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, - { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, - { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, - { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] [[package]] @@ -202,20 +222,20 @@ wheels = [ [[package]] name = "idna" -version = "3.10" +version = "3.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, ] [[package]] name = "iniconfig" -version = "2.1.0" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] [[package]] @@ -250,7 +270,7 @@ dependencies = [ [[package]] name = "nodc-station" version = "0.1.0" -source = { git = "https://github.com/nodc-sweden/nodc-station#e0cbf9cda7081f0edd7aa78330c35ea00dabb8bb" } +source = { git = "https://github.com/nodc-sweden/nodc-station#40113e89d962519dc7b857c749074d64da0c5be3" } dependencies = [ { name = "geopandas" }, { name = "polars" }, @@ -269,83 +289,83 @@ wheels = [ [[package]] name = "numpy" -version = "2.3.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648, upload-time = "2025-09-09T16:54:12.543Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/45/e80d203ef6b267aa29b22714fb558930b27960a0c5ce3c19c999232bb3eb/numpy-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ffc4f5caba7dfcbe944ed674b7eef683c7e94874046454bb79ed7ee0236f59d", size = 21259253, upload-time = "2025-09-09T15:56:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/52/18/cf2c648fccf339e59302e00e5f2bc87725a3ce1992f30f3f78c9044d7c43/numpy-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7e946c7170858a0295f79a60214424caac2ffdb0063d4d79cb681f9aa0aa569", size = 14450980, upload-time = "2025-09-09T15:56:05.926Z" }, - { url = "https://files.pythonhosted.org/packages/93/fb/9af1082bec870188c42a1c239839915b74a5099c392389ff04215dcee812/numpy-2.3.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cd4260f64bc794c3390a63bf0728220dd1a68170c169088a1e0dfa2fde1be12f", size = 5379709, upload-time = "2025-09-09T15:56:07.95Z" }, - { url = "https://files.pythonhosted.org/packages/75/0f/bfd7abca52bcbf9a4a65abc83fe18ef01ccdeb37bfb28bbd6ad613447c79/numpy-2.3.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f0ddb4b96a87b6728df9362135e764eac3cfa674499943ebc44ce96c478ab125", size = 6913923, upload-time = "2025-09-09T15:56:09.443Z" }, - { url = "https://files.pythonhosted.org/packages/79/55/d69adad255e87ab7afda1caf93ca997859092afeb697703e2f010f7c2e55/numpy-2.3.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afd07d377f478344ec6ca2b8d4ca08ae8bd44706763d1efb56397de606393f48", size = 14589591, upload-time = "2025-09-09T15:56:11.234Z" }, - { url = "https://files.pythonhosted.org/packages/10/a2/010b0e27ddeacab7839957d7a8f00e91206e0c2c47abbb5f35a2630e5387/numpy-2.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc92a5dedcc53857249ca51ef29f5e5f2f8c513e22cfb90faeb20343b8c6f7a6", size = 16938714, upload-time = "2025-09-09T15:56:14.637Z" }, - { url = "https://files.pythonhosted.org/packages/1c/6b/12ce8ede632c7126eb2762b9e15e18e204b81725b81f35176eac14dc5b82/numpy-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7af05ed4dc19f308e1d9fc759f36f21921eb7bbfc82843eeec6b2a2863a0aefa", size = 16370592, upload-time = "2025-09-09T15:56:17.285Z" }, - { url = "https://files.pythonhosted.org/packages/b4/35/aba8568b2593067bb6a8fe4c52babb23b4c3b9c80e1b49dff03a09925e4a/numpy-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:433bf137e338677cebdd5beac0199ac84712ad9d630b74eceeb759eaa45ddf30", size = 18884474, upload-time = "2025-09-09T15:56:20.943Z" }, - { url = "https://files.pythonhosted.org/packages/45/fa/7f43ba10c77575e8be7b0138d107e4f44ca4a1ef322cd16980ea3e8b8222/numpy-2.3.3-cp311-cp311-win32.whl", hash = "sha256:eb63d443d7b4ffd1e873f8155260d7f58e7e4b095961b01c91062935c2491e57", size = 6599794, upload-time = "2025-09-09T15:56:23.258Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a2/a4f78cb2241fe5664a22a10332f2be886dcdea8784c9f6a01c272da9b426/numpy-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:ec9d249840f6a565f58d8f913bccac2444235025bbb13e9a4681783572ee3caa", size = 13088104, upload-time = "2025-09-09T15:56:25.476Z" }, - { url = "https://files.pythonhosted.org/packages/79/64/e424e975adbd38282ebcd4891661965b78783de893b381cbc4832fb9beb2/numpy-2.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:74c2a948d02f88c11a3c075d9733f1ae67d97c6bdb97f2bb542f980458b257e7", size = 10460772, upload-time = "2025-09-09T15:56:27.679Z" }, - { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014, upload-time = "2025-09-09T15:56:29.966Z" }, - { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220, upload-time = "2025-09-09T15:56:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918, upload-time = "2025-09-09T15:56:34.175Z" }, - { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922, upload-time = "2025-09-09T15:56:36.149Z" }, - { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991, upload-time = "2025-09-09T15:56:40.548Z" }, - { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643, upload-time = "2025-09-09T15:56:43.343Z" }, - { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787, upload-time = "2025-09-09T15:56:46.141Z" }, - { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598, upload-time = "2025-09-09T15:56:49.844Z" }, - { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800, upload-time = "2025-09-09T15:56:52.499Z" }, - { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615, upload-time = "2025-09-09T15:56:54.422Z" }, - { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936, upload-time = "2025-09-09T15:56:56.541Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588, upload-time = "2025-09-09T15:56:59.087Z" }, - { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802, upload-time = "2025-09-09T15:57:01.73Z" }, - { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537, upload-time = "2025-09-09T15:57:03.765Z" }, - { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743, upload-time = "2025-09-09T15:57:07.921Z" }, - { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881, upload-time = "2025-09-09T15:57:11.349Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301, upload-time = "2025-09-09T15:57:14.245Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645, upload-time = "2025-09-09T15:57:16.534Z" }, - { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179, upload-time = "2025-09-09T15:57:18.883Z" }, - { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250, upload-time = "2025-09-09T15:57:21.296Z" }, - { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269, upload-time = "2025-09-09T15:57:23.034Z" }, - { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314, upload-time = "2025-09-09T15:57:25.045Z" }, - { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025, upload-time = "2025-09-09T15:57:27.257Z" }, - { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053, upload-time = "2025-09-09T15:57:30.077Z" }, - { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444, upload-time = "2025-09-09T15:57:32.733Z" }, - { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039, upload-time = "2025-09-09T15:57:34.328Z" }, - { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314, upload-time = "2025-09-09T15:57:36.255Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722, upload-time = "2025-09-09T15:57:38.622Z" }, - { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755, upload-time = "2025-09-09T15:57:41.16Z" }, - { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560, upload-time = "2025-09-09T15:57:43.459Z" }, - { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776, upload-time = "2025-09-09T15:57:45.793Z" }, - { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281, upload-time = "2025-09-09T15:57:47.492Z" }, - { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275, upload-time = "2025-09-09T15:57:49.647Z" }, - { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527, upload-time = "2025-09-09T15:57:52.006Z" }, - { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159, upload-time = "2025-09-09T15:57:54.407Z" }, - { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624, upload-time = "2025-09-09T15:57:56.5Z" }, - { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627, upload-time = "2025-09-09T15:57:58.206Z" }, - { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926, upload-time = "2025-09-09T15:58:00.035Z" }, - { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958, upload-time = "2025-09-09T15:58:02.738Z" }, - { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920, upload-time = "2025-09-09T15:58:05.029Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076, upload-time = "2025-09-09T15:58:07.745Z" }, - { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952, upload-time = "2025-09-09T15:58:10.096Z" }, - { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322, upload-time = "2025-09-09T15:58:12.138Z" }, - { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630, upload-time = "2025-09-09T15:58:14.64Z" }, - { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987, upload-time = "2025-09-09T15:58:16.889Z" }, - { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076, upload-time = "2025-09-09T15:58:20.343Z" }, - { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491, upload-time = "2025-09-09T15:58:22.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913, upload-time = "2025-09-09T15:58:24.569Z" }, - { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811, upload-time = "2025-09-09T15:58:26.416Z" }, - { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689, upload-time = "2025-09-09T15:58:28.831Z" }, - { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855, upload-time = "2025-09-09T15:58:31.349Z" }, - { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520, upload-time = "2025-09-09T15:58:33.762Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371, upload-time = "2025-09-09T15:58:36.04Z" }, - { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576, upload-time = "2025-09-09T15:58:37.927Z" }, - { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953, upload-time = "2025-09-09T15:58:40.576Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f2/7e0a37cfced2644c9563c529f29fa28acbd0960dde32ece683aafa6f4949/numpy-2.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1e02c7159791cd481e1e6d5ddd766b62a4d5acf8df4d4d1afe35ee9c5c33a41e", size = 21131019, upload-time = "2025-09-09T15:58:42.838Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/3291f505297ed63831135a6cc0f474da0c868a1f31b0dd9a9f03a7a0d2ed/numpy-2.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:dca2d0fc80b3893ae72197b39f69d55a3cd8b17ea1b50aa4c62de82419936150", size = 14376288, upload-time = "2025-09-09T15:58:45.425Z" }, - { url = "https://files.pythonhosted.org/packages/bf/4b/ae02e985bdeee73d7b5abdefeb98aef1207e96d4c0621ee0cf228ddfac3c/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:99683cbe0658f8271b333a1b1b4bb3173750ad59c0c61f5bbdc5b318918fffe3", size = 5305425, upload-time = "2025-09-09T15:58:48.6Z" }, - { url = "https://files.pythonhosted.org/packages/8b/eb/9df215d6d7250db32007941500dc51c48190be25f2401d5b2b564e467247/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d9d537a39cc9de668e5cd0e25affb17aec17b577c6b3ae8a3d866b479fbe88d0", size = 6819053, upload-time = "2025-09-09T15:58:50.401Z" }, - { url = "https://files.pythonhosted.org/packages/57/62/208293d7d6b2a8998a4a1f23ac758648c3c32182d4ce4346062018362e29/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8596ba2f8af5f93b01d97563832686d20206d303024777f6dfc2e7c7c3f1850e", size = 14420354, upload-time = "2025-09-09T15:58:52.704Z" }, - { url = "https://files.pythonhosted.org/packages/ed/0c/8e86e0ff7072e14a71b4c6af63175e40d1e7e933ce9b9e9f765a95b4e0c3/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1ec5615b05369925bd1125f27df33f3b6c8bc10d788d5999ecd8769a1fa04db", size = 16760413, upload-time = "2025-09-09T15:58:55.027Z" }, - { url = "https://files.pythonhosted.org/packages/af/11/0cc63f9f321ccf63886ac203336777140011fb669e739da36d8db3c53b98/numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc", size = 12971844, upload-time = "2025-09-09T15:58:57.359Z" }, +version = "2.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/f4/098d2270d52b41f1bd7db9fc288aaa0400cb48c2a3e2af6fa365d9720947/numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a", size = 20582187, upload-time = "2025-10-15T16:18:11.77Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e7/0e07379944aa8afb49a556a2b54587b828eb41dc9adc56fb7615b678ca53/numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb", size = 21259519, upload-time = "2025-10-15T16:15:19.012Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cb/5a69293561e8819b09e34ed9e873b9a82b5f2ade23dce4c51dc507f6cfe1/numpy-2.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd09cc5d65bda1e79432859c40978010622112e9194e581e3415a3eccc7f43f", size = 14452796, upload-time = "2025-10-15T16:15:23.094Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/ff11611200acd602a1e5129e36cfd25bf01ad8e5cf927baf2e90236eb02e/numpy-2.3.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1b219560ae2c1de48ead517d085bc2d05b9433f8e49d0955c82e8cd37bd7bf36", size = 5381639, upload-time = "2025-10-15T16:15:25.572Z" }, + { url = "https://files.pythonhosted.org/packages/ea/77/e95c757a6fe7a48d28a009267408e8aa382630cc1ad1db7451b3bc21dbb4/numpy-2.3.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:bafa7d87d4c99752d07815ed7a2c0964f8ab311eb8168f41b910bd01d15b6032", size = 6914296, upload-time = "2025-10-15T16:15:27.079Z" }, + { url = "https://files.pythonhosted.org/packages/a3/d2/137c7b6841c942124eae921279e5c41b1c34bab0e6fc60c7348e69afd165/numpy-2.3.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36dc13af226aeab72b7abad501d370d606326a0029b9f435eacb3b8c94b8a8b7", size = 14591904, upload-time = "2025-10-15T16:15:29.044Z" }, + { url = "https://files.pythonhosted.org/packages/bb/32/67e3b0f07b0aba57a078c4ab777a9e8e6bc62f24fb53a2337f75f9691699/numpy-2.3.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7b2f9a18b5ff9824a6af80de4f37f4ec3c2aab05ef08f51c77a093f5b89adda", size = 16939602, upload-time = "2025-10-15T16:15:31.106Z" }, + { url = "https://files.pythonhosted.org/packages/95/22/9639c30e32c93c4cee3ccdb4b09c2d0fbff4dcd06d36b357da06146530fb/numpy-2.3.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9984bd645a8db6ca15d850ff996856d8762c51a2239225288f08f9050ca240a0", size = 16372661, upload-time = "2025-10-15T16:15:33.546Z" }, + { url = "https://files.pythonhosted.org/packages/12/e9/a685079529be2b0156ae0c11b13d6be647743095bb51d46589e95be88086/numpy-2.3.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:64c5825affc76942973a70acf438a8ab618dbd692b84cd5ec40a0a0509edc09a", size = 18884682, upload-time = "2025-10-15T16:15:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/cf/85/f6f00d019b0cc741e64b4e00ce865a57b6bed945d1bbeb1ccadbc647959b/numpy-2.3.4-cp311-cp311-win32.whl", hash = "sha256:ed759bf7a70342f7817d88376eb7142fab9fef8320d6019ef87fae05a99874e1", size = 6570076, upload-time = "2025-10-15T16:15:38.225Z" }, + { url = "https://files.pythonhosted.org/packages/7d/10/f8850982021cb90e2ec31990291f9e830ce7d94eef432b15066e7cbe0bec/numpy-2.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:faba246fb30ea2a526c2e9645f61612341de1a83fb1e0c5edf4ddda5a9c10996", size = 13089358, upload-time = "2025-10-15T16:15:40.404Z" }, + { url = "https://files.pythonhosted.org/packages/d1/ad/afdd8351385edf0b3445f9e24210a9c3971ef4de8fd85155462fc4321d79/numpy-2.3.4-cp311-cp311-win_arm64.whl", hash = "sha256:4c01835e718bcebe80394fd0ac66c07cbb90147ebbdad3dcecd3f25de2ae7e2c", size = 10462292, upload-time = "2025-10-15T16:15:42.896Z" }, + { url = "https://files.pythonhosted.org/packages/96/7a/02420400b736f84317e759291b8edaeee9dc921f72b045475a9cbdb26b17/numpy-2.3.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ef1b5a3e808bc40827b5fa2c8196151a4c5abe110e1726949d7abddfe5c7ae11", size = 20957727, upload-time = "2025-10-15T16:15:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/18/90/a014805d627aa5750f6f0e878172afb6454552da929144b3c07fcae1bb13/numpy-2.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2f91f496a87235c6aaf6d3f3d89b17dba64996abadccb289f48456cff931ca9", size = 14187262, upload-time = "2025-10-15T16:15:47.761Z" }, + { url = "https://files.pythonhosted.org/packages/c7/e4/0a94b09abe89e500dc748e7515f21a13e30c5c3fe3396e6d4ac108c25fca/numpy-2.3.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f77e5b3d3da652b474cc80a14084927a5e86a5eccf54ca8ca5cbd697bf7f2667", size = 5115992, upload-time = "2025-10-15T16:15:50.144Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/db77c75b055c6157cbd4f9c92c4458daef0dd9cbe6d8d2fe7f803cb64c37/numpy-2.3.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ab1c5f5ee40d6e01cbe96de5863e39b215a4d24e7d007cad56c7184fdf4aeef", size = 6648672, upload-time = "2025-10-15T16:15:52.442Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e6/e31b0d713719610e406c0ea3ae0d90760465b086da8783e2fd835ad59027/numpy-2.3.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77b84453f3adcb994ddbd0d1c5d11db2d6bda1a2b7fd5ac5bd4649d6f5dc682e", size = 14284156, upload-time = "2025-10-15T16:15:54.351Z" }, + { url = "https://files.pythonhosted.org/packages/f9/58/30a85127bfee6f108282107caf8e06a1f0cc997cb6b52cdee699276fcce4/numpy-2.3.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4121c5beb58a7f9e6dfdee612cb24f4df5cd4db6e8261d7f4d7450a997a65d6a", size = 16641271, upload-time = "2025-10-15T16:15:56.67Z" }, + { url = "https://files.pythonhosted.org/packages/06/f2/2e06a0f2adf23e3ae29283ad96959267938d0efd20a2e25353b70065bfec/numpy-2.3.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65611ecbb00ac9846efe04db15cbe6186f562f6bb7e5e05f077e53a599225d16", size = 16059531, upload-time = "2025-10-15T16:15:59.412Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e7/b106253c7c0d5dc352b9c8fab91afd76a93950998167fa3e5afe4ef3a18f/numpy-2.3.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dabc42f9c6577bcc13001b8810d300fe814b4cfbe8a92c873f269484594f9786", size = 18578983, upload-time = "2025-10-15T16:16:01.804Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/04ecc41e71462276ee867ccbef26a4448638eadecf1bc56772c9ed6d0255/numpy-2.3.4-cp312-cp312-win32.whl", hash = "sha256:a49d797192a8d950ca59ee2d0337a4d804f713bb5c3c50e8db26d49666e351dc", size = 6291380, upload-time = "2025-10-15T16:16:03.938Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a8/566578b10d8d0e9955b1b6cd5db4e9d4592dd0026a941ff7994cedda030a/numpy-2.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:985f1e46358f06c2a09921e8921e2c98168ed4ae12ccd6e5e87a4f1857923f32", size = 12787999, upload-time = "2025-10-15T16:16:05.801Z" }, + { url = "https://files.pythonhosted.org/packages/58/22/9c903a957d0a8071b607f5b1bff0761d6e608b9a965945411f867d515db1/numpy-2.3.4-cp312-cp312-win_arm64.whl", hash = "sha256:4635239814149e06e2cb9db3dd584b2fa64316c96f10656983b8026a82e6e4db", size = 10197412, upload-time = "2025-10-15T16:16:07.854Z" }, + { url = "https://files.pythonhosted.org/packages/57/7e/b72610cc91edf138bc588df5150957a4937221ca6058b825b4725c27be62/numpy-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c090d4860032b857d94144d1a9976b8e36709e40386db289aaf6672de2a81966", size = 20950335, upload-time = "2025-10-15T16:16:10.304Z" }, + { url = "https://files.pythonhosted.org/packages/3e/46/bdd3370dcea2f95ef14af79dbf81e6927102ddf1cc54adc0024d61252fd9/numpy-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a13fc473b6db0be619e45f11f9e81260f7302f8d180c49a22b6e6120022596b3", size = 14179878, upload-time = "2025-10-15T16:16:12.595Z" }, + { url = "https://files.pythonhosted.org/packages/ac/01/5a67cb785bda60f45415d09c2bc245433f1c68dd82eef9c9002c508b5a65/numpy-2.3.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:3634093d0b428e6c32c3a69b78e554f0cd20ee420dcad5a9f3b2a63762ce4197", size = 5108673, upload-time = "2025-10-15T16:16:14.877Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cd/8428e23a9fcebd33988f4cb61208fda832800ca03781f471f3727a820704/numpy-2.3.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:043885b4f7e6e232d7df4f51ffdef8c36320ee9d5f227b380ea636722c7ed12e", size = 6641438, upload-time = "2025-10-15T16:16:16.805Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d1/913fe563820f3c6b079f992458f7331278dcd7ba8427e8e745af37ddb44f/numpy-2.3.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ee6a571d1e4f0ea6d5f22d6e5fbd6ed1dc2b18542848e1e7301bd190500c9d7", size = 14281290, upload-time = "2025-10-15T16:16:18.764Z" }, + { url = "https://files.pythonhosted.org/packages/9e/7e/7d306ff7cb143e6d975cfa7eb98a93e73495c4deabb7d1b5ecf09ea0fd69/numpy-2.3.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc8a63918b04b8571789688b2780ab2b4a33ab44bfe8ccea36d3eba51228c953", size = 16636543, upload-time = "2025-10-15T16:16:21.072Z" }, + { url = "https://files.pythonhosted.org/packages/47/6a/8cfc486237e56ccfb0db234945552a557ca266f022d281a2f577b98e955c/numpy-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40cc556d5abbc54aabe2b1ae287042d7bdb80c08edede19f0c0afb36ae586f37", size = 16056117, upload-time = "2025-10-15T16:16:23.369Z" }, + { url = "https://files.pythonhosted.org/packages/b1/0e/42cb5e69ea901e06ce24bfcc4b5664a56f950a70efdcf221f30d9615f3f3/numpy-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ecb63014bb7f4ce653f8be7f1df8cbc6093a5a2811211770f6606cc92b5a78fd", size = 18577788, upload-time = "2025-10-15T16:16:27.496Z" }, + { url = "https://files.pythonhosted.org/packages/86/92/41c3d5157d3177559ef0a35da50f0cda7fa071f4ba2306dd36818591a5bc/numpy-2.3.4-cp313-cp313-win32.whl", hash = "sha256:e8370eb6925bb8c1c4264fec52b0384b44f675f191df91cbe0140ec9f0955646", size = 6282620, upload-time = "2025-10-15T16:16:29.811Z" }, + { url = "https://files.pythonhosted.org/packages/09/97/fd421e8bc50766665ad35536c2bb4ef916533ba1fdd053a62d96cc7c8b95/numpy-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:56209416e81a7893036eea03abcb91c130643eb14233b2515c90dcac963fe99d", size = 12784672, upload-time = "2025-10-15T16:16:31.589Z" }, + { url = "https://files.pythonhosted.org/packages/ad/df/5474fb2f74970ca8eb978093969b125a84cc3d30e47f82191f981f13a8a0/numpy-2.3.4-cp313-cp313-win_arm64.whl", hash = "sha256:a700a4031bc0fd6936e78a752eefb79092cecad2599ea9c8039c548bc097f9bc", size = 10196702, upload-time = "2025-10-15T16:16:33.902Z" }, + { url = "https://files.pythonhosted.org/packages/11/83/66ac031464ec1767ea3ed48ce40f615eb441072945e98693bec0bcd056cc/numpy-2.3.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:86966db35c4040fdca64f0816a1c1dd8dbd027d90fca5a57e00e1ca4cd41b879", size = 21049003, upload-time = "2025-10-15T16:16:36.101Z" }, + { url = "https://files.pythonhosted.org/packages/5f/99/5b14e0e686e61371659a1d5bebd04596b1d72227ce36eed121bb0aeab798/numpy-2.3.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:838f045478638b26c375ee96ea89464d38428c69170360b23a1a50fa4baa3562", size = 14302980, upload-time = "2025-10-15T16:16:39.124Z" }, + { url = "https://files.pythonhosted.org/packages/2c/44/e9486649cd087d9fc6920e3fc3ac2aba10838d10804b1e179fb7cbc4e634/numpy-2.3.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d7315ed1dab0286adca467377c8381cd748f3dc92235f22a7dfc42745644a96a", size = 5231472, upload-time = "2025-10-15T16:16:41.168Z" }, + { url = "https://files.pythonhosted.org/packages/3e/51/902b24fa8887e5fe2063fd61b1895a476d0bbf46811ab0c7fdf4bd127345/numpy-2.3.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:84f01a4d18b2cc4ade1814a08e5f3c907b079c847051d720fad15ce37aa930b6", size = 6739342, upload-time = "2025-10-15T16:16:43.777Z" }, + { url = "https://files.pythonhosted.org/packages/34/f1/4de9586d05b1962acdcdb1dc4af6646361a643f8c864cef7c852bf509740/numpy-2.3.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:817e719a868f0dacde4abdfc5c1910b301877970195db9ab6a5e2c4bd5b121f7", size = 14354338, upload-time = "2025-10-15T16:16:46.081Z" }, + { url = "https://files.pythonhosted.org/packages/1f/06/1c16103b425de7969d5a76bdf5ada0804b476fed05d5f9e17b777f1cbefd/numpy-2.3.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85e071da78d92a214212cacea81c6da557cab307f2c34b5f85b628e94803f9c0", size = 16702392, upload-time = "2025-10-15T16:16:48.455Z" }, + { url = "https://files.pythonhosted.org/packages/34/b2/65f4dc1b89b5322093572b6e55161bb42e3e0487067af73627f795cc9d47/numpy-2.3.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2ec646892819370cf3558f518797f16597b4e4669894a2ba712caccc9da53f1f", size = 16134998, upload-time = "2025-10-15T16:16:51.114Z" }, + { url = "https://files.pythonhosted.org/packages/d4/11/94ec578896cdb973aaf56425d6c7f2aff4186a5c00fac15ff2ec46998b46/numpy-2.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:035796aaaddfe2f9664b9a9372f089cfc88bd795a67bd1bfe15e6e770934cf64", size = 18651574, upload-time = "2025-10-15T16:16:53.429Z" }, + { url = "https://files.pythonhosted.org/packages/62/b7/7efa763ab33dbccf56dade36938a77345ce8e8192d6b39e470ca25ff3cd0/numpy-2.3.4-cp313-cp313t-win32.whl", hash = "sha256:fea80f4f4cf83b54c3a051f2f727870ee51e22f0248d3114b8e755d160b38cfb", size = 6413135, upload-time = "2025-10-15T16:16:55.992Z" }, + { url = "https://files.pythonhosted.org/packages/43/70/aba4c38e8400abcc2f345e13d972fb36c26409b3e644366db7649015f291/numpy-2.3.4-cp313-cp313t-win_amd64.whl", hash = "sha256:15eea9f306b98e0be91eb344a94c0e630689ef302e10c2ce5f7e11905c704f9c", size = 12928582, upload-time = "2025-10-15T16:16:57.943Z" }, + { url = "https://files.pythonhosted.org/packages/67/63/871fad5f0073fc00fbbdd7232962ea1ac40eeaae2bba66c76214f7954236/numpy-2.3.4-cp313-cp313t-win_arm64.whl", hash = "sha256:b6c231c9c2fadbae4011ca5e7e83e12dc4a5072f1a1d85a0a7b3ed754d145a40", size = 10266691, upload-time = "2025-10-15T16:17:00.048Z" }, + { url = "https://files.pythonhosted.org/packages/72/71/ae6170143c115732470ae3a2d01512870dd16e0953f8a6dc89525696069b/numpy-2.3.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:81c3e6d8c97295a7360d367f9f8553973651b76907988bb6066376bc2252f24e", size = 20955580, upload-time = "2025-10-15T16:17:02.509Z" }, + { url = "https://files.pythonhosted.org/packages/af/39/4be9222ffd6ca8a30eda033d5f753276a9c3426c397bb137d8e19dedd200/numpy-2.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7c26b0b2bf58009ed1f38a641f3db4be8d960a417ca96d14e5b06df1506d41ff", size = 14188056, upload-time = "2025-10-15T16:17:04.873Z" }, + { url = "https://files.pythonhosted.org/packages/6c/3d/d85f6700d0a4aa4f9491030e1021c2b2b7421b2b38d01acd16734a2bfdc7/numpy-2.3.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:62b2198c438058a20b6704351b35a1d7db881812d8512d67a69c9de1f18ca05f", size = 5116555, upload-time = "2025-10-15T16:17:07.499Z" }, + { url = "https://files.pythonhosted.org/packages/bf/04/82c1467d86f47eee8a19a464c92f90a9bb68ccf14a54c5224d7031241ffb/numpy-2.3.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:9d729d60f8d53a7361707f4b68a9663c968882dd4f09e0d58c044c8bf5faee7b", size = 6643581, upload-time = "2025-10-15T16:17:09.774Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d3/c79841741b837e293f48bd7db89d0ac7a4f2503b382b78a790ef1dc778a5/numpy-2.3.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd0c630cf256b0a7fd9d0a11c9413b42fef5101219ce6ed5a09624f5a65392c7", size = 14299186, upload-time = "2025-10-15T16:17:11.937Z" }, + { url = "https://files.pythonhosted.org/packages/e8/7e/4a14a769741fbf237eec5a12a2cbc7a4c4e061852b6533bcb9e9a796c908/numpy-2.3.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5e081bc082825f8b139f9e9fe42942cb4054524598aaeb177ff476cc76d09d2", size = 16638601, upload-time = "2025-10-15T16:17:14.391Z" }, + { url = "https://files.pythonhosted.org/packages/93/87/1c1de269f002ff0a41173fe01dcc925f4ecff59264cd8f96cf3b60d12c9b/numpy-2.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15fb27364ed84114438fff8aaf998c9e19adbeba08c0b75409f8c452a8692c52", size = 16074219, upload-time = "2025-10-15T16:17:17.058Z" }, + { url = "https://files.pythonhosted.org/packages/cd/28/18f72ee77408e40a76d691001ae599e712ca2a47ddd2c4f695b16c65f077/numpy-2.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:85d9fb2d8cd998c84d13a79a09cc0c1091648e848e4e6249b0ccd7f6b487fa26", size = 18576702, upload-time = "2025-10-15T16:17:19.379Z" }, + { url = "https://files.pythonhosted.org/packages/c3/76/95650169b465ececa8cf4b2e8f6df255d4bf662775e797ade2025cc51ae6/numpy-2.3.4-cp314-cp314-win32.whl", hash = "sha256:e73d63fd04e3a9d6bc187f5455d81abfad05660b212c8804bf3b407e984cd2bc", size = 6337136, upload-time = "2025-10-15T16:17:22.886Z" }, + { url = "https://files.pythonhosted.org/packages/dc/89/a231a5c43ede5d6f77ba4a91e915a87dea4aeea76560ba4d2bf185c683f0/numpy-2.3.4-cp314-cp314-win_amd64.whl", hash = "sha256:3da3491cee49cf16157e70f607c03a217ea6647b1cea4819c4f48e53d49139b9", size = 12920542, upload-time = "2025-10-15T16:17:24.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/0c/ae9434a888f717c5ed2ff2393b3f344f0ff6f1c793519fa0c540461dc530/numpy-2.3.4-cp314-cp314-win_arm64.whl", hash = "sha256:6d9cd732068e8288dbe2717177320723ccec4fb064123f0caf9bbd90ab5be868", size = 10480213, upload-time = "2025-10-15T16:17:26.935Z" }, + { url = "https://files.pythonhosted.org/packages/83/4b/c4a5f0841f92536f6b9592694a5b5f68c9ab37b775ff342649eadf9055d3/numpy-2.3.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:22758999b256b595cf0b1d102b133bb61866ba5ceecf15f759623b64c020c9ec", size = 21052280, upload-time = "2025-10-15T16:17:29.638Z" }, + { url = "https://files.pythonhosted.org/packages/3e/80/90308845fc93b984d2cc96d83e2324ce8ad1fd6efea81b324cba4b673854/numpy-2.3.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9cb177bc55b010b19798dc5497d540dea67fd13a8d9e882b2dae71de0cf09eb3", size = 14302930, upload-time = "2025-10-15T16:17:32.384Z" }, + { url = "https://files.pythonhosted.org/packages/3d/4e/07439f22f2a3b247cec4d63a713faae55e1141a36e77fb212881f7cda3fb/numpy-2.3.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0f2bcc76f1e05e5ab58893407c63d90b2029908fa41f9f1cc51eecce936c3365", size = 5231504, upload-time = "2025-10-15T16:17:34.515Z" }, + { url = "https://files.pythonhosted.org/packages/ab/de/1e11f2547e2fe3d00482b19721855348b94ada8359aef5d40dd57bfae9df/numpy-2.3.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dc20bde86802df2ed8397a08d793da0ad7a5fd4ea3ac85d757bf5dd4ad7c252", size = 6739405, upload-time = "2025-10-15T16:17:36.128Z" }, + { url = "https://files.pythonhosted.org/packages/3b/40/8cd57393a26cebe2e923005db5134a946c62fa56a1087dc7c478f3e30837/numpy-2.3.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e199c087e2aa71c8f9ce1cb7a8e10677dc12457e7cc1be4798632da37c3e86e", size = 14354866, upload-time = "2025-10-15T16:17:38.884Z" }, + { url = "https://files.pythonhosted.org/packages/93/39/5b3510f023f96874ee6fea2e40dfa99313a00bf3ab779f3c92978f34aace/numpy-2.3.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85597b2d25ddf655495e2363fe044b0ae999b75bc4d630dc0d886484b03a5eb0", size = 16703296, upload-time = "2025-10-15T16:17:41.564Z" }, + { url = "https://files.pythonhosted.org/packages/41/0d/19bb163617c8045209c1996c4e427bccbc4bbff1e2c711f39203c8ddbb4a/numpy-2.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04a69abe45b49c5955923cf2c407843d1c85013b424ae8a560bba16c92fe44a0", size = 16136046, upload-time = "2025-10-15T16:17:43.901Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c1/6dba12fdf68b02a21ac411c9df19afa66bed2540f467150ca64d246b463d/numpy-2.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e1708fac43ef8b419c975926ce1eaf793b0c13b7356cfab6ab0dc34c0a02ac0f", size = 18652691, upload-time = "2025-10-15T16:17:46.247Z" }, + { url = "https://files.pythonhosted.org/packages/f8/73/f85056701dbbbb910c51d846c58d29fd46b30eecd2b6ba760fc8b8a1641b/numpy-2.3.4-cp314-cp314t-win32.whl", hash = "sha256:863e3b5f4d9915aaf1b8ec79ae560ad21f0b8d5e3adc31e73126491bb86dee1d", size = 6485782, upload-time = "2025-10-15T16:17:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/17/90/28fa6f9865181cb817c2471ee65678afa8a7e2a1fb16141473d5fa6bacc3/numpy-2.3.4-cp314-cp314t-win_amd64.whl", hash = "sha256:962064de37b9aef801d33bc579690f8bfe6c5e70e29b61783f60bcba838a14d6", size = 13113301, upload-time = "2025-10-15T16:17:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/54/23/08c002201a8e7e1f9afba93b97deceb813252d9cfd0d3351caed123dcf97/numpy-2.3.4-cp314-cp314t-win_arm64.whl", hash = "sha256:8b5a9a39c45d852b62693d9b3f3e0fe052541f804296ff401a72a1b60edafb29", size = 10547532, upload-time = "2025-10-15T16:17:53.48Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b6/64898f51a86ec88ca1257a59c1d7fd077b60082a119affefcdf1dd0df8ca/numpy-2.3.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6e274603039f924c0fe5cb73438fa9246699c78a6df1bd3decef9ae592ae1c05", size = 21131552, upload-time = "2025-10-15T16:17:55.845Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4c/f135dc6ebe2b6a3c77f4e4838fa63d350f85c99462012306ada1bd4bc460/numpy-2.3.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d149aee5c72176d9ddbc6803aef9c0f6d2ceeea7626574fc68518da5476fa346", size = 14377796, upload-time = "2025-10-15T16:17:58.308Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a4/f33f9c23fcc13dd8412fc8614559b5b797e0aba9d8e01dfa8bae10c84004/numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:6d34ed9db9e6395bb6cd33286035f73a59b058169733a9db9f85e650b88df37e", size = 5306904, upload-time = "2025-10-15T16:18:00.596Z" }, + { url = "https://files.pythonhosted.org/packages/28/af/c44097f25f834360f9fb960fa082863e0bad14a42f36527b2a121abdec56/numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:fdebe771ca06bb8d6abce84e51dca9f7921fe6ad34a0c914541b063e9a68928b", size = 6819682, upload-time = "2025-10-15T16:18:02.32Z" }, + { url = "https://files.pythonhosted.org/packages/c5/8c/cd283b54c3c2b77e188f63e23039844f56b23bba1712318288c13fe86baf/numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e92defe6c08211eb77902253b14fe5b480ebc5112bc741fd5e9cd0608f847", size = 14422300, upload-time = "2025-10-15T16:18:04.271Z" }, + { url = "https://files.pythonhosted.org/packages/b0/f0/8404db5098d92446b3e3695cf41c6f0ecb703d701cb0b7566ee2177f2eee/numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13b9062e4f5c7ee5c7e5be96f29ba71bc5a37fed3d1d77c37390ae00724d296d", size = 16760806, upload-time = "2025-10-15T16:18:06.668Z" }, + { url = "https://files.pythonhosted.org/packages/95/8e/2844c3959ce9a63acc7c8e50881133d86666f0420bcde695e115ced0920f/numpy-2.3.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81b3a59793523e552c4a96109dde028aa4448ae06ccac5a76ff6532a85558a7f", size = 12973130, upload-time = "2025-10-15T16:18:09.397Z" }, ] [[package]] @@ -443,28 +463,28 @@ wheels = [ [[package]] name = "polars" -version = "1.34.0" +version = "1.35.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "polars-runtime-32" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/3e/35fcf5bf51404371bb172b289a5065778dc97adca4416e199c294125eb05/polars-1.34.0.tar.gz", hash = "sha256:5de5f871027db4b11bcf39215a2d6b13b4a80baf8a55c5862d4ebedfd5cd4013", size = 684309, upload-time = "2025-10-02T18:31:04.396Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9b/5b/3caad788d93304026cbf0ab4c37f8402058b64a2f153b9c62f8b30f5d2ee/polars-1.35.1.tar.gz", hash = "sha256:06548e6d554580151d6ca7452d74bceeec4640b5b9261836889b8e68cfd7a62e", size = 694881, upload-time = "2025-10-30T12:12:52.294Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/80/1791ac226bb989bef30fe8fde752b2021b6ec5dfd6e880262596aedf4c05/polars-1.34.0-py3-none-any.whl", hash = "sha256:40d2f357b4d9e447ad28bd2c9923e4318791a7c18eb68f31f1fbf11180f41391", size = 772686, upload-time = "2025-10-02T18:29:59.492Z" }, + { url = "https://files.pythonhosted.org/packages/9f/4c/21a227b722534404241c2a76beceb7463469d50c775a227fc5c209eb8adc/polars-1.35.1-py3-none-any.whl", hash = "sha256:c29a933f28aa330d96a633adbd79aa5e6a6247a802a720eead9933f4613bdbf4", size = 783598, upload-time = "2025-10-30T12:11:54.668Z" }, ] [[package]] name = "polars-runtime-32" -version = "1.34.0" +version = "1.35.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/02/10/1189afb14cc47ed215ccf7fbd00ed21c48edfd89e51c16f8628a33ae4b1b/polars_runtime_32-1.34.0.tar.gz", hash = "sha256:ebe6f865128a0d833f53a3f6828360761ad86d1698bceb22bef9fd999500dc1c", size = 2634491, upload-time = "2025-10-02T18:31:05.502Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/3e/19c252e8eb4096300c1a36ec3e50a27e5fa9a1ccaf32d3927793c16abaee/polars_runtime_32-1.35.1.tar.gz", hash = "sha256:f6b4ec9cd58b31c87af1b8c110c9c986d82345f1d50d7f7595b5d447a19dc365", size = 2696218, upload-time = "2025-10-30T12:12:53.479Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/97/35/bc4f1a9dcef61845e8e4e5d2318470b002b93a3564026f0643f562761ecb/polars_runtime_32-1.34.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:2878f9951e91121afe60c25433ef270b9a221e6ebf3de5f6642346b38cab3f03", size = 39655423, upload-time = "2025-10-02T18:30:02.846Z" }, - { url = "https://files.pythonhosted.org/packages/a6/bb/d655a103e75b7c81c47a3c2d276be0200c0c15cfb6fd47f17932ddcf7519/polars_runtime_32-1.34.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:fbc329c7d34a924228cc5dcdbbd4696d94411a3a5b15ad8bb868634c204e1951", size = 35986049, upload-time = "2025-10-02T18:30:05.848Z" }, - { url = "https://files.pythonhosted.org/packages/9e/ce/11ca850b7862cb43605e5d86cdf655614376e0a059871cf8305af5406554/polars_runtime_32-1.34.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93fa51d88a2d12ea996a5747aad5647d22a86cce73c80f208e61f487b10bc448", size = 40261269, upload-time = "2025-10-02T18:30:08.48Z" }, - { url = "https://files.pythonhosted.org/packages/d8/25/77d12018c35489e19f7650b40679714a834effafc25d61e8dcee7c4fafce/polars_runtime_32-1.34.0-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:79e4d696392c6d8d51f4347f0b167c52eef303c9d87093c0c68e8651198735b7", size = 37049077, upload-time = "2025-10-02T18:30:11.162Z" }, - { url = "https://files.pythonhosted.org/packages/e2/75/c30049d45ea1365151f86f650ed5354124ff3209f0abe588664c8eb13a31/polars_runtime_32-1.34.0-cp39-abi3-win_amd64.whl", hash = "sha256:2501d6b29d9001ea5ea2fd9b598787e10ddf45d8c4a87c2bead75159e8a15711", size = 40105782, upload-time = "2025-10-02T18:30:14.597Z" }, - { url = "https://files.pythonhosted.org/packages/a3/31/84efa27aa3478c8670bac1a720c8b1aee5c58c9c657c980e5e5c47fde883/polars_runtime_32-1.34.0-cp39-abi3-win_arm64.whl", hash = "sha256:f9ed1765378dfe0bcd1ac5ec570dd9eab27ea728bbc980cc9a76eebc55586559", size = 35873216, upload-time = "2025-10-02T18:30:17.439Z" }, + { url = "https://files.pythonhosted.org/packages/08/2c/da339459805a26105e9d9c2f07e43ca5b8baeee55acd5457e6881487a79a/polars_runtime_32-1.35.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6f051a42f6ae2f26e3bc2cf1f170f2120602976e2a3ffb6cfba742eecc7cc620", size = 40525100, upload-time = "2025-10-30T12:11:58.098Z" }, + { url = "https://files.pythonhosted.org/packages/27/70/a0733568b3533481924d2ce68b279ab3d7334e5fa6ed259f671f650b7c5e/polars_runtime_32-1.35.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c2232f9cf05ba59efc72d940b86c033d41fd2d70bf2742e8115ed7112a766aa9", size = 36701908, upload-time = "2025-10-30T12:12:02.166Z" }, + { url = "https://files.pythonhosted.org/packages/46/54/6c09137bef9da72fd891ba58c2962cc7c6c5cad4649c0e668d6b344a9d7b/polars_runtime_32-1.35.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42f9837348557fd674477ea40a6ac8a7e839674f6dd0a199df24be91b026024c", size = 41317692, upload-time = "2025-10-30T12:12:04.928Z" }, + { url = "https://files.pythonhosted.org/packages/22/55/81c5b266a947c339edd7fbaa9e1d9614012d02418453f48b76cc177d3dd9/polars_runtime_32-1.35.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c873aeb36fed182d5ebc35ca17c7eb193fe83ae2ea551ee8523ec34776731390", size = 37853058, upload-time = "2025-10-30T12:12:08.342Z" }, + { url = "https://files.pythonhosted.org/packages/6c/58/be8b034d559eac515f52408fd6537be9bea095bc0388946a4e38910d3d50/polars_runtime_32-1.35.1-cp39-abi3-win_amd64.whl", hash = "sha256:35cde9453ca7032933f0e58e9ed4388f5a1e415dd0db2dd1e442c81d815e630c", size = 41289554, upload-time = "2025-10-30T12:12:11.104Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7f/e0111b9e2a1169ea82cde3ded9c92683e93c26dfccd72aee727996a1ac5b/polars_runtime_32-1.35.1-cp39-abi3-win_arm64.whl", hash = "sha256:fd77757a6c9eb9865c4bfb7b07e22225207c6b7da382bd0b9bd47732f637105d", size = 36958878, upload-time = "2025-10-30T12:12:15.206Z" }, ] [[package]] @@ -485,38 +505,52 @@ wheels = [ [[package]] name = "pyarrow" -version = "21.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/dc/80564a3071a57c20b7c32575e4a0120e8a330ef487c319b122942d665960/pyarrow-21.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c077f48aab61738c237802836fc3844f85409a46015635198761b0d6a688f87b", size = 31243234, upload-time = "2025-07-18T00:55:03.812Z" }, - { url = "https://files.pythonhosted.org/packages/ea/cc/3b51cb2db26fe535d14f74cab4c79b191ed9a8cd4cbba45e2379b5ca2746/pyarrow-21.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:689f448066781856237eca8d1975b98cace19b8dd2ab6145bf49475478bcaa10", size = 32714370, upload-time = "2025-07-18T00:55:07.495Z" }, - { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424, upload-time = "2025-07-18T00:55:11.461Z" }, - { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810, upload-time = "2025-07-18T00:55:16.301Z" }, - { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538, upload-time = "2025-07-18T00:55:23.82Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056, upload-time = "2025-07-18T00:55:28.231Z" }, - { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568, upload-time = "2025-07-18T00:55:32.122Z" }, - { url = "https://files.pythonhosted.org/packages/ca/d4/d4f817b21aacc30195cf6a46ba041dd1be827efa4a623cc8bf39a1c2a0c0/pyarrow-21.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd", size = 31160305, upload-time = "2025-07-18T00:55:35.373Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9c/dcd38ce6e4b4d9a19e1d36914cb8e2b1da4e6003dd075474c4cfcdfe0601/pyarrow-21.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876", size = 32684264, upload-time = "2025-07-18T00:55:39.303Z" }, - { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099, upload-time = "2025-07-18T00:55:42.889Z" }, - { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529, upload-time = "2025-07-18T00:55:47.069Z" }, - { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883, upload-time = "2025-07-18T00:55:53.069Z" }, - { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802, upload-time = "2025-07-18T00:55:57.714Z" }, - { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175, upload-time = "2025-07-18T00:56:01.364Z" }, - { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306, upload-time = "2025-07-18T00:56:04.42Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622, upload-time = "2025-07-18T00:56:07.505Z" }, - { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload-time = "2025-07-18T00:56:10.994Z" }, - { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload-time = "2025-07-18T00:56:15.569Z" }, - { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload-time = "2025-07-18T00:56:19.531Z" }, - { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload-time = "2025-07-18T00:56:23.347Z" }, - { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload-time = "2025-07-18T00:56:26.758Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064, upload-time = "2025-07-18T00:56:30.214Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837, upload-time = "2025-07-18T00:56:33.935Z" }, - { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload-time = "2025-07-18T00:56:37.528Z" }, - { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload-time = "2025-07-18T00:56:41.483Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" }, - { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" }, - { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" }, +version = "22.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/53/04a7fdc63e6056116c9ddc8b43bc28c12cdd181b85cbeadb79278475f3ae/pyarrow-22.0.0.tar.gz", hash = "sha256:3d600dc583260d845c7d8a6db540339dd883081925da2bd1c5cb808f720b3cd9", size = 1151151, upload-time = "2025-10-24T12:30:00.762Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/b7/18f611a8cdc43417f9394a3ccd3eace2f32183c08b9eddc3d17681819f37/pyarrow-22.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:3e294c5eadfb93d78b0763e859a0c16d4051fc1c5231ae8956d61cb0b5666f5a", size = 34272022, upload-time = "2025-10-24T10:04:28.973Z" }, + { url = "https://files.pythonhosted.org/packages/26/5c/f259e2526c67eb4b9e511741b19870a02363a47a35edbebc55c3178db22d/pyarrow-22.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:69763ab2445f632d90b504a815a2a033f74332997052b721002298ed6de40f2e", size = 35995834, upload-time = "2025-10-24T10:04:35.467Z" }, + { url = "https://files.pythonhosted.org/packages/50/8d/281f0f9b9376d4b7f146913b26fac0aa2829cd1ee7e997f53a27411bbb92/pyarrow-22.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b41f37cabfe2463232684de44bad753d6be08a7a072f6a83447eeaf0e4d2a215", size = 45030348, upload-time = "2025-10-24T10:04:43.366Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e5/53c0a1c428f0976bf22f513d79c73000926cb00b9c138d8e02daf2102e18/pyarrow-22.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:35ad0f0378c9359b3f297299c3309778bb03b8612f987399a0333a560b43862d", size = 47699480, upload-time = "2025-10-24T10:04:51.486Z" }, + { url = "https://files.pythonhosted.org/packages/95/e1/9dbe4c465c3365959d183e6345d0a8d1dc5b02ca3f8db4760b3bc834cf25/pyarrow-22.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8382ad21458075c2e66a82a29d650f963ce51c7708c7c0ff313a8c206c4fd5e8", size = 48011148, upload-time = "2025-10-24T10:04:59.585Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b4/7caf5d21930061444c3cf4fa7535c82faf5263e22ce43af7c2759ceb5b8b/pyarrow-22.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1a812a5b727bc09c3d7ea072c4eebf657c2f7066155506ba31ebf4792f88f016", size = 50276964, upload-time = "2025-10-24T10:05:08.175Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f3/cec89bd99fa3abf826f14d4e53d3d11340ce6f6af4d14bdcd54cd83b6576/pyarrow-22.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ec5d40dd494882704fb876c16fa7261a69791e784ae34e6b5992e977bd2e238c", size = 28106517, upload-time = "2025-10-24T10:05:14.314Z" }, + { url = "https://files.pythonhosted.org/packages/af/63/ba23862d69652f85b615ca14ad14f3bcfc5bf1b99ef3f0cd04ff93fdad5a/pyarrow-22.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bea79263d55c24a32b0d79c00a1c58bb2ee5f0757ed95656b01c0fb310c5af3d", size = 34211578, upload-time = "2025-10-24T10:05:21.583Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d0/f9ad86fe809efd2bcc8be32032fa72e8b0d112b01ae56a053006376c5930/pyarrow-22.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:12fe549c9b10ac98c91cf791d2945e878875d95508e1a5d14091a7aaa66d9cf8", size = 35989906, upload-time = "2025-10-24T10:05:29.485Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a8/f910afcb14630e64d673f15904ec27dd31f1e009b77033c365c84e8c1e1d/pyarrow-22.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:334f900ff08ce0423407af97e6c26ad5d4e3b0763645559ece6fbf3747d6a8f5", size = 45021677, upload-time = "2025-10-24T10:05:38.274Z" }, + { url = "https://files.pythonhosted.org/packages/13/95/aec81f781c75cd10554dc17a25849c720d54feafb6f7847690478dcf5ef8/pyarrow-22.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c6c791b09c57ed76a18b03f2631753a4960eefbbca80f846da8baefc6491fcfe", size = 47726315, upload-time = "2025-10-24T10:05:47.314Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d4/74ac9f7a54cfde12ee42734ea25d5a3c9a45db78f9def949307a92720d37/pyarrow-22.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c3200cb41cdbc65156e5f8c908d739b0dfed57e890329413da2748d1a2cd1a4e", size = 47990906, upload-time = "2025-10-24T10:05:58.254Z" }, + { url = "https://files.pythonhosted.org/packages/2e/71/fedf2499bf7a95062eafc989ace56572f3343432570e1c54e6599d5b88da/pyarrow-22.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ac93252226cf288753d8b46280f4edf3433bf9508b6977f8dd8526b521a1bbb9", size = 50306783, upload-time = "2025-10-24T10:06:08.08Z" }, + { url = "https://files.pythonhosted.org/packages/68/ed/b202abd5a5b78f519722f3d29063dda03c114711093c1995a33b8e2e0f4b/pyarrow-22.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:44729980b6c50a5f2bfcc2668d36c569ce17f8b17bccaf470c4313dcbbf13c9d", size = 27972883, upload-time = "2025-10-24T10:06:14.204Z" }, + { url = "https://files.pythonhosted.org/packages/a6/d6/d0fac16a2963002fc22c8fa75180a838737203d558f0ed3b564c4a54eef5/pyarrow-22.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e6e95176209257803a8b3d0394f21604e796dadb643d2f7ca21b66c9c0b30c9a", size = 34204629, upload-time = "2025-10-24T10:06:20.274Z" }, + { url = "https://files.pythonhosted.org/packages/c6/9c/1d6357347fbae062ad3f17082f9ebc29cc733321e892c0d2085f42a2212b/pyarrow-22.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:001ea83a58024818826a9e3f89bf9310a114f7e26dfe404a4c32686f97bd7901", size = 35985783, upload-time = "2025-10-24T10:06:27.301Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c0/782344c2ce58afbea010150df07e3a2f5fdad299cd631697ae7bd3bac6e3/pyarrow-22.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ce20fe000754f477c8a9125543f1936ea5b8867c5406757c224d745ed033e691", size = 45020999, upload-time = "2025-10-24T10:06:35.387Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8b/5362443737a5307a7b67c1017c42cd104213189b4970bf607e05faf9c525/pyarrow-22.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e0a15757fccb38c410947df156f9749ae4a3c89b2393741a50521f39a8cf202a", size = 47724601, upload-time = "2025-10-24T10:06:43.551Z" }, + { url = "https://files.pythonhosted.org/packages/69/4d/76e567a4fc2e190ee6072967cb4672b7d9249ac59ae65af2d7e3047afa3b/pyarrow-22.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cedb9dd9358e4ea1d9bce3665ce0797f6adf97ff142c8e25b46ba9cdd508e9b6", size = 48001050, upload-time = "2025-10-24T10:06:52.284Z" }, + { url = "https://files.pythonhosted.org/packages/01/5e/5653f0535d2a1aef8223cee9d92944cb6bccfee5cf1cd3f462d7cb022790/pyarrow-22.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:252be4a05f9d9185bb8c18e83764ebcfea7185076c07a7a662253af3a8c07941", size = 50307877, upload-time = "2025-10-24T10:07:02.405Z" }, + { url = "https://files.pythonhosted.org/packages/2d/f8/1d0bd75bf9328a3b826e24a16e5517cd7f9fbf8d34a3184a4566ef5a7f29/pyarrow-22.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:a4893d31e5ef780b6edcaf63122df0f8d321088bb0dee4c8c06eccb1ca28d145", size = 27977099, upload-time = "2025-10-24T10:08:07.259Z" }, + { url = "https://files.pythonhosted.org/packages/90/81/db56870c997805bf2b0f6eeeb2d68458bf4654652dccdcf1bf7a42d80903/pyarrow-22.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f7fe3dbe871294ba70d789be16b6e7e52b418311e166e0e3cba9522f0f437fb1", size = 34336685, upload-time = "2025-10-24T10:07:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/1c/98/0727947f199aba8a120f47dfc229eeb05df15bcd7a6f1b669e9f882afc58/pyarrow-22.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ba95112d15fd4f1105fb2402c4eab9068f0554435e9b7085924bcfaac2cc306f", size = 36032158, upload-time = "2025-10-24T10:07:18.626Z" }, + { url = "https://files.pythonhosted.org/packages/96/b4/9babdef9c01720a0785945c7cf550e4acd0ebcd7bdd2e6f0aa7981fa85e2/pyarrow-22.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c064e28361c05d72eed8e744c9605cbd6d2bb7481a511c74071fd9b24bc65d7d", size = 44892060, upload-time = "2025-10-24T10:07:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ca/2f8804edd6279f78a37062d813de3f16f29183874447ef6d1aadbb4efa0f/pyarrow-22.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6f9762274496c244d951c819348afbcf212714902742225f649cf02823a6a10f", size = 47504395, upload-time = "2025-10-24T10:07:34.09Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f0/77aa5198fd3943682b2e4faaf179a674f0edea0d55d326d83cb2277d9363/pyarrow-22.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a9d9ffdc2ab696f6b15b4d1f7cec6658e1d788124418cb30030afbae31c64746", size = 48066216, upload-time = "2025-10-24T10:07:43.528Z" }, + { url = "https://files.pythonhosted.org/packages/79/87/a1937b6e78b2aff18b706d738c9e46ade5bfcf11b294e39c87706a0089ac/pyarrow-22.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ec1a15968a9d80da01e1d30349b2b0d7cc91e96588ee324ce1b5228175043e95", size = 50288552, upload-time = "2025-10-24T10:07:53.519Z" }, + { url = "https://files.pythonhosted.org/packages/60/ae/b5a5811e11f25788ccfdaa8f26b6791c9807119dffcf80514505527c384c/pyarrow-22.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bba208d9c7decf9961998edf5c65e3ea4355d5818dd6cd0f6809bec1afb951cc", size = 28262504, upload-time = "2025-10-24T10:08:00.932Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b0/0fa4d28a8edb42b0a7144edd20befd04173ac79819547216f8a9f36f9e50/pyarrow-22.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:9bddc2cade6561f6820d4cd73f99a0243532ad506bc510a75a5a65a522b2d74d", size = 34224062, upload-time = "2025-10-24T10:08:14.101Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a8/7a719076b3c1be0acef56a07220c586f25cd24de0e3f3102b438d18ae5df/pyarrow-22.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e70ff90c64419709d38c8932ea9fe1cc98415c4f87ea8da81719e43f02534bc9", size = 35990057, upload-time = "2025-10-24T10:08:21.842Z" }, + { url = "https://files.pythonhosted.org/packages/89/3c/359ed54c93b47fb6fe30ed16cdf50e3f0e8b9ccfb11b86218c3619ae50a8/pyarrow-22.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:92843c305330aa94a36e706c16209cd4df274693e777ca47112617db7d0ef3d7", size = 45068002, upload-time = "2025-10-24T10:08:29.034Z" }, + { url = "https://files.pythonhosted.org/packages/55/fc/4945896cc8638536ee787a3bd6ce7cec8ec9acf452d78ec39ab328efa0a1/pyarrow-22.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6dda1ddac033d27421c20d7a7943eec60be44e0db4e079f33cc5af3b8280ccde", size = 47737765, upload-time = "2025-10-24T10:08:38.559Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5e/7cb7edeb2abfaa1f79b5d5eb89432356155c8426f75d3753cbcb9592c0fd/pyarrow-22.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:84378110dd9a6c06323b41b56e129c504d157d1a983ce8f5443761eb5256bafc", size = 48048139, upload-time = "2025-10-24T10:08:46.784Z" }, + { url = "https://files.pythonhosted.org/packages/88/c6/546baa7c48185f5e9d6e59277c4b19f30f48c94d9dd938c2a80d4d6b067c/pyarrow-22.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:854794239111d2b88b40b6ef92aa478024d1e5074f364033e73e21e3f76b25e0", size = 50314244, upload-time = "2025-10-24T10:08:55.771Z" }, + { url = "https://files.pythonhosted.org/packages/3c/79/755ff2d145aafec8d347bf18f95e4e81c00127f06d080135dfc86aea417c/pyarrow-22.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:b883fe6fd85adad7932b3271c38ac289c65b7337c2c132e9569f9d3940620730", size = 28757501, upload-time = "2025-10-24T10:09:59.891Z" }, + { url = "https://files.pythonhosted.org/packages/0e/d2/237d75ac28ced3147912954e3c1a174df43a95f4f88e467809118a8165e0/pyarrow-22.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7a820d8ae11facf32585507c11f04e3f38343c1e784c9b5a8b1da5c930547fe2", size = 34355506, upload-time = "2025-10-24T10:09:02.953Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/733dfffe6d3069740f98e57ff81007809067d68626c5faef293434d11bd6/pyarrow-22.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:c6ec3675d98915bf1ec8b3c7986422682f7232ea76cad276f4c8abd5b7319b70", size = 36047312, upload-time = "2025-10-24T10:09:10.334Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2b/29d6e3782dc1f299727462c1543af357a0f2c1d3c160ce199950d9ca51eb/pyarrow-22.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3e739edd001b04f654b166204fc7a9de896cf6007eaff33409ee9e50ceaff754", size = 45081609, upload-time = "2025-10-24T10:09:18.61Z" }, + { url = "https://files.pythonhosted.org/packages/8d/42/aa9355ecc05997915af1b7b947a7f66c02dcaa927f3203b87871c114ba10/pyarrow-22.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7388ac685cab5b279a41dfe0a6ccd99e4dbf322edfb63e02fc0443bf24134e91", size = 47703663, upload-time = "2025-10-24T10:09:27.369Z" }, + { url = "https://files.pythonhosted.org/packages/ee/62/45abedde480168e83a1de005b7b7043fd553321c1e8c5a9a114425f64842/pyarrow-22.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f633074f36dbc33d5c05b5dc75371e5660f1dbf9c8b1d95669def05e5425989c", size = 48066543, upload-time = "2025-10-24T10:09:34.908Z" }, + { url = "https://files.pythonhosted.org/packages/84/e9/7878940a5b072e4f3bf998770acafeae13b267f9893af5f6d4ab3904b67e/pyarrow-22.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4c19236ae2402a8663a2c8f21f1870a03cc57f0bef7e4b6eb3238cc82944de80", size = 50288838, upload-time = "2025-10-24T10:09:44.394Z" }, + { url = "https://files.pythonhosted.org/packages/7b/03/f335d6c52b4a4761bcc83499789a1e2e16d9d201a58c327a9b5cc9a41bd9/pyarrow-22.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0c34fe18094686194f204a3b1787a27456897d8a2d62caf84b61e8dfbc0252ae", size = 29185594, upload-time = "2025-10-24T10:09:53.111Z" }, ] [[package]] @@ -746,28 +780,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/b9/9bd84453ed6dd04688de9b3f3a4146a1698e8faae2ceeccce4e14c67ae17/ruff-0.14.0.tar.gz", hash = "sha256:62ec8969b7510f77945df916de15da55311fade8d6050995ff7f680afe582c57", size = 5452071, upload-time = "2025-10-07T18:21:55.763Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/4e/79d463a5f80654e93fa653ebfb98e0becc3f0e7cf6219c9ddedf1e197072/ruff-0.14.0-py3-none-linux_armv6l.whl", hash = "sha256:58e15bffa7054299becf4bab8a1187062c6f8cafbe9f6e39e0d5aface455d6b3", size = 12494532, upload-time = "2025-10-07T18:21:00.373Z" }, - { url = "https://files.pythonhosted.org/packages/ee/40/e2392f445ed8e02aa6105d49db4bfff01957379064c30f4811c3bf38aece/ruff-0.14.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:838d1b065f4df676b7c9957992f2304e41ead7a50a568185efd404297d5701e8", size = 13160768, upload-time = "2025-10-07T18:21:04.73Z" }, - { url = "https://files.pythonhosted.org/packages/75/da/2a656ea7c6b9bd14c7209918268dd40e1e6cea65f4bb9880eaaa43b055cd/ruff-0.14.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:703799d059ba50f745605b04638fa7e9682cc3da084b2092feee63500ff3d9b8", size = 12363376, upload-time = "2025-10-07T18:21:07.833Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/1ffef5a1875add82416ff388fcb7ea8b22a53be67a638487937aea81af27/ruff-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ba9a8925e90f861502f7d974cc60e18ca29c72bb0ee8bfeabb6ade35a3abde7", size = 12608055, upload-time = "2025-10-07T18:21:10.72Z" }, - { url = "https://files.pythonhosted.org/packages/4a/32/986725199d7cee510d9f1dfdf95bf1efc5fa9dd714d0d85c1fb1f6be3bc3/ruff-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e41f785498bd200ffc276eb9e1570c019c1d907b07cfb081092c8ad51975bbe7", size = 12318544, upload-time = "2025-10-07T18:21:13.741Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ed/4969cefd53315164c94eaf4da7cfba1f267dc275b0abdd593d11c90829a3/ruff-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30a58c087aef4584c193aebf2700f0fbcfc1e77b89c7385e3139956fa90434e2", size = 14001280, upload-time = "2025-10-07T18:21:16.411Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ad/96c1fc9f8854c37681c9613d825925c7f24ca1acfc62a4eb3896b50bacd2/ruff-0.14.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f8d07350bc7af0a5ce8812b7d5c1a7293cf02476752f23fdfc500d24b79b783c", size = 15027286, upload-time = "2025-10-07T18:21:19.577Z" }, - { url = "https://files.pythonhosted.org/packages/b3/00/1426978f97df4fe331074baf69615f579dc4e7c37bb4c6f57c2aad80c87f/ruff-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eec3bbbf3a7d5482b5c1f42d5fc972774d71d107d447919fca620b0be3e3b75e", size = 14451506, upload-time = "2025-10-07T18:21:22.779Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/9c1cea6e493c0cf0647674cca26b579ea9d2a213b74b5c195fbeb9678e15/ruff-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16b68e183a0e28e5c176d51004aaa40559e8f90065a10a559176713fcf435206", size = 13437384, upload-time = "2025-10-07T18:21:25.758Z" }, - { url = "https://files.pythonhosted.org/packages/29/b4/4cd6a4331e999fc05d9d77729c95503f99eae3ba1160469f2b64866964e3/ruff-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb732d17db2e945cfcbbc52af0143eda1da36ca8ae25083dd4f66f1542fdf82e", size = 13447976, upload-time = "2025-10-07T18:21:28.83Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c0/ac42f546d07e4f49f62332576cb845d45c67cf5610d1851254e341d563b6/ruff-0.14.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:c958f66ab884b7873e72df38dcabee03d556a8f2ee1b8538ee1c2bbd619883dd", size = 13682850, upload-time = "2025-10-07T18:21:31.842Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c4/4b0c9bcadd45b4c29fe1af9c5d1dc0ca87b4021665dfbe1c4688d407aa20/ruff-0.14.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7eb0499a2e01f6e0c285afc5bac43ab380cbfc17cd43a2e1dd10ec97d6f2c42d", size = 12449825, upload-time = "2025-10-07T18:21:35.074Z" }, - { url = "https://files.pythonhosted.org/packages/4b/a8/e2e76288e6c16540fa820d148d83e55f15e994d852485f221b9524514730/ruff-0.14.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4c63b2d99fafa05efca0ab198fd48fa6030d57e4423df3f18e03aa62518c565f", size = 12272599, upload-time = "2025-10-07T18:21:38.08Z" }, - { url = "https://files.pythonhosted.org/packages/18/14/e2815d8eff847391af632b22422b8207704222ff575dec8d044f9ab779b2/ruff-0.14.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:668fce701b7a222f3f5327f86909db2bbe99c30877c8001ff934c5413812ac02", size = 13193828, upload-time = "2025-10-07T18:21:41.216Z" }, - { url = "https://files.pythonhosted.org/packages/44/c6/61ccc2987cf0aecc588ff8f3212dea64840770e60d78f5606cd7dc34de32/ruff-0.14.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a86bf575e05cb68dcb34e4c7dfe1064d44d3f0c04bbc0491949092192b515296", size = 13628617, upload-time = "2025-10-07T18:21:44.04Z" }, - { url = "https://files.pythonhosted.org/packages/73/e6/03b882225a1b0627e75339b420883dc3c90707a8917d2284abef7a58d317/ruff-0.14.0-py3-none-win32.whl", hash = "sha256:7450a243d7125d1c032cb4b93d9625dea46c8c42b4f06c6b709baac168e10543", size = 12367872, upload-time = "2025-10-07T18:21:46.67Z" }, - { url = "https://files.pythonhosted.org/packages/41/77/56cf9cf01ea0bfcc662de72540812e5ba8e9563f33ef3d37ab2174892c47/ruff-0.14.0-py3-none-win_amd64.whl", hash = "sha256:ea95da28cd874c4d9c922b39381cbd69cb7e7b49c21b8152b014bd4f52acddc2", size = 13464628, upload-time = "2025-10-07T18:21:50.318Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2a/65880dfd0e13f7f13a775998f34703674a4554906167dce02daf7865b954/ruff-0.14.0-py3-none-win_arm64.whl", hash = "sha256:f42c9495f5c13ff841b1da4cb3c2a42075409592825dada7c5885c2c844ac730", size = 12565142, upload-time = "2025-10-07T18:21:53.577Z" }, +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/34/8218a19b2055b80601e8fd201ec723c74c7fe1ca06d525a43ed07b6d8e85/ruff-0.14.2.tar.gz", hash = "sha256:98da787668f239313d9c902ca7c523fe11b8ec3f39345553a51b25abc4629c96", size = 5539663, upload-time = "2025-10-23T19:37:00.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/dd/23eb2db5ad9acae7c845700493b72d3ae214dce0b226f27df89216110f2b/ruff-0.14.2-py3-none-linux_armv6l.whl", hash = "sha256:7cbe4e593505bdec5884c2d0a4d791a90301bc23e49a6b1eb642dd85ef9c64f1", size = 12533390, upload-time = "2025-10-23T19:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/5a/8c/5f9acff43ddcf3f85130d0146d0477e28ccecc495f9f684f8f7119b74c0d/ruff-0.14.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8d54b561729cee92f8d89c316ad7a3f9705533f5903b042399b6ae0ddfc62e11", size = 12887187, upload-time = "2025-10-23T19:36:22.664Z" }, + { url = "https://files.pythonhosted.org/packages/99/fa/047646491479074029665022e9f3dc6f0515797f40a4b6014ea8474c539d/ruff-0.14.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5c8753dfa44ebb2cde10ce5b4d2ef55a41fb9d9b16732a2c5df64620dbda44a3", size = 11925177, upload-time = "2025-10-23T19:36:24.778Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/c44cf7fe6e59ab24a9d939493a11030b503bdc2a16622cede8b7b1df0114/ruff-0.14.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d0bbeffb8d9f4fccf7b5198d566d0bad99a9cb622f1fc3467af96cb8773c9e3", size = 12358285, upload-time = "2025-10-23T19:36:26.979Z" }, + { url = "https://files.pythonhosted.org/packages/45/01/47701b26254267ef40369aea3acb62a7b23e921c27372d127e0f3af48092/ruff-0.14.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7047f0c5a713a401e43a88d36843d9c83a19c584e63d664474675620aaa634a8", size = 12303832, upload-time = "2025-10-23T19:36:29.192Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5c/ae7244ca4fbdf2bee9d6405dcd5bc6ae51ee1df66eb7a9884b77b8af856d/ruff-0.14.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bf8d2f9aa1602599217d82e8e0af7fd33e5878c4d98f37906b7c93f46f9a839", size = 13036995, upload-time = "2025-10-23T19:36:31.861Z" }, + { url = "https://files.pythonhosted.org/packages/27/4c/0860a79ce6fd4c709ac01173f76f929d53f59748d0dcdd662519835dae43/ruff-0.14.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1c505b389e19c57a317cf4b42db824e2fca96ffb3d86766c1c9f8b96d32048a7", size = 14512649, upload-time = "2025-10-23T19:36:33.915Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7f/d365de998069720a3abfc250ddd876fc4b81a403a766c74ff9bde15b5378/ruff-0.14.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a307fc45ebd887b3f26b36d9326bb70bf69b01561950cdcc6c0bdf7bb8e0f7cc", size = 14088182, upload-time = "2025-10-23T19:36:36.983Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ea/d8e3e6b209162000a7be1faa41b0a0c16a133010311edc3329753cc6596a/ruff-0.14.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61ae91a32c853172f832c2f40bd05fd69f491db7289fb85a9b941ebdd549781a", size = 13599516, upload-time = "2025-10-23T19:36:39.208Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ea/c7810322086db68989fb20a8d5221dd3b79e49e396b01badca07b433ab45/ruff-0.14.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1967e40286f63ee23c615e8e7e98098dedc7301568bd88991f6e544d8ae096", size = 13272690, upload-time = "2025-10-23T19:36:41.453Z" }, + { url = "https://files.pythonhosted.org/packages/a9/39/10b05acf8c45786ef501d454e00937e1b97964f846bf28883d1f9619928a/ruff-0.14.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2877f02119cdebf52a632d743a2e302dea422bfae152ebe2f193d3285a3a65df", size = 13496497, upload-time = "2025-10-23T19:36:43.61Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/1f25f8301e13751c30895092485fada29076e5e14264bdacc37202e85d24/ruff-0.14.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e681c5bc777de5af898decdcb6ba3321d0d466f4cb43c3e7cc2c3b4e7b843a05", size = 12266116, upload-time = "2025-10-23T19:36:45.625Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/0029bfc9ce16ae78164e6923ef392e5f173b793b26cc39aa1d8b366cf9dc/ruff-0.14.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e21be42d72e224736f0c992cdb9959a2fa53c7e943b97ef5d081e13170e3ffc5", size = 12281345, upload-time = "2025-10-23T19:36:47.618Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ab/ece7baa3c0f29b7683be868c024f0838770c16607bea6852e46b202f1ff6/ruff-0.14.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b8264016f6f209fac16262882dbebf3f8be1629777cf0f37e7aff071b3e9b92e", size = 12629296, upload-time = "2025-10-23T19:36:49.789Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7f/638f54b43f3d4e48c6a68062794e5b367ddac778051806b9e235dfb7aa81/ruff-0.14.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5ca36b4cb4db3067a3b24444463ceea5565ea78b95fe9a07ca7cb7fd16948770", size = 13371610, upload-time = "2025-10-23T19:36:51.882Z" }, + { url = "https://files.pythonhosted.org/packages/8d/35/3654a973ebe5b32e1fd4a08ed2d46755af7267da7ac710d97420d7b8657d/ruff-0.14.2-py3-none-win32.whl", hash = "sha256:41775927d287685e08f48d8eb3f765625ab0b7042cc9377e20e64f4eb0056ee9", size = 12415318, upload-time = "2025-10-23T19:36:53.961Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/3758bcf9e0b6a4193a6f51abf84254aba00887dfa8c20aba18aa366c5f57/ruff-0.14.2-py3-none-win_amd64.whl", hash = "sha256:0df3424aa5c3c08b34ed8ce099df1021e3adaca6e90229273496b839e5a7e1af", size = 13565279, upload-time = "2025-10-23T19:36:56.578Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5d/aa883766f8ef9ffbe6aa24f7192fb71632f31a30e77eb39aa2b0dc4290ac/ruff-0.14.2-py3-none-win_arm64.whl", hash = "sha256:ea9d635e83ba21569fbacda7e78afbfeb94911c9434aff06192d9bc23fd5495a", size = 12554956, upload-time = "2025-10-23T19:36:58.714Z" }, ] [[package]] @@ -853,7 +887,7 @@ requires-dist = [ { name = "click", specifier = ">=8.3.0" }, { name = "nodc-codes", git = "https://github.com/nodc-sweden/nodc-codes/?tag=v2.0.0" }, { name = "pyyaml", specifier = ">=6.0.3" }, - { name = "sharkadm", git = "https://github.com/nodc-sweden/SHARKadm" }, + { name = "sharkadm", git = "https://github.com/nodc-sweden/SHARKadm?rev=polars_archive_dataholders" }, ] [package.metadata.requires-dev] @@ -866,8 +900,8 @@ dev = [ [[package]] name = "sharkadm" -version = "3.2.0" -source = { git = "https://github.com/nodc-sweden/SHARKadm#7f9cc05006425e6a463e8ddc00df3d4ac9ab8606" } +version = "3.3.0" +source = { git = "https://github.com/nodc-sweden/SHARKadm?rev=polars_archive_dataholders#aa4272202a96593a82e2300e17e175cf213a3ce6" } dependencies = [ { name = "fastexcel" }, { name = "geopandas" }, @@ -905,7 +939,7 @@ wheels = [ [[package]] name = "typer" -version = "0.19.2" +version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -913,9 +947,9 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/ca/950278884e2ca20547ff3eb109478c6baf6b8cf219318e6bc4f666fad8e8/typer-0.19.2.tar.gz", hash = "sha256:9ad824308ded0ad06cc716434705f691d4ee0bfd0fb081839d2e426860e7fdca", size = 104755, upload-time = "2025-09-23T09:47:48.256Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/28/7c85c8032b91dbe79725b6f17d2fffc595dff06a35c7a30a37bef73a1ab4/typer-0.20.0.tar.gz", hash = "sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37", size = 106492, upload-time = "2025-10-20T17:03:49.445Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl", hash = "sha256:755e7e19670ffad8283db353267cb81ef252f595aa6834a0d1ca9312d9326cb9", size = 46748, upload-time = "2025-09-23T09:47:46.777Z" }, + { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" }, ] [[package]] @@ -947,16 +981,16 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.35.1" +version = "20.35.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b4/55/a15050669ab087762c2c63010ef54643032ac1b32b5e15cc4ba75897806b/virtualenv-20.35.1.tar.gz", hash = "sha256:041dac43b6899858a91838b616599e80000e545dee01a21172a6a46746472cb2", size = 6005687, upload-time = "2025-10-09T22:21:16.139Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/28/e6f1a6f655d620846bd9df527390ecc26b3805a0c5989048c210e22c5ca9/virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c", size = 6028799, upload-time = "2025-10-29T06:57:40.511Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/32/8ab08a0cf98bdc8e9fd7522111327e33089da79c7d6b05542626be34cbb8/virtualenv-20.35.1-py3-none-any.whl", hash = "sha256:1d9d93cd01d35b785476e2fa7af711a98d40d227a078941695bbae394f8737e2", size = 5984643, upload-time = "2025-10-09T22:21:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl", hash = "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b", size = 6005095, upload-time = "2025-10-29T06:57:37.598Z" }, ] [[package]] From af82569b5e7f03c6a705b7b4ae83d6d3c1941075 Mon Sep 17 00:00:00 2001 From: Lena Viktorsson Date: Thu, 30 Oct 2025 19:14:52 +0100 Subject: [PATCH 5/6] format test --- tests/test_get_metadata.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/test_get_metadata.py b/tests/test_get_metadata.py index 200120e..489376f 100644 --- a/tests/test_get_metadata.py +++ b/tests/test_get_metadata.py @@ -1,18 +1,15 @@ -import json -from shark_metadata.delivery_data import get_static_metadata, get_static_metadata +from shark_metadata.delivery_data import get_static_metadata + def test_get_new(): - result = get_static_metadata( - "misc", - ["data_holding_centre", "smhi"]) + result = get_static_metadata("misc", ["data_holding_centre", "smhi"]) print(result) assert result == "NA" + def test_get_default_when_missing_given_key(): - result = get_static_metadata( - "monitoring_program", ["coast"], lang="sv" - ) + result = get_static_metadata("monitoring_program", ["coast"], lang="sv") assert not result == "NA" From 3f569537111a29d4eb66840c960952f660ffa780 Mon Sep 17 00:00:00 2001 From: mikaelhedblom Date: Fri, 31 Oct 2025 15:06:57 +0100 Subject: [PATCH 6/6] minor content adjustments --- shark_package/misc.yaml | 8 ++++---- src/shark_metadata/delivery_data.py | 2 +- src/shark_metadata/metadata_config/misc.yaml | 15 ++++++++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/shark_package/misc.yaml b/shark_package/misc.yaml index d135864..f77ea69 100644 --- a/shark_package/misc.yaml +++ b/shark_package/misc.yaml @@ -23,14 +23,14 @@ misc: fartyg greyseal: en: > - airplane + aircraft sv: > - flygplan + luftfartyg ringedseal: en: > - airplane + aircraft sv: > - flygplan + luftfartyg citation: # vad finns det för nya tankar? default: diff --git a/src/shark_metadata/delivery_data.py b/src/shark_metadata/delivery_data.py index d3d9398..9daeeb3 100644 --- a/src/shark_metadata/delivery_data.py +++ b/src/shark_metadata/delivery_data.py @@ -174,7 +174,7 @@ def generate_metadata(self): "en", ), "dataset_filename": self._source, # lista om metadata skrivs för flera paket. - "keywords": get_static_metadata( + "gcmd_science_keywords": get_static_metadata( "keywords", [self.monitoring_program, self.datatype.lower(), "gcmd"], "en", diff --git a/src/shark_metadata/metadata_config/misc.yaml b/src/shark_metadata/metadata_config/misc.yaml index c0d0abd..27c0616 100644 --- a/src/shark_metadata/metadata_config/misc.yaml +++ b/src/shark_metadata/metadata_config/misc.yaml @@ -15,14 +15,15 @@ data_holding_centre: en: name: Swedish Meteorological and Hydrological Institute address: Göteborgseskaderns plats 3 - postal_code: SE-426 71 + postal_code: SE-421 71 city: Västra Frölunda phone: +46-11-495 80 00 email: shark@smhi.se sv: namn: Sveriges meteorologiska och hydrologiska institut adress: Göteborgseskaderns plats 3 - postadress: 426 71 Västra Frölunda + postnummer: 421 71 + postort: Västra Frölunda tel: +46-11-495 80 00 e-post: shark@smhi.se default: @@ -36,7 +37,7 @@ data_holding_centre: Göteborgseskaderns plats 3 postal_code: en: - SE-426 71 + SE-421 71 city: en: Västra Frölunda @@ -72,14 +73,14 @@ platform_class: fartyg greyseal: en: - airplane + aircraft sv: - flygplan + luftfartyg ringedseal: en: - airplane + aircraft sv: - flygplan + luftfartyg citation: # vad finns det för nya tankar? # datum för skapande, leverantör, ackreditering, år (min, max), datatyp