From be581defd2d75daa7356e0478540074b8c6f63f6 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 11:23:31 +0100 Subject: [PATCH 001/127] First commit for testing --- edsteva/probes/__init__.py | 6 +- edsteva/probes/biology.py | 227 +++++++++++++ edsteva/probes/biology_per_visit.py | 220 +++++++++++++ .../{condition.py => condition_per_visit.py} | 5 +- edsteva/probes/{note.py => note_per_visit.py} | 13 +- edsteva/probes/utils.py | 309 ++++++++++++++++-- edsteva/probes/visit.py | 11 +- 7 files changed, 750 insertions(+), 41 deletions(-) create mode 100644 edsteva/probes/biology.py create mode 100644 edsteva/probes/biology_per_visit.py rename edsteva/probes/{condition.py => condition_per_visit.py} (98%) rename edsteva/probes/{note.py => note_per_visit.py} (96%) diff --git a/edsteva/probes/__init__.py b/edsteva/probes/__init__.py index 218c2d2a..90b3103f 100644 --- a/edsteva/probes/__init__.py +++ b/edsteva/probes/__init__.py @@ -1,4 +1,6 @@ from edsteva.probes.base import BaseProbe -from edsteva.probes.condition import ConditionProbe -from edsteva.probes.note import NoteProbe +from edsteva.probes.biology import BiologyProbe +from edsteva.probes.biology_per_visit import BiologyPerVisitProbe +from edsteva.probes.condition_per_visit import ConditionPerVisitProbe +from edsteva.probes.note_per_visit import NotePerVisitProbe from edsteva.probes.visit import VisitProbe diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py new file mode 100644 index 00000000..1b1bf5ea --- /dev/null +++ b/edsteva/probes/biology.py @@ -0,0 +1,227 @@ +from datetime import datetime +from typing import Dict, List, Tuple, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.base import BaseProbe +from edsteva.probes.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + get_biology_relationship, + hospital_only, + prepare_care_site, + prepare_measurement, + prepare_visit_occurrence, +) +from edsteva.utils.checks import check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness(biology_predictor, standard_terminologies): + partition_cols = ( + [ + "care_site_level", + "care_site_id", + "care_site_short_name", + "stay_type", + "concepts_set", + "length_of_stay", + "date", + ] + + [ + "{}_concept_code".format(terminology) + for terminology in standard_terminologies + ] + + [ + "{}_concept_name".format(terminology) + for terminology in standard_terminologies + ] + + [ + "{}_vocabulary".format(terminology) + for terminology in standard_terminologies + ] + ) + n_measurement = ( + biology_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"measurement_id": "nunique"}) + .rename(columns={"measurement_id": "n_measurement"}) + ) + + n_measurement = to("pandas", n_measurement) + + partition_cols = list(set(partition_cols) - {"date"}) + q_99_measurement = ( + n_measurement.groupby( + partition_cols, + as_index=False, + dropna=False, + )[["n_measurement"]] + .quantile(q=0.99) + .rename(columns={"n_measurement": "q_99_measurement"}) + ) + + biology_predictor = n_measurement.merge( + q_99_measurement, + on=partition_cols, + ) + + biology_predictor["c"] = biology_predictor["q_99_visit"].where( + biology_predictor["q_99_measurement"] == 0, + biology_predictor["n_measurement"] / biology_predictor["q_99_measurement"], + ) + biology_predictor = biology_predictor.drop(columns="q_99_measurement") + + return biology_predictor + + +def get_hospital_measurements(measurement, visit_occurrence, care_site): + hospital_measurement = measurement.merge(visit_occurrence, on="visit_occurrence_id") + hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") + + if is_koalas(hospital_measurement): + hospital_measurement.spark.cache() + + return hospital_measurement + + +class BiologyProbe(BaseProbe): + r""" + The ``BiologyProbe`` computes $c_(t)$ the availability of laboratory data related to biological measurements for each biological code and each care site according to time: + + $$ + c(t) = \frac{n_{biology}(t)}{n_{99}} + $$ + + Where $n_{biology}(t)$ is the number of biological measurements, $n_{99}$ is the $99^{th}$ percentile and $t$ is the month. + + Attributes + ---------- + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "concept_code", "stay_type", "care_site_id"]`` + """ + + _index = ["care_site_level", "concept_code", "stay_type", "care_site_id"] + + def compute_process( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime = None, + end_date: datetime = None, + care_site_levels: List[str] = None, + stay_types: Union[str, Dict[str, str]] = None, + concepts_sets: Union[str, Dict[str, str]] = { + "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", + "Plaquettes": "E4812|C0326|A1636|A0230|H6751|A1598|G7728|G7727|G7833|A2538|A2539|J4463", + "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", + "Potassium": "A1656|C8757|C8758|A2380|E2073|L5014|F2618|E2337|J1178|A3819|J1181", + "Sodium": "A1772|C8759|C8760|A0262|J1177|F8162|L5013|F2617|K9086|J1180 ", + "Chlorure": "B5597|F2359|A0079|J1179|F2619|J1182|F2358|A0079|J1179|F2619|J1182", + "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", + "Bicarbonate": "A0422|H9622|C6408|F4161", + }, + care_site_ids: List[int] = None, + care_site_short_names: List[str] = None, + stay_durations: List[float] = [1], + standard_terminologies: List[str] = ["ANABIO", "LOINC"], + source_terminologies: Dict[str, str] = { + "ANALYSES_LABORATOIRE": r"Analyses Laboratoire", + "GLIMS_ANABIO": r"GLIMS.{0,20}Anabio", + "GLIMS_LOINC": r"GLIMS.{0,20}LOINC", + "ANABIO_ITM": r"ITM - ANABIO", + "LOINC_ITM": r"ITM - LOINC", + }, + mapping: List[Tuple[str, str, str]] = [ + ("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to"), + ("ANALYSES_LABORATOIRE", "GLIMS_LOINC", "Maps to"), + ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), + ("ANABIO_ITM", "LOINC_ITM", "Maps to"), + ], + ): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + """ + check_tables( + data=data, + required_tables=["measurement", "concept", "concept_relationship"], + ) + + biology_relationship = get_biology_relationship( + data=data, + standard_terminologies=standard_terminologies, + source_terminologies=source_terminologies, + mapping=mapping, + ) + + measurement = prepare_measurement( + data=data, + biology_relationship=biology_relationship, + concepts_sets=concepts_sets, + start_date=start_date, + end_date=end_date, + mapping=mapping, + standard_terminologies=standard_terminologies, + per_visit=False, + ) + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=None, + end_date=None, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + care_site = prepare_care_site( + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_relationship=care_site_relationship, + ) + + hospital_visit = get_hospital_measurements( + measurement=measurement, + visit_occurrence=visit_occurrence, + care_site=care_site, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + biology_predictor_by_level = {hospital_name: hospital_visit} + + if not hospital_only(care_site_levels=care_site_levels): + logger.info( + "Biological measurements are only available at hospital level for now" + ) + care_site_levels = "Hospital" + + biology_predictor = concatenate_predictor_by_level( + predictor_by_level=biology_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(biology_predictor) diff --git a/edsteva/probes/biology_per_visit.py b/edsteva/probes/biology_per_visit.py new file mode 100644 index 00000000..32d57a18 --- /dev/null +++ b/edsteva/probes/biology_per_visit.py @@ -0,0 +1,220 @@ +from datetime import datetime +from typing import Dict, List, Tuple, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.base import BaseProbe +from edsteva.probes.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + get_biology_relationship, + hospital_only, + prepare_care_site, + prepare_measurement, + prepare_visit_occurrence, +) +from edsteva.utils.checks import check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness(biology_predictor): + partition_cols = [ + "care_site_level", + "care_site_id", + "care_site_short_name", + "stay_type", + "concepts_set", + "length_of_stay", + "date", + ] + n_visit_with_bio = ( + biology_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"has_bio": "count"}) + .rename(columns={"has_bio": "n_visit_with_bio"}) + ) + + partition_cols = list(set(partition_cols) - {"concepts_set"}) + n_visit = ( + biology_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"visit_id": "nunique"}) + .rename(columns={"visit_id": "n_visit"}) + ) + + biology_predictor = n_visit_with_bio.merge( + n_visit, + on=partition_cols, + ) + + biology_predictor = to("pandas", biology_predictor) + + biology_predictor["c"] = biology_predictor["n_visit"].where( + biology_predictor["n_visit"] == 0, + biology_predictor["n_visit_with_bio"] / biology_predictor["n_visit"], + ) + biology_predictor = biology_predictor.drop(columns=["n_visit_with_bio"]) + + return biology_predictor + + +def get_hospital_visit(measurement, visit_occurrence, care_site): + measurement_hospital = measurement[ + ["visit_occurrence_id", "concepts_set"] + ].drop_duplicates() + measurement_hospital["has_bio"] = True + hospital_visit = visit_occurrence.merge( + measurement_hospital, on="visit_occurrence_id", how="left" + ) + hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) + hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + if is_koalas(hospital_visit): + hospital_visit.spark.cache() + + return hospital_visit + + +def get_hospital_measurements(measurement, visit_occurrence, care_site): + hospital_measurement = measurement.merge(visit_occurrence, on="visit_occurrence_id") + hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") + + if is_koalas(hospital_measurement): + hospital_measurement.spark.cache() + + return hospital_measurement + + +class BiologyPerVisitProbe(BaseProbe): + r""" + The ``BiologyProbe`` computes $c_(t)$ the availability of laboratory data related to biological measurements for each biological code and each care site according to time: + + $$ + c(t) = \frac{n_{biology}(t)}{n_{99}} + $$ + + Where $n_{biology}(t)$ is the number of biological measurements, $n_{99}$ is the $99^{th}$ percentile and $t$ is the month. + + Attributes + ---------- + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "concept_code", "stay_type", "care_site_id"]`` + """ + + _index = ["care_site_level", "concept_code", "stay_type", "care_site_id"] + + def compute_process( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime = None, + end_date: datetime = None, + care_site_levels: List[str] = None, + stay_types: Union[str, Dict[str, str]] = None, + concepts_sets: Union[str, Dict[str, str]] = None, + care_site_ids: List[int] = None, + care_site_short_names: List[str] = None, + stay_durations: List[float] = [1], + standard_terminologies: List[str] = ["ANABIO", "LOINC"], + source_terminologies: Dict[str, str] = { + "ANALYSES_LABORATOIRE": r"Analyses Laboratoire", + "GLIMS_ANABIO": r"GLIMS.{0,20}Anabio", + "GLIMS_LOINC": r"GLIMS.{0,20}LOINC", + "ANABIO_ITM": r"ITM - ANABIO", + "LOINC_ITM": r"ITM - LOINC", + }, + mapping: List[Tuple[str, str, str]] = [ + ("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to"), + ("ANALYSES_LABORATOIRE", "GLIMS_LOINC", "Maps to"), + ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), + ("ANABIO_ITM", "LOINC_ITM", "Maps to"), + ], + ): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + """ + check_tables( + data=data, + required_tables=["measurement", "concept", "concept_relationship"], + ) + + biology_relationship = get_biology_relationship( + data=data, + standard_terminologies=standard_terminologies, + source_terminologies=source_terminologies, + mapping=mapping, + ) + + measurement = prepare_measurement( + data=data, + biology_relationship=biology_relationship, + concepts_sets=concepts_sets, + start_date=start_date, + end_date=end_date, + mapping=mapping, + standard_terminologies=standard_terminologies, + per_visit=True, + ) + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + care_site = prepare_care_site( + data, + care_site_ids, + care_site_short_names, + care_site_relationship, + ) + + hospital_visit = get_hospital_visit( + measurement, + visit_occurrence, + care_site, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + biology_predictor_by_level = {hospital_name: hospital_visit} + + if not hospital_only(care_site_levels=care_site_levels): + logger.info( + "Biological measurements are only available at hospital level for now" + ) + care_site_levels = "Hospital" + + biology_predictor = concatenate_predictor_by_level( + predictor_by_level=biology_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(biology_predictor) diff --git a/edsteva/probes/condition.py b/edsteva/probes/condition_per_visit.py similarity index 98% rename from edsteva/probes/condition.py rename to edsteva/probes/condition_per_visit.py index d6f8c64c..2c2510b7 100644 --- a/edsteva/probes/condition.py +++ b/edsteva/probes/condition_per_visit.py @@ -30,6 +30,7 @@ def compute_completeness(condition_predictor): "diag_type", "condition_type", "source_system", + "length_of_stay", "date", ] n_visit_with_condition = ( @@ -156,7 +157,7 @@ def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no c return pole_visit -class ConditionProbe(BaseProbe): +class ConditionPerVisitProbe(BaseProbe): r""" The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data in patients' administrative stay: @@ -198,6 +199,7 @@ def compute_process( "Cancer": "C", }, source_systems: List[str] = ["ORBIS"], + stay_durations: List[float] = None, care_site_ids: List[int] = None, care_site_short_names: List[str] = None, ): @@ -241,6 +243,7 @@ def compute_process( start_date=start_date, end_date=end_date, stay_types=stay_types, + stay_durations=stay_durations, ) condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/note.py b/edsteva/probes/note_per_visit.py similarity index 96% rename from edsteva/probes/note.py rename to edsteva/probes/note_per_visit.py index 279ebb13..529d2336 100644 --- a/edsteva/probes/note.py +++ b/edsteva/probes/note_per_visit.py @@ -28,6 +28,7 @@ def compute_completeness(note_predictor): "care_site_short_name", "stay_type", "note_type", + "length_of_stay", "date", ] n_visit_with_note = ( @@ -140,7 +141,7 @@ def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no c return pole_visit -class NoteProbe(BaseProbe): +class NotePerVisitProbe(BaseProbe): r""" The ``NoteProbe`` computes $c(t)$ the availability of clinical documents linked to patients' administrative visit: @@ -176,6 +177,7 @@ def compute_process( "Ordonnance": "ordo", "CRH": "crh", }, + stay_durations: List[float] = None, care_site_ids: List[int] = None, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -205,10 +207,11 @@ def compute_process( check_tables(data=data, required_tables=["note"]) visit_occurrence = prepare_visit_occurrence( - data, - start_date, - end_date, - stay_types, + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, ) care_site = prepare_care_site( diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py index 44581f3c..2db7a06b 100644 --- a/edsteva/probes/utils.py +++ b/edsteva/probes/utils.py @@ -1,9 +1,10 @@ import os -from datetime import datetime +from datetime import datetime, timedelta from pathlib import Path -from typing import Dict, List, Union +from typing import Dict, List, Tuple, Union import _pickle as pickle +import numpy as np import pandas as pd from IPython.display import display from loguru import logger @@ -28,37 +29,38 @@ def prepare_visit_occurrence( start_date: datetime, end_date: datetime, stay_types: Union[str, Dict[str, str]], + stay_durations: List[float], ): + required_columns = [ + "visit_occurrence_id", + "visit_source_value", + "visit_start_datetime", + "visit_end_datetime", + "care_site_id", + "row_status_source_value", + "visit_occurrence_source_value", + ] check_columns( data.visit_occurrence, - required_columns=[ - "visit_occurrence_id", - "visit_source_value", - "visit_start_datetime", - "care_site_id", - "row_status_source_value", - "visit_occurrence_source_value", - ], + required_columns=required_columns, df_name="visit_occurrence", ) - visit_occurrence = data.visit_occurrence[ - [ - "visit_occurrence_id", - "visit_source_value", - "visit_start_datetime", - "care_site_id", - "row_status_source_value", - "visit_occurrence_source_value", - ] - ] + visit_occurrence = data.visit_occurrence[required_columns] + + visit_occurrence = add_length_of_stay( + visit_occurrence=visit_occurrence, stay_durations=stay_durations + ) + visit_occurrence = visit_occurrence.rename( columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} ) + visit_occurrence = get_valid_observations( table=visit_occurrence, table_name="visit_occurrence", invalid_naming="supprimé", ) + visit_occurrence = filter_table_by_date( table=visit_occurrence, table_name="visit_occurrence", @@ -71,12 +73,88 @@ def prepare_visit_occurrence( table=visit_occurrence, table_name="visit_occurrence", type_groups=stay_types, - name="stay_type", + source_col="stay_type", + target_col="stay_type", ) return visit_occurrence +def prepare_measurement( + data: Data, + biology_relationship: pd.DataFrame, + concepts_sets: Union[str, Dict[str, str]], + start_date: datetime, + end_date: datetime, + mapping: List[Tuple[str]], + standard_terminologies: List[str], + per_visit: bool, +): + measurement_columns = [ + "measurement_id", + "row_status_source_value", + "measurement_source_concept_id", + ] + + if per_visit: + measurement_columns = measurement_columns + ["visit_occurrence_id"] + else: + measurement_columns = measurement_columns + ["measurement_datetime"] + + check_columns( + data.measurement, + required_columns=measurement_columns, + df_name="measurement", + ) + source_terminology = mapping[0][0] + measurement = data.measurement[measurement_columns].rename( + columns={ + "measurement_source_concept_id": "{}_concept_id".format(source_terminology) + } + ) + measurement = get_valid_observations( + table=measurement, table_name="measurement", valid_naming="Validé" + ) + + biology_relationship = biology_relationship[ + ["{}_concept_id".format(source_terminology)] + + [ + "{}_{}".format(terminology, concept_col) + for terminology in standard_terminologies + [source_terminology] + for concept_col in ["concept_code", "concept_name"] + ] + ] + + measurement = measurement.merge( + biology_relationship, on="{}_concept_id".format(source_terminology) + ) + + if per_visit: + measurement = measurement.rename(columns={"measurement_datetime": "date"}) + measurement = filter_table_by_date( + table=measurement, + table_name="measurement", + start_date=start_date, + end_date=end_date, + ) + + if concepts_sets: + measurement_by_terminology = [] + for standard_terminology in standard_terminologies: + measurement_by_terminology.append( + filter_table_by_type( + table=measurement, + table_name="measurement", + type_groups=concepts_sets, + source_col="{}_concept_code".format(standard_terminology), + target_col="concepts_set", + ) + ) + measurement = get_framework(measurement).concat(measurement_by_terminology) + + return measurement + + def prepare_condition_occurrence( data: Data, extra_data: Data, @@ -162,7 +240,8 @@ def prepare_condition_occurrence( table=condition_occurrence, table_name="condition_occurrence", type_groups=diag_types, - name="diag_type", + source_col="diag_type", + target_col="diag_type", ) # Filter conditions @@ -174,7 +253,8 @@ def prepare_condition_occurrence( table=condition_occurrence, table_name="condition_occurrence", type_groups=condition_types, - name="condition_type", + source_col="condition_type", + target_col="condition_type", ) return condition_occurrence @@ -232,7 +312,8 @@ def prepare_note( table=note, table_name="note", type_groups=note_types, - name="note_type", + source_col="note_type", + target_col="note_type", ) return note @@ -545,7 +626,8 @@ def filter_table_by_type( table: DataFrame, table_name: str, type_groups: Union[str, Dict], - name: str, + source_col: str, + target_col: str, ): if isinstance(type_groups, str): type_groups = {type_groups: type_groups} @@ -553,21 +635,23 @@ def filter_table_by_type( table_per_types = [] for type_name, type_value in type_groups.items(): table_per_type_element = table[ - table[name].str.contains( + table[source_col].str.contains( type_value, case=False, regex=True, na=False, ) ].copy() - table_per_type_element[name] = type_name + table_per_type_element[target_col] = type_name table_per_types.append(table_per_type_element) else: - raise TypeError("{} must be str or dict not {}".format(name, type(type_groups))) + raise TypeError( + "{} must be str or dict not {}".format(target_col, type(type_groups)) + ) logger.debug( "The following {} : {} have been selected on table {}", - name, + target_col, type_groups, table_name, ) @@ -725,6 +809,173 @@ def delete_object(obj, filename: str): ) +def add_length_of_stay(visit_occurrence: DataFrame, stay_durations: List[float]): + if stay_durations: + visit_occurrence["length_of_stay"] = ( + visit_occurrence["visit_end_datetime"] + - visit_occurrence["visit_start_datetime"] + ) / np.timedelta64(timedelta(days=1)) + + # All stays + all_stays = visit_occurrence.copy() + all_stays["length_of_stay"] = "All lengths" + + # Incomplete stays + visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + visit_occurrence["visit_end_datetime"].isna(), + "Incomplete stay", + ) + + # Complete stays + min_duration = stay_durations[0] + max_duration = stay_durations[-1] + visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + (visit_occurrence["length_of_stay"] <= min_duration), + "<= {} days".format(min_duration), + ) + visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + (visit_occurrence["length_of_stay"] >= max_duration), + ">= {} days".format(max_duration), + ) + n_duration = len(stay_durations) + for i in range(0, n_duration - 1): + min = stay_durations[i] + max = stay_durations[i + 1] + visit_occurrence["length_of_stay"] = visit_occurrence[ + "length_of_stay" + ].mask( + (visit_occurrence["length_of_stay"] >= min) + & (visit_occurrence["length_of_stay"] < max), + "{} days - {} days".format(min, max), + ) + visit_occurrence = get_framework(visit_occurrence).concat( + [all_stays, visit_occurrence] + ) + + else: + visit_occurrence["length_of_stay"] = "All lengths" + + return visit_occurrence.drop(columns="visit_end_datetime") + + +def get_biology_relationship( + data: Data, + standard_terminologies: List[str], + source_terminologies: Dict[str, str], + mapping: List[Tuple[str, str, str]], +) -> pd.DataFrame: + """Computes biology relationship + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + + Example + ------- + + | care_site_id | care_site_level | care_site_short_name | parent_care_site_id | parent_care_site_level | parent_care_site_short_name | + | :----------- | :------------------------- | :------------------- | :------------------ | :------------------------- | :-------------------------- | + | 8312056386 | Unité Fonctionnelle (UF) | UF A | 8312027648 | Pôle/DMU | Pole A | + | 8312022130 | Pôle/DMU | Pole B | 8312033550 | Hôpital | Hospital A | + | 8312016782 | Service/Département | Service A | 8312033550 | Hôpital | Hospital A | + | 8312010155 | Unité Fonctionnelle (UF) | UF B | 8312022130 | Pôle/DMU | Pole B | + | 8312067829 | Unité de consultation (UC) | UC A | 8312051097 | Unité de consultation (UC) | UC B | + + """ + + check_tables(data=data, required_tables=["concept", "concept_relationship"]) + concept_columns = [ + "concept_id", + "concept_name", + "concept_code", + "vocabulary_id", + ] + + concept_relationship_columns = [ + "concept_id_1", + "concept_id_2", + "relationship_id", + ] + check_columns( + data.concept, + required_columns=concept_columns, + df_name="concept", + ) + + check_columns( + data.concept_relationship, + required_columns=concept_relationship_columns, + df_name="concept_relationship", + ) + concept = data.concept[concept_columns].to_pandas() + concept_relationship = data.concept_relationship[ + concept_relationship_columns + ].to_pandas() + concept_by_terminology = {} + for terminology, regex in source_terminologies.items(): + concept_by_terminology[terminology] = ( + concept[concept.vocabulary_id.str.contains(regex)] + .rename( + columns={ + "concept_id": "{}_concept_id".format(terminology), + "concept_name": "{}_concept_name".format(terminology), + "concept_code": "{}_concept_code".format(terminology), + } + ) + .drop(columns="vocabulary_id") + ) + biology_relationship = concept_by_terminology[mapping[0][0]] + for source, target, relationship_id in mapping: + relationship = concept_relationship.rename( + columns={ + "concept_id_1": "{}_concept_id".format(source), + "concept_id_2": "{}_concept_id".format(target), + } + )[concept_relationship.relationship_id == relationship_id].drop( + columns="relationship_id" + ) + relationship = relationship.merge( + concept_by_terminology[target], on="{}_concept_id".format(target) + ) + biology_relationship = biology_relationship.merge( + relationship, on="{}_concept_id".format(source), how="left" + ) + + # Get ITM code in priority and if not get GLIMS code + for standard_terminology in standard_terminologies: + biology_relationship[ + "{}_concept_code".format(standard_terminology) + ] = biology_relationship[ + "{}_ITM_concept_code".format(standard_terminology) + ].mask( + biology_relationship[ + "{}_ITM_concept_code".format(standard_terminology) + ].isna(), + biology_relationship["GLIMS_{}_concept_code".format(standard_terminology)], + ) + biology_relationship[ + "{}_concept_name".format(standard_terminology) + ] = biology_relationship[ + "{}_ITM_concept_name".format(standard_terminology) + ].mask( + biology_relationship[ + "{}_ITM_concept_name".format(standard_terminology) + ].isna(), + biology_relationship["GLIMS_{}_concept_name".format(standard_terminology)], + ) + biology_relationship["{}_vocabulary".format(standard_terminology)] = "ITM" + biology_relationship[ + "{}_vocabulary".format(standard_terminology) + ] = biology_relationship["{}_vocabulary".format(standard_terminology)].mask( + biology_relationship[ + "{}_ITM_concept_code".format(standard_terminology) + ].isna(), + "GLIMS", + ) + return biology_relationship + + def _get_relationship_table_uc_to_uf( care_site_relationship: DataFrame, ): diff --git a/edsteva/probes/visit.py b/edsteva/probes/visit.py index 9f35974c..b57390b8 100644 --- a/edsteva/probes/visit.py +++ b/edsteva/probes/visit.py @@ -24,6 +24,7 @@ def compute_completeness(visit_predictor): "care_site_id", "care_site_short_name", "stay_type", + "length_of_stay", "date", ] n_visit = ( @@ -139,6 +140,7 @@ def compute_process( end_date: datetime = None, care_site_levels: List[str] = None, stay_types: Union[str, Dict[str, str]] = None, + stay_durations: List[float] = None, care_site_ids: List[int] = None, care_site_short_names: List[str] = None, ): @@ -165,10 +167,11 @@ def compute_process( """ visit_occurrence = prepare_visit_occurrence( - data, - start_date, - end_date, - stay_types, + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, ) care_site = prepare_care_site( From 74521de33160af04134f0e09bb88305d8d22e701 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 13:19:51 +0100 Subject: [PATCH 002/127] Hot Fix --- edsteva/probes/biology.py | 3 ++- edsteva/probes/biology_per_visit.py | 3 ++- edsteva/probes/utils.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index 1b1bf5ea..69f6e7cd 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -116,7 +116,7 @@ def compute_process( care_site_relationship: pd.DataFrame, start_date: datetime = None, end_date: datetime = None, - care_site_levels: List[str] = None, + care_site_levels: List[str] = "Hospital", stay_types: Union[str, Dict[str, str]] = None, concepts_sets: Union[str, Dict[str, str]] = { "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", @@ -178,6 +178,7 @@ def compute_process( source_terminologies=source_terminologies, mapping=mapping, ) + self.biology_relationship = biology_relationship measurement = prepare_measurement( data=data, diff --git a/edsteva/probes/biology_per_visit.py b/edsteva/probes/biology_per_visit.py index 32d57a18..0ae31714 100644 --- a/edsteva/probes/biology_per_visit.py +++ b/edsteva/probes/biology_per_visit.py @@ -118,7 +118,7 @@ def compute_process( care_site_relationship: pd.DataFrame, start_date: datetime = None, end_date: datetime = None, - care_site_levels: List[str] = None, + care_site_levels: List[str] = "Hospital", stay_types: Union[str, Dict[str, str]] = None, concepts_sets: Union[str, Dict[str, str]] = None, care_site_ids: List[int] = None, @@ -171,6 +171,7 @@ def compute_process( source_terminologies=source_terminologies, mapping=mapping, ) + self.biology_relationship = biology_relationship measurement = prepare_measurement( data=data, diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py index 2db7a06b..d0002a48 100644 --- a/edsteva/probes/utils.py +++ b/edsteva/probes/utils.py @@ -124,7 +124,7 @@ def prepare_measurement( for concept_col in ["concept_code", "concept_name"] ] ] - + biology_relationship = to(get_framework(measurement), biology_relationship) measurement = measurement.merge( biology_relationship, on="{}_concept_id".format(source_terminology) ) From 7d2e2f4c8eb724e96e21b483bfe44c3c78de5e63 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 13:33:04 +0100 Subject: [PATCH 003/127] Hot fix --- edsteva/probes/biology_per_visit.py | 10 ---------- edsteva/probes/utils.py | 11 ++++------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/edsteva/probes/biology_per_visit.py b/edsteva/probes/biology_per_visit.py index 0ae31714..2005debc 100644 --- a/edsteva/probes/biology_per_visit.py +++ b/edsteva/probes/biology_per_visit.py @@ -82,16 +82,6 @@ def get_hospital_visit(measurement, visit_occurrence, care_site): return hospital_visit -def get_hospital_measurements(measurement, visit_occurrence, care_site): - hospital_measurement = measurement.merge(visit_occurrence, on="visit_occurrence_id") - hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") - - if is_koalas(hospital_measurement): - hospital_measurement.spark.cache() - - return hospital_measurement - - class BiologyPerVisitProbe(BaseProbe): r""" The ``BiologyProbe`` computes $c_(t)$ the availability of laboratory data related to biological measurements for each biological code and each care site according to time: diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py index d0002a48..8bc32888 100644 --- a/edsteva/probes/utils.py +++ b/edsteva/probes/utils.py @@ -92,15 +92,12 @@ def prepare_measurement( ): measurement_columns = [ "measurement_id", + "visit_occurrence_id", + "measurement_datetime", "row_status_source_value", "measurement_source_concept_id", ] - if per_visit: - measurement_columns = measurement_columns + ["visit_occurrence_id"] - else: - measurement_columns = measurement_columns + ["measurement_datetime"] - check_columns( data.measurement, required_columns=measurement_columns, @@ -109,7 +106,8 @@ def prepare_measurement( source_terminology = mapping[0][0] measurement = data.measurement[measurement_columns].rename( columns={ - "measurement_source_concept_id": "{}_concept_id".format(source_terminology) + "measurement_source_concept_id": "{}_concept_id".format(source_terminology), + "measurement_datetime": "date", } ) measurement = get_valid_observations( @@ -130,7 +128,6 @@ def prepare_measurement( ) if per_visit: - measurement = measurement.rename(columns={"measurement_datetime": "date"}) measurement = filter_table_by_date( table=measurement, table_name="measurement", From ca5a44e86ae1e03fa063f73001af3c70b73f05fe Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 13:38:40 +0100 Subject: [PATCH 004/127] Hot fix --- edsteva/probes/biology.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index 69f6e7cd..e96d8142 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -225,4 +225,4 @@ def compute_process( care_site_levels=care_site_levels, ) - return compute_completeness(biology_predictor) + return compute_completeness(biology_predictor, standard_terminologies) From ea0218db94a01534d4924418114d95159b969766 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 13:41:19 +0100 Subject: [PATCH 005/127] Hot fix --- edsteva/probes/biology.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index e96d8142..377e437a 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -81,7 +81,9 @@ def compute_completeness(biology_predictor, standard_terminologies): def get_hospital_measurements(measurement, visit_occurrence, care_site): - hospital_measurement = measurement.merge(visit_occurrence, on="visit_occurrence_id") + hospital_measurement = measurement.merge( + visit_occurrence.drop(columns="date"), on="visit_occurrence_id" + ) hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") if is_koalas(hospital_measurement): From d9c8c29253cf9b505c55dbd08448d884a24c6e37 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 14:08:56 +0100 Subject: [PATCH 006/127] Hot fix --- edsteva/probes/biology.py | 36 +++++++++++++++++++++------ edsteva/probes/biology_per_visit.py | 13 +++++++--- edsteva/probes/condition_per_visit.py | 3 ++- edsteva/probes/note_per_visit.py | 10 ++++++-- edsteva/probes/utils.py | 19 ++++++++------ edsteva/probes/visit.py | 4 +-- 6 files changed, 61 insertions(+), 24 deletions(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index 377e437a..e1d69e78 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -19,7 +19,7 @@ from edsteva.utils.typing import Data -def compute_completeness(biology_predictor, standard_terminologies): +def compute_completeness(biology_predictor, standard_terminologies, root_terminology): partition_cols = ( [ "care_site_level", @@ -32,11 +32,11 @@ def compute_completeness(biology_predictor, standard_terminologies): ] + [ "{}_concept_code".format(terminology) - for terminology in standard_terminologies + for terminology in standard_terminologies + [root_terminology] ] + [ "{}_concept_name".format(terminology) - for terminology in standard_terminologies + for terminology in standard_terminologies + [root_terminology] ] + [ "{}_vocabulary".format(terminology) @@ -107,10 +107,16 @@ class BiologyProbe(BaseProbe): _index: List[str] Variable from which data is grouped - **VALUE**: ``["care_site_level", "concept_code", "stay_type", "care_site_id"]`` + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` """ - _index = ["care_site_level", "concept_code", "stay_type", "care_site_id"] + _index = [ + "care_site_level", + "concepts_set", + "stay_type", + "length_of_stay", + "care_site_id", + ] def compute_process( self, @@ -180,15 +186,27 @@ def compute_process( source_terminologies=source_terminologies, mapping=mapping, ) - self.biology_relationship = biology_relationship + self.biology_relationship = biology_relationship + root_terminology = mapping[0][0] + self._index = self._index + [ + "{}_concept_code".format(terminology) + for terminology in standard_terminologies + [root_terminology] + ] + +[ + "{}_concept_name".format(terminology) + for terminology in standard_terminologies + [root_terminology] + ] + +["{}_vocabulary".format(terminology) for terminology in standard_terminologies] + print(self._index) + print(self.biology_relationship.head()) measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, concepts_sets=concepts_sets, start_date=start_date, end_date=end_date, - mapping=mapping, + root_terminology=root_terminology, standard_terminologies=standard_terminologies, per_visit=False, ) @@ -227,4 +245,6 @@ def compute_process( care_site_levels=care_site_levels, ) - return compute_completeness(biology_predictor, standard_terminologies) + return compute_completeness( + biology_predictor, standard_terminologies, root_terminology + ) diff --git a/edsteva/probes/biology_per_visit.py b/edsteva/probes/biology_per_visit.py index 2005debc..88f40e2b 100644 --- a/edsteva/probes/biology_per_visit.py +++ b/edsteva/probes/biology_per_visit.py @@ -97,10 +97,16 @@ class BiologyPerVisitProbe(BaseProbe): _index: List[str] Variable from which data is grouped - **VALUE**: ``["care_site_level", "concept_code", "stay_type", "care_site_id"]`` + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` """ - _index = ["care_site_level", "concept_code", "stay_type", "care_site_id"] + _index = [ + "care_site_level", + "concepts_set", + "stay_type", + "length_of_stay", + "care_site_id", + ] def compute_process( self, @@ -162,6 +168,7 @@ def compute_process( mapping=mapping, ) self.biology_relationship = biology_relationship + root_terminology = mapping[0][0] measurement = prepare_measurement( data=data, @@ -169,7 +176,7 @@ def compute_process( concepts_sets=concepts_sets, start_date=start_date, end_date=end_date, - mapping=mapping, + root_terminology=root_terminology, standard_terminologies=standard_terminologies, per_visit=True, ) diff --git a/edsteva/probes/condition_per_visit.py b/edsteva/probes/condition_per_visit.py index 2c2510b7..981c9f8c 100644 --- a/edsteva/probes/condition_per_visit.py +++ b/edsteva/probes/condition_per_visit.py @@ -172,12 +172,13 @@ class ConditionPerVisitProbe(BaseProbe): _index: List[str] Variable from which data is grouped - **VALUE**: ``["care_site_level", "stay_type", "diag_type", "condition_type", "source_system", "care_site_id"]`` + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "diag_type", "condition_type", "source_system", "care_site_id"]`` """ _index = [ "care_site_level", "stay_type", + "length_of_stay", "diag_type", "condition_type", "source_system", diff --git a/edsteva/probes/note_per_visit.py b/edsteva/probes/note_per_visit.py index 529d2336..de292718 100644 --- a/edsteva/probes/note_per_visit.py +++ b/edsteva/probes/note_per_visit.py @@ -156,10 +156,16 @@ class NotePerVisitProbe(BaseProbe): _index: List[str] Variable from which data is grouped - **VALUE**: ``["care_site_level", "stay_type", "note_type", "care_site_id"]`` + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id"]`` """ - _index = ["care_site_level", "stay_type", "note_type", "care_site_id"] + _index = [ + "care_site_level", + "stay_type", + "length_of_stay", + "note_type", + "care_site_id", + ] def compute_process( self, diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py index 8bc32888..6909f8b2 100644 --- a/edsteva/probes/utils.py +++ b/edsteva/probes/utils.py @@ -86,7 +86,7 @@ def prepare_measurement( concepts_sets: Union[str, Dict[str, str]], start_date: datetime, end_date: datetime, - mapping: List[Tuple[str]], + root_terminology: str, standard_terminologies: List[str], per_visit: bool, ): @@ -103,10 +103,9 @@ def prepare_measurement( required_columns=measurement_columns, df_name="measurement", ) - source_terminology = mapping[0][0] measurement = data.measurement[measurement_columns].rename( columns={ - "measurement_source_concept_id": "{}_concept_id".format(source_terminology), + "measurement_source_concept_id": "{}_concept_id".format(root_terminology), "measurement_datetime": "date", } ) @@ -115,16 +114,19 @@ def prepare_measurement( ) biology_relationship = biology_relationship[ - ["{}_concept_id".format(source_terminology)] + [ + "{}_{}".format(root_terminology, concept_col) + for concept_col in ["concept_id", "concept_code", "concept_name"] + ] + [ "{}_{}".format(terminology, concept_col) - for terminology in standard_terminologies + [source_terminology] - for concept_col in ["concept_code", "concept_name"] + for terminology in standard_terminologies + for concept_col in ["concept_code", "concept_name", "vocabulary"] ] ] biology_relationship = to(get_framework(measurement), biology_relationship) measurement = measurement.merge( - biology_relationship, on="{}_concept_id".format(source_terminology) + biology_relationship, on="{}_concept_id".format(root_terminology) ) if per_visit: @@ -922,7 +924,8 @@ def get_biology_relationship( ) .drop(columns="vocabulary_id") ) - biology_relationship = concept_by_terminology[mapping[0][0]] + root_terminology = mapping[0][0] + biology_relationship = concept_by_terminology[root_terminology] for source, target, relationship_id in mapping: relationship = concept_relationship.rename( columns={ diff --git a/edsteva/probes/visit.py b/edsteva/probes/visit.py index b57390b8..00dd9ccf 100644 --- a/edsteva/probes/visit.py +++ b/edsteva/probes/visit.py @@ -127,10 +127,10 @@ class VisitProbe(BaseProbe): _index: List[str] Variable from which data is grouped - **VALUE**: ``["care_site_level", "stay_type", "care_site_id"]`` + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "care_site_id"]`` """ - _index = ["care_site_level", "stay_type", "care_site_id"] + _index = ["care_site_level", "stay_type", "length_of_stay", "care_site_id"] def compute_process( self, From 232bec3e84e21450dd19c2f6b58fecdef4780192 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 14:17:16 +0100 Subject: [PATCH 007/127] hot fix --- edsteva/probes/biology.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index e1d69e78..5b63c493 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -189,15 +189,21 @@ def compute_process( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - self._index = self._index + [ - "{}_concept_code".format(terminology) - for terminology in standard_terminologies + [root_terminology] - ] - +[ - "{}_concept_name".format(terminology) - for terminology in standard_terminologies + [root_terminology] - ] - +["{}_vocabulary".format(terminology) for terminology in standard_terminologies] + print(self._index) + self._index.extend( + [ + "{}_concept_code".format(terminology) + for terminology in standard_terminologies + [root_terminology] + ] + + [ + "{}_concept_name".format(terminology) + for terminology in standard_terminologies + [root_terminology] + ] + + [ + "{}_vocabulary".format(terminology) + for terminology in standard_terminologies + ] + ) print(self._index) print(self.biology_relationship.head()) measurement = prepare_measurement( From 01d51c9ccd29e50cb32d2e0481835362b6a5dd54 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 14:34:23 +0100 Subject: [PATCH 008/127] Hot Fix --- edsteva/probes/base.py | 10 +++++----- edsteva/probes/biology.py | 18 ++++++++---------- edsteva/probes/biology_per_visit.py | 23 ++++++++++++++++------- edsteva/probes/condition_per_visit.py | 12 ++++++------ edsteva/probes/note_per_visit.py | 14 +++++++------- edsteva/probes/visit.py | 12 ++++++------ 6 files changed, 48 insertions(+), 41 deletions(-) diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index 64ff3d68..4336d7c7 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -164,11 +164,11 @@ def compute_process( self, data: Data, care_site_relationship: pd.DataFrame, - start_date: datetime = None, - end_date: datetime = None, - care_site_levels: List[str] = None, - stay_types: Union[str, Dict[str, str]] = None, - care_site_ids: List[int] = None, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], **kwargs, ) -> pd.DataFrame: """Process the data in order to obtain a predictor table""" diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index 5b63c493..eb0085db 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -122,10 +122,12 @@ def compute_process( self, data: Data, care_site_relationship: pd.DataFrame, - start_date: datetime = None, - end_date: datetime = None, - care_site_levels: List[str] = "Hospital", - stay_types: Union[str, Dict[str, str]] = None, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str] = None, concepts_sets: Union[str, Dict[str, str]] = { "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", "Plaquettes": "E4812|C0326|A1636|A0230|H6751|A1598|G7728|G7727|G7833|A2538|A2539|J4463", @@ -136,8 +138,6 @@ def compute_process( "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", "Bicarbonate": "A0422|H9622|C6408|F4161", }, - care_site_ids: List[int] = None, - care_site_short_names: List[str] = None, stay_durations: List[float] = [1], standard_terminologies: List[str] = ["ANABIO", "LOINC"], source_terminologies: Dict[str, str] = { @@ -189,7 +189,6 @@ def compute_process( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - print(self._index) self._index.extend( [ "{}_concept_code".format(terminology) @@ -204,8 +203,7 @@ def compute_process( for terminology in standard_terminologies ] ) - print(self._index) - print(self.biology_relationship.head()) + measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, @@ -240,7 +238,7 @@ def compute_process( hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] biology_predictor_by_level = {hospital_name: hospital_visit} - if not hospital_only(care_site_levels=care_site_levels): + if care_site_levels and not hospital_only(care_site_levels=care_site_levels): logger.info( "Biological measurements are only available at hospital level for now" ) diff --git a/edsteva/probes/biology_per_visit.py b/edsteva/probes/biology_per_visit.py index 88f40e2b..dfb3155a 100644 --- a/edsteva/probes/biology_per_visit.py +++ b/edsteva/probes/biology_per_visit.py @@ -112,13 +112,22 @@ def compute_process( self, data: Data, care_site_relationship: pd.DataFrame, - start_date: datetime = None, - end_date: datetime = None, - care_site_levels: List[str] = "Hospital", - stay_types: Union[str, Dict[str, str]] = None, - concepts_sets: Union[str, Dict[str, str]] = None, - care_site_ids: List[int] = None, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], care_site_short_names: List[str] = None, + concepts_sets: Union[str, Dict[str, str]] = { + "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", + "Plaquettes": "E4812|C0326|A1636|A0230|H6751|A1598|G7728|G7727|G7833|A2538|A2539|J4463", + "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", + "Potassium": "A1656|C8757|C8758|A2380|E2073|L5014|F2618|E2337|J1178|A3819|J1181", + "Sodium": "A1772|C8759|C8760|A0262|J1177|F8162|L5013|F2617|K9086|J1180 ", + "Chlorure": "B5597|F2359|A0079|J1179|F2619|J1182|F2358|A0079|J1179|F2619|J1182", + "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", + "Bicarbonate": "A0422|H9622|C6408|F4161", + }, stay_durations: List[float] = [1], standard_terminologies: List[str] = ["ANABIO", "LOINC"], source_terminologies: Dict[str, str] = { @@ -204,7 +213,7 @@ def compute_process( hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] biology_predictor_by_level = {hospital_name: hospital_visit} - if not hospital_only(care_site_levels=care_site_levels): + if care_site_levels and not hospital_only(care_site_levels=care_site_levels): logger.info( "Biological measurements are only available at hospital level for now" ) diff --git a/edsteva/probes/condition_per_visit.py b/edsteva/probes/condition_per_visit.py index 981c9f8c..c5cb1521 100644 --- a/edsteva/probes/condition_per_visit.py +++ b/edsteva/probes/condition_per_visit.py @@ -189,11 +189,13 @@ def compute_process( self, data: Data, care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str] = None, extra_data: Data = None, - start_date: datetime = None, - end_date: datetime = None, - care_site_levels: List[str] = None, - stay_types: Union[str, Dict[str, str]] = None, diag_types: Union[str, Dict[str, str]] = None, condition_types: Union[str, Dict[str, str]] = { "All": ".*", @@ -201,8 +203,6 @@ def compute_process( }, source_systems: List[str] = ["ORBIS"], stay_durations: List[float] = None, - care_site_ids: List[int] = None, - care_site_short_names: List[str] = None, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note_per_visit.py b/edsteva/probes/note_per_visit.py index de292718..67fc23a5 100644 --- a/edsteva/probes/note_per_visit.py +++ b/edsteva/probes/note_per_visit.py @@ -171,20 +171,20 @@ def compute_process( self, data: Data, care_site_relationship: pd.DataFrame, - extra_data: Data = None, - start_date: datetime = None, - end_date: datetime = None, - care_site_levels: List[str] = None, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], care_site_short_names: List[str] = None, - stay_types: Union[str, Dict[str, str]] = None, + extra_data: Data = None, + stay_durations: List[float] = None, note_types: Union[str, Dict[str, str]] = { "All": ".*", "Urgence": "urge", "Ordonnance": "ordo", "CRH": "crh", }, - stay_durations: List[float] = None, - care_site_ids: List[int] = None, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/visit.py b/edsteva/probes/visit.py index 00dd9ccf..2a66851f 100644 --- a/edsteva/probes/visit.py +++ b/edsteva/probes/visit.py @@ -136,13 +136,13 @@ def compute_process( self, data: Data, care_site_relationship: pd.DataFrame, - start_date: datetime = None, - end_date: datetime = None, - care_site_levels: List[str] = None, - stay_types: Union[str, Dict[str, str]] = None, - stay_durations: List[float] = None, - care_site_ids: List[int] = None, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], care_site_short_names: List[str] = None, + stay_durations: List[float] = None, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] From 36e2c306ee79579307657ff574a041317faf9c54 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 14:41:47 +0100 Subject: [PATCH 009/127] Hot Fix --- edsteva/probes/biology.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index eb0085db..f997193a 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -71,7 +71,7 @@ def compute_completeness(biology_predictor, standard_terminologies, root_termino on=partition_cols, ) - biology_predictor["c"] = biology_predictor["q_99_visit"].where( + biology_predictor["c"] = biology_predictor["q_99_measurement"].where( biology_predictor["q_99_measurement"] == 0, biology_predictor["n_measurement"] / biology_predictor["q_99_measurement"], ) From 84a95c40126c09f9b784e650d730926c4a290e35 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 15:54:23 +0100 Subject: [PATCH 010/127] remove root termino --- edsteva/probes/biology.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology.py index f997193a..dd997b91 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology.py @@ -32,11 +32,11 @@ def compute_completeness(biology_predictor, standard_terminologies, root_termino ] + [ "{}_concept_code".format(terminology) - for terminology in standard_terminologies + [root_terminology] + for terminology in standard_terminologies ] + [ "{}_concept_name".format(terminology) - for terminology in standard_terminologies + [root_terminology] + for terminology in standard_terminologies ] + [ "{}_vocabulary".format(terminology) @@ -192,11 +192,11 @@ def compute_process( self._index.extend( [ "{}_concept_code".format(terminology) - for terminology in standard_terminologies + [root_terminology] + for terminology in standard_terminologies ] + [ "{}_concept_name".format(terminology) - for terminology in standard_terminologies + [root_terminology] + for terminology in standard_terminologies ] + [ "{}_vocabulary".format(terminology) From 88e1f54555e5d9c997aae04fc889038b28f0c4f8 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 Feb 2023 16:03:03 +0100 Subject: [PATCH 011/127] Hot fix --- edsteva/probes/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py index 6909f8b2..2bfe0ce9 100644 --- a/edsteva/probes/utils.py +++ b/edsteva/probes/utils.py @@ -129,7 +129,7 @@ def prepare_measurement( biology_relationship, on="{}_concept_id".format(root_terminology) ) - if per_visit: + if not per_visit: measurement = filter_table_by_date( table=measurement, table_name="measurement", @@ -883,6 +883,10 @@ def get_biology_relationship( """ + logger.debug( + "Create biology relationship to link ANALYSES LABORATOIRE to ANABIO to LOINC" + ) + check_tables(data=data, required_tables=["concept", "concept_relationship"]) concept_columns = [ "concept_id", From 6ef2c337794685442a9706eb5764263034e6b9e6 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 21 Mar 2023 11:58:06 +0100 Subject: [PATCH 012/127] Full refacto --- edsteva/io/synthetic/care_site.py | 42 -- edsteva/io/synthetic/synthetic.py | 397 ++++++++++++++- edsteva/io/synthetic/utils.py | 161 ++++++ edsteva/io/synthetic/visit.py | 118 ----- edsteva/models/base.py | 16 +- .../rectangle_function/rectangle_function.py | 6 +- .../models/rectangle_function/viz_config.py | 196 ++++++++ edsteva/models/step_function/step_function.py | 6 +- edsteva/models/step_function/viz_config.py | 181 +++++++ edsteva/probes/__init__.py | 10 +- edsteva/probes/base.py | 35 +- edsteva/probes/biology/__init__.py | 0 edsteva/probes/{ => biology}/biology.py | 176 +++---- .../probes/{ => biology}/biology_per_visit.py | 0 edsteva/probes/biology/viz_config.py | 300 +++++++++++ edsteva/probes/condition/__init__.py | 0 .../{ => condition}/condition_per_visit.py | 271 +++++----- edsteva/probes/condition/viz_config.py | 356 +++++++++++++ edsteva/probes/note/__init__.py | 0 edsteva/probes/{ => note}/note_per_visit.py | 265 +++++----- edsteva/probes/note/viz_config.py | 327 ++++++++++++ edsteva/probes/utils.py | 35 +- edsteva/probes/visit/__init__.py | 0 edsteva/probes/{ => visit}/visit.py | 186 ++++--- edsteva/probes/visit/viz_config.py | 275 +++++++++++ edsteva/viz/dashboards/__init__.py | 4 +- edsteva/viz/dashboards/estimates_dashboard.py | 466 ------------------ .../estimates_dashboard/__init__.py | 0 .../estimates_dashboard.py | 243 +++++++++ .../predictor_dashboard/fitted_probe.py | 294 +++-------- .../dashboards/predictor_dashboard/probe.py | 246 +++------ .../dashboards/predictor_dashboard/wrapper.py | 68 ++- edsteva/viz/plots/__init__.py | 12 +- edsteva/viz/plots/estimates_densities.py | 149 ------ .../viz/plots/estimates_densities/__init__.py | 0 .../estimates_densities.py | 238 +++++++++ edsteva/viz/plots/normalized_probe.py | 315 ------------ .../viz/plots/normalized_probe/__init__.py | 0 .../normalized_probe/normalized_probe.py | 184 +++++++ edsteva/viz/plots/plot_probe/fitted_probe.py | 118 ++--- edsteva/viz/plots/plot_probe/probe.py | 74 +-- edsteva/viz/plots/plot_probe/wrapper.py | 71 ++- edsteva/viz/utils.py | 345 ++++++++++++- 43 files changed, 3931 insertions(+), 2255 deletions(-) delete mode 100644 edsteva/io/synthetic/care_site.py delete mode 100644 edsteva/io/synthetic/visit.py create mode 100644 edsteva/models/rectangle_function/viz_config.py create mode 100644 edsteva/models/step_function/viz_config.py create mode 100644 edsteva/probes/biology/__init__.py rename edsteva/probes/{ => biology}/biology.py (82%) rename edsteva/probes/{ => biology}/biology_per_visit.py (100%) create mode 100644 edsteva/probes/biology/viz_config.py create mode 100644 edsteva/probes/condition/__init__.py rename edsteva/probes/{ => condition}/condition_per_visit.py (94%) create mode 100644 edsteva/probes/condition/viz_config.py create mode 100644 edsteva/probes/note/__init__.py rename edsteva/probes/{ => note}/note_per_visit.py (84%) create mode 100644 edsteva/probes/note/viz_config.py create mode 100644 edsteva/probes/visit/__init__.py rename edsteva/probes/{ => visit}/visit.py (85%) create mode 100644 edsteva/probes/visit/viz_config.py delete mode 100644 edsteva/viz/dashboards/estimates_dashboard.py create mode 100644 edsteva/viz/dashboards/estimates_dashboard/__init__.py create mode 100644 edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py delete mode 100644 edsteva/viz/plots/estimates_densities.py create mode 100644 edsteva/viz/plots/estimates_densities/__init__.py create mode 100644 edsteva/viz/plots/estimates_densities/estimates_densities.py delete mode 100644 edsteva/viz/plots/normalized_probe.py create mode 100644 edsteva/viz/plots/normalized_probe/__init__.py create mode 100644 edsteva/viz/plots/normalized_probe/normalized_probe.py diff --git a/edsteva/io/synthetic/care_site.py b/edsteva/io/synthetic/care_site.py deleted file mode 100644 index 1c26f6eb..00000000 --- a/edsteva/io/synthetic/care_site.py +++ /dev/null @@ -1,42 +0,0 @@ -import pandas as pd - - -def split_name_id(string): - splitted = string.split("-") - - # Name - Type - ID - return dict( - care_site_short_name=string, - care_site_type_source_value=splitted[0], - care_site_id=splitted[1], - ) - - -def generate_care_site_tables(structure, parent=None, final=True): - cs = [] - fr = [] - for key, value in structure.items(): - this_cs = split_name_id(key) - cs.append(this_cs) - - if parent is not None: - this_fr = dict( - fact_id_1=this_cs["care_site_id"], - fact_id_2=parent["care_site_id"], - ) - fr.append(this_fr) - - if value is not None: - next_cs, next_fr = generate_care_site_tables( - value, parent=this_cs, final=False - ) - cs.extend(next_cs) - fr.extend(next_fr) - - if final: - cs = pd.DataFrame(cs) - fr = pd.DataFrame(fr) - fr["domain_concept_id_1"] = 57 - fr["relationship_concept_id"] = 46233688 - - return cs, fr diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 16267091..ecf77991 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -7,14 +7,14 @@ from databricks import koalas as ks from loguru import logger -from edsteva.io.synthetic.care_site import generate_care_site_tables -from edsteva.io.synthetic.utils import recursive_items -from edsteva.io.synthetic.visit import ( - generate_after_t0, - generate_after_t1, - generate_around_t0, - generate_around_t1, - generate_before_t0, +from edsteva.io.synthetic.utils import ( + generate_care_site_tables, + generate_events_after_t0, + generate_events_after_t1, + generate_events_around_t0, + generate_events_around_t1, + generate_events_before_t0, + recursive_items, ) DataFrame = Union[ks.DataFrame, pd.DataFrame] @@ -93,7 +93,7 @@ OTHER_DETAIL_COLUMNS = dict( visit_detail_type_source_value=[ - ("PASS", 0.4), + ("PASS UF", 0.4), ("SSR", 0.1), ("RUM", 0.5), ], @@ -114,6 +114,17 @@ ], ) +OTHER_MEASUREMENT_COLUMNS = dict( + row_status_source_value=[ + ("Validé", 0.9), + ("Discontinué", 0.02), + ("Disponible", 0.02), + ("Attendu", 0.02), + ("Confirmé", 0.02), + ("Initial", 0.02), + ], +) + def add_other_columns(table: pd.DataFrame, other_columns: Dict): for name, params in other_columns.items(): @@ -125,7 +136,7 @@ def add_other_columns(table: pd.DataFrame, other_columns: Dict): def generate_stays_step( t_start: int, t_end: int, - n_visit: int, + n_events: int, increase_time: int, increase_ratio: float, care_site_id: int, @@ -135,16 +146,16 @@ def generate_stays_step( params = dict( t_start=t_start, t_end=t_end, - n_visit=n_visit, + n_events=n_events, t0=t0, increase_ratio=increase_ratio, increase_time=increase_time, ) df = pd.concat( [ - generate_before_t0(**params), - generate_after_t0(**params), - generate_around_t0(**params), + generate_events_before_t0(**params), + generate_events_after_t0(**params), + generate_events_around_t0(**params), ] ).to_frame() df.columns = [date_col] @@ -158,7 +169,7 @@ def generate_stays_step( def generate_stays_rect( t_start: int, t_end: int, - n_visit: int, + n_events: int, increase_time: int, increase_ratio: float, care_site_id: int, @@ -171,26 +182,25 @@ def generate_stays_rect( t0_params = dict( t_start=t_start, t_end=t1 - increase_time / 2, - n_visit=n_visit, + n_events=n_events, t0=t0, increase_ratio=increase_ratio, increase_time=increase_time, ) - before_t0 = generate_before_t0(**t0_params) - around_t0 = generate_around_t0(**t0_params) + before_t0 = generate_events_before_t0(**t0_params) + around_t0 = generate_events_around_t0(**t0_params) # Raise n_visit to enforce a rectangle shape - t0_params["n_visit"] *= 5 - between_t0_t1 = generate_after_t0(**t0_params) + between_t0_t1 = generate_events_after_t0(**t0_params) t1_params = dict( t_start=t_start, t_end=t_end, - n_visit=n_visit, + n_events=n_events, t1=t1, increase_time=increase_time, increase_ratio=increase_ratio, ) - around_t1 = generate_around_t1(**t1_params) - after_t1 = generate_after_t1(**t1_params) + around_t1 = generate_events_around_t1(**t1_params) + after_t1 = generate_events_after_t1(**t1_params) df = pd.concat( [ @@ -251,7 +261,7 @@ def generate_note_step( def generate_note_rect( - visit_care_site, + visit_care_site: pd.DataFrame, note_type, care_site_id, date_col, @@ -293,6 +303,99 @@ def generate_note_rect( return note +def generate_bio_step( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + bio_date_col: str, + unit: str, + concept_code: str, +): + t0 = np.random.randint(t_start + increase_time, t_end - increase_time) + params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_events, + t0=t0, + increase_ratio=increase_ratio, + increase_time=increase_time, + ) + df = pd.concat( + [ + generate_events_before_t0(**params), + generate_events_after_t0(**params), + generate_events_around_t0(**params), + ] + ).to_frame() + df.columns = [bio_date_col] + df["unit_source_value"] = unit + df["measurement_source_concept_id"] = concept_code + df["t_0_min"] = t0 - increase_time / 2 + df["t_0_max"] = t0 + increase_time / 2 + + return df + + +def generate_bio_rect( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + bio_date_col: str, + unit: str, + concept_code: str, +): + t0 = np.random.randint( + t_start + increase_time, (t_end + t_start) / 2 - increase_time + ) + t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) + t0_params = dict( + t_start=t_start, + t_end=t1 - increase_time / 2, + n_events=n_events, + t0=t0, + increase_ratio=increase_ratio, + increase_time=increase_time, + ) + before_t0 = generate_events_before_t0(**t0_params) + around_t0 = generate_events_around_t0(**t0_params) + # Raise n_visit to enforce a rectangle shape + between_t0_t1 = generate_events_after_t0(**t0_params) + t1_params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_events, + t1=t1, + increase_time=increase_time, + increase_ratio=increase_ratio, + ) + around_t1 = generate_events_around_t1(**t1_params) + after_t1 = generate_events_after_t1(**t1_params) + + df = pd.concat( + [ + before_t0, + around_t0, + between_t0_t1, + around_t1, + after_t1, + ] + ).to_frame() + + df.columns = [bio_date_col] + df["unit_source_value"] = unit + df["measurement_source_concept_id"] = concept_code + df["t_0_min"] = t0 - increase_time / 2 + df["t_0_max"] = t0 + increase_time / 2 + df["t_1_min"] = t1 - increase_time / 2 + df["t_1_max"] = t1 + increase_time / 2 + + return df + + @dataclass class SyntheticData: module: str = "pandas" @@ -302,9 +405,12 @@ class SyntheticData: id_condition_col: str = "condition_occurrence_id" id_detail_col: str = "visit_detail_id" id_note_col: str = "note_id" + id_bio_col: str = "measurement_id" note_type_col: str = "note_class_source_value" date_col: str = "visit_start_datetime" + end_date_col: str = "visit_end_datetime" detail_date_col: str = "visit_detail_start_datetime" + bio_date_col: str = "measurement_datetime" t_min: datetime = datetime(2010, 1, 1) t_max: datetime = datetime(2020, 1, 1) other_visit_columns: Dict = field(default_factory=lambda: OTHER_VISIT_COLUMNS) @@ -313,6 +419,9 @@ class SyntheticData: default_factory=lambda: OTHER_CONDITION_COLUMNS ) other_note_columns: Dict = field(default_factory=lambda: OTHER_NOTE_COLUMNS) + other_measurement_columns: Dict = field( + default_factory=lambda: OTHER_MEASUREMENT_COLUMNS + ) seed: int = None mode: str = "step" @@ -325,6 +434,12 @@ def generate(self): visit_detail = self._generate_visit_detail(visit_occurrence) condition_occurrence = self._generate_condition_occurrence(visit_detail) note = self._generate_note(hospital_ids, visit_occurrence) + concept, concept_relationship, src_concept_name = self._generate_concept() + measurement = self._generate_measurement( + visit_occurrence=visit_occurrence, + hospital_ids=hospital_ids, + src_concept_name=src_concept_name, + ) self.care_site = care_site self.visit_occurrence = visit_occurrence @@ -332,6 +447,9 @@ def generate(self): self.fact_relationship = fact_relationship self.visit_detail = visit_detail self.note = note + self.concept = concept + self.concept_relationship = concept_relationship + self.measurement = measurement self.list_available_tables() @@ -353,7 +471,7 @@ def _generate_visit_occurrence(self, hospital_ids): for care_site_id in hospital_ids: t_start = t_min + np.random.randint(0, (t_max - t_min) / 20) t_end = t_max - np.random.randint(0, (t_max - t_min) / 20) - n_visit = np.random.normal(self.mean_visit, self.mean_visit / 5) + n_visits = np.random.normal(self.mean_visit, self.mean_visit / 5) increase_time = np.random.randint( (t_end - t_start) / 100, (t_end - t_start) / 10 ) @@ -361,7 +479,7 @@ def _generate_visit_occurrence(self, hospital_ids): params = dict( t_start=t_start, t_end=t_end, - n_visit=n_visit, + n_events=n_visits, increase_ratio=increase_ratio, increase_time=increase_time, care_site_id=care_site_id, @@ -378,6 +496,14 @@ def _generate_visit_occurrence(self, hospital_ids): visit_occurrence.append(vo_stays) visit_occurrence = pd.concat(visit_occurrence).reset_index(drop=True) + visit_occurrence[self.end_date_col] = visit_occurrence[ + self.date_col + ] + pd.to_timedelta( + pd.Series( + np.random.choice([None] * 50 + list(range(100)), len(visit_occurrence)) + ), + unit="days", + ) visit_occurrence[self.id_visit_col] = range(visit_occurrence.shape[0]) visit_occurrence[self.id_visit_source_col] = range(visit_occurrence.shape[0]) visit_occurrence = add_other_columns(visit_occurrence, self.other_visit_columns) @@ -458,7 +584,10 @@ def _generate_condition_occurrence(self, visit_detail): return condition_occurrence def _generate_note( - self, hospital_ids, visit_occurrence, note_types: Tuple[str] = ("CRH", "URG") + self, + hospital_ids, + visit_occurrence, + note_types: Tuple[str] = ("CRH", "URGENCE", "ORDONNANCE"), ): date_col = self.date_col id_visit_col = self.id_visit_col @@ -502,6 +631,220 @@ def _generate_note( return notes + def _generate_concept( + self, n_entity: int = 5, units: List[str] = ["g", "g/l", "mol", "s"] + ): + loinc_concept_id = [] + loinc_itm_concept_id = [] + loinc_concept_code = [] + loinc_itm_concept_code = [] + anabio_concept_id = [] + anabio_itm_concept_id = [] + anabio_concept_code = [] + anabio_itm_concept_code = [] + src_concept_code = [] + loinc_concept_name = [] + loinc_itm_concept_name = [] + anabio_concept_name = [] + anabio_itm_concept_name = [] + src_concept_name = [] + concept_id_1 = [] + concept_id_2 = [] + relationship_id = [] + for i in range(n_entity): + n_loinc = np.random.randint(1, 4) + loinc_codes = [str(i) + str(j) + "-0" for j in range(n_loinc)] + loinc_concept_code.extend(loinc_codes) + loinc_concept_id.extend(loinc_codes) + unit_values = np.random.choice(units, n_loinc) + for loinc_code in loinc_codes: + unit_value = np.random.choice(unit_values) + loinc_concept_name.append("LOINC_" + loinc_code + "_" + unit_value) + has_loinc_itm = np.random.random() >= 0.5 + if has_loinc_itm: + loinc_id_itm = loinc_code + "_ITM" + loinc_itm_concept_code.append(loinc_code) + loinc_itm_concept_id.append(loinc_id_itm) + loinc_itm_concept_name.append( + "LOINC_" + loinc_id_itm + "_" + unit_value + ) + n_anabio = np.random.randint(1, 3) + supp_code = "9" if len(str(i)) == 1 else "" + anabio_codes = [ + "A" + loinc_code.split("-")[0] + str(j) + supp_code + for j in range(n_anabio) + ] + anabio_concept_code.extend(anabio_codes) + anabio_concept_id.extend(anabio_codes) + for anabio_code in anabio_codes: + anabio_concept_name.append( + "ANABIO_" + anabio_code + "_" + unit_value + ) + has_anabio_itm = np.random.random() >= 0.5 + if has_anabio_itm: + anabio_id_itm = anabio_code + "_ITM" + anabio_itm_concept_code.append(anabio_code) + anabio_itm_concept_id.append(anabio_id_itm) + anabio_itm_concept_name.append( + "ANABIO_" + anabio_id_itm + "_" + unit_value + ) + concept_id_1.extend([anabio_id_itm, anabio_code]) + concept_id_2.extend([anabio_code, anabio_id_itm]) + relationship_id.extend(["Maps to", "Mapped from"]) + if has_loinc_itm: + concept_id_1.extend([anabio_id_itm, loinc_id_itm]) + concept_id_2.extend([loinc_id_itm, anabio_id_itm]) + relationship_id.extend(["Maps to", "Mapped from"]) + n_src = np.random.randint(1, 3) + src_codes = [ + loinc_code + "-" + anabio_code + "-" + str(j) + for j in range(n_src) + ] + src_concept_code.extend(src_codes) + src_concept_name.extend( + ["SRC_" + src_code + "_" + unit_value for src_code in src_codes] + ) + for src_code in src_codes: + concept_id_1.extend( + [src_code, src_code, anabio_code, loinc_code] + ) + concept_id_2.extend( + [anabio_code, loinc_code, src_code, src_code] + ) + relationship_id.extend( + ["Maps to", "Maps to", "Mapped from", "Mapped from"] + ) + + src_vocabulary_id = ["Analyses Laboratoire"] * len(src_concept_code) + glims_anabio_vocabulary_id = ["GLIMS XXX Anabio"] * len(anabio_concept_id) + itm_anabio_vocabulary_id = ["ITM - ANABIO"] * len(anabio_itm_concept_id) + glims_loinc_vocabulary_id = ["GLIMS XXX LOINC"] * len(loinc_concept_id) + itm_loinc_vocabulary_id = ["ITM - LOINC"] * len(loinc_itm_concept_id) + + concept_id = ( + src_concept_code + + anabio_concept_id + + anabio_itm_concept_id + + loinc_concept_id + + loinc_itm_concept_id + ) + concept_code = ( + src_concept_code + + anabio_concept_code + + anabio_itm_concept_code + + loinc_concept_code + + loinc_itm_concept_code + ) + concept_name = ( + src_concept_name + + anabio_concept_name + + anabio_itm_concept_name + + loinc_concept_name + + loinc_itm_concept_name + ) + vocabulary_id = ( + src_vocabulary_id + + glims_anabio_vocabulary_id + + itm_anabio_vocabulary_id + + glims_loinc_vocabulary_id + + itm_loinc_vocabulary_id + ) + + concept = pd.DataFrame( + { + "concept_id": concept_id, + "concept_code": concept_code, + "concept_name": concept_name, + "vocabulary_id": vocabulary_id, + } + ) + + concept_relationship = pd.DataFrame( + { + "concept_id_1": concept_id_1, + "concept_id_2": concept_id_2, + "relationship_id": relationship_id, + } + ) + + return concept, concept_relationship, src_concept_name + + def _generate_measurement( + self, + visit_occurrence: pd.DataFrame, + hospital_ids: List[int], + src_concept_name: List[str], + mean_measurement: int = 1000, + units: List[str] = ["g", "g/l", "mol", "s"], + ): + t_min = self.t_min.timestamp() + t_max = self.t_max.timestamp() + measurements = [] + for concept_name in src_concept_name: + concept_code = concept_name.split("_")[1] + unit = concept_name.split("_")[-1] + mean_value = (1 + units.index(unit)) * 2 + std_value = 1 + for care_site_id in hospital_ids: + t_start = t_min + np.random.randint(0, (t_max - t_min) / 20) + t_end = t_max - np.random.randint(0, (t_max - t_min) / 20) + valid_measurements = int( + np.random.normal(mean_measurement, mean_measurement / 5) + ) + missing_value = int(np.random.uniform(1, valid_measurements / 10)) + n_measurements = valid_measurements + missing_value + increase_time = np.random.randint( + (t_end - t_start) / 100, (t_end - t_start) / 10 + ) + increase_ratio = np.random.uniform(150, 200) + concept_code = concept_name.split("_")[1] + unit = concept_name.split("_")[-1] + mean_value = (1 + units.index(unit)) * 2 + std_value = 1 + params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_measurements, + increase_ratio=increase_ratio, + increase_time=increase_time, + bio_date_col=self.bio_date_col, + unit=unit, + concept_code=concept_code, + ) + if self.mode == "step": + measurement = generate_bio_step(**params) + elif self.mode == "rect": + measurement = generate_bio_rect(**params) + else: + raise ValueError( + f"Unknown mode {self.mode}, options are ('step', 'rect')" + ) + visit_care_site = visit_occurrence[ + visit_occurrence.care_site_id == care_site_id + ] + measurement[self.id_visit_col] = ( + visit_care_site[self.id_visit_col] + .sample(measurement.shape[0], replace=True) + .reset_index(drop=True) + ) + measurement["value_as_number"] = [None] * missing_value + list( + np.random.normal( + mean_value, std_value, measurement.shape[0] - missing_value + ) + ) + measurements.append(measurement) + + measurements = pd.concat(measurements).reset_index(drop=True) + measurements["value_source_value"] = ( + measurements["value_as_number"].astype(str) + + " " + + measurements["unit_source_value"].astype(str) + ) + measurements[self.id_bio_col] = range(measurements.shape[0]) + measurements = add_other_columns(measurements, self.other_measurement_columns) + + return measurements + def convert_to_koalas(self): if isinstance(self.care_site, ks.frame.DataFrame): print("Module is already Koalas!") diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index dd4af5a4..622587ad 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -1,3 +1,164 @@ +import numpy as np +import pandas as pd + + +def generate_events_before_t0( + t_start: int, + t_end: int, + n_events: int, + t0: int, + increase_time: int, + increase_ratio: float, +): + t0_before = t0 - increase_time / 2 + n_before = int( + (t0_before - t_start) + * n_events + / ((t0 - t_start) + increase_ratio * (t_end - t0)) + ) + + return pd.to_datetime( + pd.Series(np.random.randint(t_start, t0_before, n_before)), + unit="s", + ) + + +def generate_events_after_t0( + t_start: int, + t_end: int, + n_events: int, + t0: int, + increase_time: int, + increase_ratio: float, +): + t0_after = t0 + increase_time / 2 + n_after = int( + increase_ratio + * (t_end - t0_after) + * n_events + / ((t0 - t_start) + increase_ratio * (t_end - t0)) + ) + + return pd.to_datetime( + pd.Series(np.random.randint(t0_after, t_end, n_after)), + unit="s", + ) + + +def generate_events_around_t0( + t_start: int, + t_end: int, + n_events: int, + t0: int, + increase_time: int, + increase_ratio: float, +): + t0_before = t0 - increase_time / 2 + t0_after = t0 + increase_time / 2 + n_middle = int( + (increase_time / 2) + * (increase_ratio + 1) + * n_events + / ((t0 - t_start) + increase_ratio * (t_end - t0)) + ) + + return pd.to_datetime( + pd.Series( + np.random.triangular( + left=t0_before, right=t0_after, mode=t0_after, size=n_middle + ) + ), + unit="s", + ) + + +def generate_events_around_t1( + t_start: int, + t_end: int, + n_events: int, + t1: int, + increase_time: int, + increase_ratio: float, +): + t1_before = t1 - increase_time / 2 + t1_after = t1 + increase_time / 2 + n_middle = int( + (increase_time / 2) + * (increase_ratio + 1) + * n_events + / ((t1 - t_start) * increase_ratio + (t_end - t1)) + ) + + return pd.to_datetime( + pd.Series( + np.random.triangular( + left=t1_before, right=t1_after, mode=t1_before, size=n_middle + ) + ), + unit="s", + ) + + +def generate_events_after_t1( + t_start: int, + t_end: int, + n_events: int, + t1: int, + increase_time: int, + increase_ratio: float, +): + t1_after = t1 + increase_time / 2 + n_after = int( + (t_end - t1_after) * n_events / ((t1 - t_start) * increase_ratio + (t_end - t1)) + ) + + return pd.to_datetime( + pd.Series(np.random.randint(t1_after, t_end, n_after)), + unit="s", + ) + + +def split_name_id(string): + splitted = string.split("-") + + # Name - Type - ID + return dict( + care_site_short_name=string, + care_site_type_source_value=splitted[0], + care_site_id=splitted[1], + ) + + +def generate_care_site_tables(structure, parent=None, final=True): + cs = [] + fr = [] + for key, value in structure.items(): + this_cs = split_name_id(key) + cs.append(this_cs) + + if parent is not None: + this_fr = dict( + fact_id_1=this_cs["care_site_id"], + fact_id_2=parent["care_site_id"], + ) + fr.append(this_fr) + + if value is not None: + next_cs, next_fr = generate_care_site_tables( + value, parent=this_cs, final=False + ) + cs.extend(next_cs) + fr.extend(next_fr) + + if final: + cs = pd.DataFrame(cs) + fr = pd.DataFrame(fr) + fr["domain_concept_id_1"] = 57 + fr["relationship_concept_id"] = 46233688 + + return cs, fr + + def recursive_items(dictionary): for key, value in dictionary.items(): if type(value) is dict: diff --git a/edsteva/io/synthetic/visit.py b/edsteva/io/synthetic/visit.py deleted file mode 100644 index 1f0ab483..00000000 --- a/edsteva/io/synthetic/visit.py +++ /dev/null @@ -1,118 +0,0 @@ -import numpy as np -import pandas as pd - - -def generate_before_t0( - t_start: int, - t_end: int, - n_visit: int, - t0: int, - increase_time: int, - increase_ratio: float, -): - t0_before = t0 - increase_time / 2 - n_before = int( - (t0_before - t_start) - * n_visit - / ((t0 - t_start) + increase_ratio * (t_end - t0)) - ) - - return pd.to_datetime( - pd.Series(np.random.randint(t_start, t0_before, n_before)), - unit="s", - ) - - -def generate_after_t0( - t_start: int, - t_end: int, - n_visit: int, - t0: int, - increase_time: int, - increase_ratio: float, -): - t0_after = t0 + increase_time / 2 - n_after = int( - increase_ratio - * (t_end - t0_after) - * n_visit - / ((t0 - t_start) + increase_ratio * (t_end - t0)) - ) - - return pd.to_datetime( - pd.Series(np.random.randint(t0_after, t_end, n_after)), - unit="s", - ) - - -def generate_around_t0( - t_start: int, - t_end: int, - n_visit: int, - t0: int, - increase_time: int, - increase_ratio: float, -): - t0_before = t0 - increase_time / 2 - t0_after = t0 + increase_time / 2 - n_middle = int( - (increase_time / 2) - * (increase_ratio + 1) - * n_visit - / ((t0 - t_start) + increase_ratio * (t_end - t0)) - ) - - return pd.to_datetime( - pd.Series( - np.random.triangular( - left=t0_before, right=t0_after, mode=t0_after, size=n_middle - ) - ), - unit="s", - ) - - -def generate_around_t1( - t_start: int, - t_end: int, - n_visit: int, - t1: int, - increase_time: int, - increase_ratio: float, -): - t1_before = t1 - increase_time / 2 - t1_after = t1 + increase_time / 2 - n_middle = int( - (increase_time / 2) - * (increase_ratio + 1) - * n_visit - / ((t1 - t_start) * increase_ratio + (t_end - t1)) - ) - - return pd.to_datetime( - pd.Series( - np.random.triangular( - left=t1_before, right=t1_after, mode=t1_before, size=n_middle - ) - ), - unit="s", - ) - - -def generate_after_t1( - t_start: int, - t_end: int, - n_visit: int, - t1: int, - increase_time: int, - increase_ratio: float, -): - t1_after = t1 + increase_time / 2 - n_after = int( - (t_end - t1_after) * n_visit / ((t1 - t_start) * increase_ratio + (t_end - t1)) - ) - - return pd.to_datetime( - pd.Series(np.random.randint(t1_after, t_end, n_after)), - unit="s", - ) diff --git a/edsteva/models/base.py b/edsteva/models/base.py index bfdaa44a..95f383c0 100644 --- a/edsteva/models/base.py +++ b/edsteva/models/base.py @@ -178,13 +178,13 @@ def predict( step_function_model.predict(visit).head() ``` - | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | c_fit | - | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | :---- | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg_Hospit' | 2019-05-01 | 233.0 | 0.841 | 0.758 | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'All' | 2021-04-01 | 393.0 | 0.640 | 0.758 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Urg_Hospit' | 2011-03-01 | 204.0 | 0.497 | 0 | - | Pôle/DMU | 8312027648 | Care site 2 | 'All' | 2018-08-01 | 22.0 | 0.784 | 0.874 | - | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.974 | 0.912 | + | care_site_level | care_site_id | stay_type | date | n_visit | c | c_fit | + | :----------------------- | :----------- | :----------- | :--------- | :------ | :---- | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | 'Urg_Hospit' | 2019-05-01 | 233.0 | 0.841 | 0.758 | + | Unité Fonctionnelle (UF) | 8312056386 | 'All' | 2021-04-01 | 393.0 | 0.640 | 0.758 | + | Pôle/DMU | 8312027648 | 'Urg_Hospit' | 2011-03-01 | 204.0 | 0.497 | 0 | + | Pôle/DMU | 8312027648 | 'All' | 2018-08-01 | 22.0 | 0.784 | 0.874 | + | Hôpital | 8312022130 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.974 | 0.912 | """ @@ -251,6 +251,8 @@ def save(self, path: str = None, name: str = None) -> bool: if not path: if name: self.name = name + else: + self.name = type(self).__name__ path = CACHE_DIR / "edsteva" / "models" / f"{self.name.lower()}.pickle" self.path = path diff --git a/edsteva/models/rectangle_function/rectangle_function.py b/edsteva/models/rectangle_function/rectangle_function.py index 6ded5b3f..09bbde85 100644 --- a/edsteva/models/rectangle_function/rectangle_function.py +++ b/edsteva/models/rectangle_function/rectangle_function.py @@ -6,6 +6,8 @@ from edsteva.models import BaseModel from edsteva.models.rectangle_function import algos +from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config + class RectangleFunction(BaseModel): r"""It models the completeness predictor $c(t)$ as a rectangle function $f_{t_0, c_0, t_1}(t)$ as follow: @@ -48,6 +50,8 @@ class RectangleFunction(BaseModel): """ _coefs = ["t_0", "c_0", "t_1"] + get_predictor_dashboard_config = get_predictor_dashboard_config + get_estimates_dashboard_config = get_estimates_dashboard_config def fit_process( self, @@ -112,7 +116,7 @@ def predict_process( ) prediction["c_hat"] = prediction["c_0"].where(rect_mask, 0) - return prediction.drop(columns=self._coefs + self._metrics) + return prediction.drop(columns=self._metrics) def default_metrics( self, diff --git a/edsteva/models/rectangle_function/viz_config.py b/edsteva/models/rectangle_function/viz_config.py new file mode 100644 index 00000000..b9b1dcd8 --- /dev/null +++ b/edsteva/models/rectangle_function/viz_config.py @@ -0,0 +1,196 @@ +import altair as alt + +from edsteva.utils.typing import DataFrame +from edsteva.viz.utils import round_up, scale_it + + +def get_estimates_dashboard_config(self, predictor: DataFrame): + c_0_min_slider = alt.binding_range( + min=0, + max=round_up(predictor.c_0.max(), 2), + step=scale_it(predictor.c_0.max()) / 100, + name="c₀ min: ", + ) + c_0_min_selection = alt.selection_single( + name="c_0_min", + fields=["c_0_min"], + bind=c_0_min_slider, + init={"c_0_min": 0}, + ) + c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min + t_0_slider = alt.binding( + input="t_0", + name="t₀ max: ", + ) + t_0_selection = alt.selection_single( + name="t_0", + fields=["t_0"], + bind=t_0_slider, + init={"t_0": predictor.t_0.max()}, + ) + t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 + t_1_slider = alt.binding( + input="t_1", + name="t₁ min: ", + ) + t_1_selection = alt.selection_single( + name="t_1", + fields=["t_1"], + bind=t_1_slider, + init={"t_1": predictor.t_1.min()}, + ) + t_1_min_filter = alt.datum.t_1 >= t_1_selection.t_1 + error_max_slider = alt.binding_range( + min=0, + max=round_up(predictor.error.max(), 2), + step=scale_it(predictor.error.max()) / 100, + name="error max: ", + ) + error_max_selection = alt.selection_single( + name="error_max", + fields=["error_max"], + bind=error_max_slider, + init={"error_max": round_up(predictor.error.max(), 2)}, + ) + error_max_filter = alt.datum.error <= error_max_selection.error_max + estimates_dashboard_config = dict( + estimates_selections=[ + c_0_min_selection, + t_0_selection, + t_1_selection, + error_max_selection, + ], + estimates_filters=[ + c_0_min_filter, + t_0_min_filter, + t_1_min_filter, + error_max_filter, + ], + probe_line=dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="Predictor line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="top", + ), + ) + ) + ), + model_line=dict( + mark_line=dict( + color="black", + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y="model:Q", + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="Model line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="top", + ), + ), + color=alt.Color(), + ), + ), + extra_horizontal_bar_charts=[ + dict( + x=alt.X( + "min(c_0):Q", + title="Min(c₀)", + ), + tooltip=alt.Tooltip("min(c_0):Q", format=".2"), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, + ), + dict( + x=alt.X( + "max(error):Q", + title="Max(error)", + ), + tooltip=alt.Tooltip("max(error):Q", format=".2"), + sort={ + "field": "error", + "op": "max", + "order": "descending", + }, + ), + ], + extra_vertical_bar_charts=[], + ) + return estimates_dashboard_config + + +def get_predictor_dashboard_config(self): + predictor_dashboard_config = dict( + probe_line=dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="left", + ), + ) + ) + ), + model_line=dict( + mark_line=dict( + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y=alt.Y("min(c_hat)"), + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="left", + ), + ), + ), + ), + extra_horizontal_bar_charts=[ + dict( + x=alt.X( + "min(c_0):Q", + title="Minimum c₀", + axis=alt.Axis(format=".2"), + ), + tooltip=alt.Tooltip( + "min(c_0):Q", + format=".2", + ), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, + ), + ], + extra_vertical_bar_charts=[], + ) + return predictor_dashboard_config diff --git a/edsteva/models/step_function/step_function.py b/edsteva/models/step_function/step_function.py index b5614187..ae55c258 100644 --- a/edsteva/models/step_function/step_function.py +++ b/edsteva/models/step_function/step_function.py @@ -6,6 +6,8 @@ from edsteva.models import BaseModel from edsteva.models.step_function import algos +from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config + class StepFunction(BaseModel): r"""It models the completeness predictor $c(t)$ as a step function $f_{t_0, c_0}(t)$ as follow: @@ -47,6 +49,8 @@ class StepFunction(BaseModel): """ _coefs = ["t_0", "c_0"] + get_predictor_dashboard_config = get_predictor_dashboard_config + get_estimates_dashboard_config = get_estimates_dashboard_config def fit_process( self, @@ -113,7 +117,7 @@ def predict_process( prediction["c_hat"] = prediction["c_0"].where( prediction["date"] >= prediction["t_0"], 0 ) - return prediction.drop(columns=self._coefs + self._metrics) + return prediction.drop(columns=self._metrics) def default_metrics( self, diff --git a/edsteva/models/step_function/viz_config.py b/edsteva/models/step_function/viz_config.py new file mode 100644 index 00000000..b14a8751 --- /dev/null +++ b/edsteva/models/step_function/viz_config.py @@ -0,0 +1,181 @@ +import altair as alt + +from edsteva.utils.typing import DataFrame +from edsteva.viz.utils import round_up, scale_it + + +def get_estimates_dashboard_config(self, predictor: DataFrame): + c_0_min_slider = alt.binding_range( + min=0, + max=round_up(predictor.c_0.max(), 2), + step=scale_it(predictor.c_0.max()) / 100, + name="c₀ min: ", + ) + c_0_min_selection = alt.selection_single( + name="c_0_min", + fields=["c_0_min"], + bind=c_0_min_slider, + init={"c_0_min": 0}, + ) + c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min + t_0_slider = alt.binding( + input="t_0", + name="t₀ max: ", + ) + t_0_selection = alt.selection_single( + name="t_0", + fields=["t_0"], + bind=t_0_slider, + init={"t_0": predictor.t_0.astype(str).max()}, + ) + t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 + error_max_slider = alt.binding_range( + min=0, + max=round_up(predictor.error.max(), 2), + step=scale_it(predictor.error.max()) / 100, + name="error max: ", + ) + error_max_selection = alt.selection_single( + name="error_max", + fields=["error_max"], + bind=error_max_slider, + init={"error_max": round_up(predictor.error.max(), 2)}, + ) + error_max_filter = alt.datum.error <= error_max_selection.error_max + estimates_dashboard_config = dict( + estimates_selections=[c_0_min_selection, t_0_selection, error_max_selection], + estimates_filters=[c_0_min_filter, t_0_min_filter, error_max_filter], + probe_line=dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="Predictor line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="top", + ), + ) + ) + ), + model_line=dict( + mark_line=dict( + color="black", + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y="model:Q", + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="Model line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="top", + ), + ), + ), + ), + extra_horizontal_bar_charts=[ + dict( + x=alt.X( + "min(c_0):Q", + title="Min(c₀)", + ), + tooltip=alt.Tooltip("min(c_0):Q", format=".2"), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, + ), + dict( + x=alt.X( + "max(error):Q", + title="Max(error)", + ), + tooltip=alt.Tooltip("max(error):Q", format=".2"), + sort={ + "field": "error", + "op": "max", + "order": "descending", + }, + ), + ], + extra_vertical_bar_charts=[], + ) + return estimates_dashboard_config + + +def get_predictor_dashboard_config(self): + predictor_dashboard_config = dict( + probe_line=dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="left", + ), + ) + ) + ), + model_line=dict( + mark_line=dict( + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y=alt.Y("min(c_hat)"), + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="left", + ), + ), + ), + aggregates=[ + dict( + max_t0="max(t_0)", + groupby=["value", "date"], + ), + ], + filters=[dict(filter=alt.datum.t_0 == alt.datum.max_t0)], + ), + extra_horizontal_bar_charts=[ + dict( + x=alt.X( + "min(c_0):Q", + title="Minimum c₀", + axis=alt.Axis(format=".2"), + ), + tooltip=alt.Tooltip( + "min(c_0):Q", + format=".2", + ), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, + ), + ], + extra_vertical_bar_charts=[], + ) + return predictor_dashboard_config diff --git a/edsteva/probes/__init__.py b/edsteva/probes/__init__.py index 90b3103f..6c57ad54 100644 --- a/edsteva/probes/__init__.py +++ b/edsteva/probes/__init__.py @@ -1,6 +1,6 @@ from edsteva.probes.base import BaseProbe -from edsteva.probes.biology import BiologyProbe -from edsteva.probes.biology_per_visit import BiologyPerVisitProbe -from edsteva.probes.condition_per_visit import ConditionPerVisitProbe -from edsteva.probes.note_per_visit import NotePerVisitProbe -from edsteva.probes.visit import VisitProbe +from edsteva.probes.biology.biology import BiologyProbe +from edsteva.probes.biology.biology_per_visit import BiologyPerVisitProbe +from edsteva.probes.condition.condition_per_visit import ConditionPerVisitProbe +from edsteva.probes.note.note_per_visit import NotePerVisitProbe +from edsteva.probes.visit.visit import VisitProbe diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index 4336d7c7..f0661b99 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -14,7 +14,7 @@ save_object, ) from edsteva.utils.checks import check_columns, check_tables -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame class BaseProbe(metaclass=ABCMeta): @@ -42,7 +42,7 @@ def __init__(self): self.is_valid_probe() self.name = self._get_name() - _schema = ["care_site_id", "care_site_level", "stay_type", "date", "c"] + _schema = ["care_site_level", "care_site_id", "date", "c"] def validate_input_data(self, data: Data) -> None: """Raises an error if the input data is not valid @@ -138,14 +138,14 @@ def impute_missing_date( .to_dict("index") ) - partition_cols = self._index + ["care_site_short_name"] + partition_cols = self._index.copy() groups = [] for partition, group in self.predictor.groupby(partition_cols): group = date_index.merge(group, on="date", how="left") # Filter on each care site timeframe. if only_impute_per_care_site: - care_site_short_name = partition[-1] + care_site_short_name = partition[-1] # TO DO ds_min = site_to_min_max_ds[care_site_short_name]["min"] ds_max = site_to_min_max_ds[care_site_short_name]["max"] group = group.loc[(group["date"] >= ds_min) & (group["date"] <= ds_max)] @@ -312,6 +312,31 @@ def filter_care_site( ) logger.info("Use probe.reset_predictor() to get back the initial predictor") + def add_names_columns(self, df: DataFrame): + if hasattr(self, "care_site_relationship"): + df = df.merge( + self.care_site_relationship[ + ["care_site_id", "care_site_short_name"] + ].drop_duplicates(), + on="care_site_id", + ) + if hasattr(self, "biology_relationship"): + concept_codes = [ + "{}_concept_code".format(terminology) + for terminology in self._standard_terminologies + ] + concept_names = [ + "{}_concept_name".format(terminology) + for terminology in self._standard_terminologies + ] + df = df.merge( + self.biology_relationship[ + concept_codes + concept_names + ].drop_duplicates(), + on=concept_codes, + ) + return df.reset_index(drop=True) + def load(self, path=None) -> None: """Loads a Probe from local @@ -368,6 +393,8 @@ def save(self, path: str = None, name: str = None) -> bool: if not path: if name: self.name = name + else: + self.name = type(self).__name__ path = self._get_path() self.path = path diff --git a/edsteva/probes/biology/__init__.py b/edsteva/probes/biology/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/probes/biology.py b/edsteva/probes/biology/biology.py similarity index 82% rename from edsteva/probes/biology.py rename to edsteva/probes/biology/biology.py index dd997b91..85817514 100644 --- a/edsteva/probes/biology.py +++ b/edsteva/probes/biology/biology.py @@ -18,78 +18,7 @@ from edsteva.utils.framework import is_koalas, to from edsteva.utils.typing import Data - -def compute_completeness(biology_predictor, standard_terminologies, root_terminology): - partition_cols = ( - [ - "care_site_level", - "care_site_id", - "care_site_short_name", - "stay_type", - "concepts_set", - "length_of_stay", - "date", - ] - + [ - "{}_concept_code".format(terminology) - for terminology in standard_terminologies - ] - + [ - "{}_concept_name".format(terminology) - for terminology in standard_terminologies - ] - + [ - "{}_vocabulary".format(terminology) - for terminology in standard_terminologies - ] - ) - n_measurement = ( - biology_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"measurement_id": "nunique"}) - .rename(columns={"measurement_id": "n_measurement"}) - ) - - n_measurement = to("pandas", n_measurement) - - partition_cols = list(set(partition_cols) - {"date"}) - q_99_measurement = ( - n_measurement.groupby( - partition_cols, - as_index=False, - dropna=False, - )[["n_measurement"]] - .quantile(q=0.99) - .rename(columns={"n_measurement": "q_99_measurement"}) - ) - - biology_predictor = n_measurement.merge( - q_99_measurement, - on=partition_cols, - ) - - biology_predictor["c"] = biology_predictor["q_99_measurement"].where( - biology_predictor["q_99_measurement"] == 0, - biology_predictor["n_measurement"] / biology_predictor["q_99_measurement"], - ) - biology_predictor = biology_predictor.drop(columns="q_99_measurement") - - return biology_predictor - - -def get_hospital_measurements(measurement, visit_occurrence, care_site): - hospital_measurement = measurement.merge( - visit_occurrence.drop(columns="date"), on="visit_occurrence_id" - ) - hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") - - if is_koalas(hospital_measurement): - hospital_measurement.spark.cache() - - return hospital_measurement +from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config class BiologyProbe(BaseProbe): @@ -107,16 +36,36 @@ class BiologyProbe(BaseProbe): _index: List[str] Variable from which data is grouped + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` + _extra_predictor: str + Variable from which data is grouped + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` """ + get_predictor_dashboard_config = get_predictor_dashboard_config + get_estimates_dashboard_config = get_estimates_dashboard_config - _index = [ - "care_site_level", - "concepts_set", - "stay_type", - "length_of_stay", - "care_site_id", - ] + def __init__(self, standard_terminologies: List[str] = ["ANABIO", "LOINC"]): + self._standard_terminologies = standard_terminologies + self._index = [ + "care_site_level", + "concepts_set", + "stay_type", + "length_of_stay", + "care_site_id", + ] + [ + "{}_concept_code".format(terminology) + for terminology in standard_terminologies + ] + self._metrics = ["c", "n_measurement"] def compute_process( self, @@ -139,7 +88,6 @@ def compute_process( "Bicarbonate": "A0422|H9622|C6408|F4161", }, stay_durations: List[float] = [1], - standard_terminologies: List[str] = ["ANABIO", "LOINC"], source_terminologies: Dict[str, str] = { "ANALYSES_LABORATOIRE": r"Analyses Laboratoire", "GLIMS_ANABIO": r"GLIMS.{0,20}Anabio", @@ -179,7 +127,7 @@ def compute_process( data=data, required_tables=["measurement", "concept", "concept_relationship"], ) - + standard_terminologies = self._standard_terminologies biology_relationship = get_biology_relationship( data=data, standard_terminologies=standard_terminologies, @@ -189,20 +137,6 @@ def compute_process( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - self._index.extend( - [ - "{}_concept_code".format(terminology) - for terminology in standard_terminologies - ] - + [ - "{}_concept_name".format(terminology) - for terminology in standard_terminologies - ] - + [ - "{}_vocabulary".format(terminology) - for terminology in standard_terminologies - ] - ) measurement = prepare_measurement( data=data, @@ -249,6 +183,54 @@ def compute_process( care_site_levels=care_site_levels, ) - return compute_completeness( - biology_predictor, standard_terminologies, root_terminology + return compute_completeness(self, biology_predictor) + + +def compute_completeness(self, biology_predictor): + partition_cols = self._index.copy() + ["date"] + n_measurement = ( + biology_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, ) + .agg({"measurement_id": "nunique"}) + .rename(columns={"measurement_id": "n_measurement"}) + ) + + n_measurement = to("pandas", n_measurement) + partition_cols = list(set(partition_cols) - {"date"}) + q_99_measurement = ( + n_measurement.groupby( + partition_cols, + as_index=False, + dropna=False, + )[["n_measurement"]] + .agg({"n_measurement": "max"}) + .rename(columns={"n_measurement": "max_n_measurement"}) + ) + + biology_predictor = n_measurement.merge( + q_99_measurement, + on=partition_cols, + ) + + biology_predictor["c"] = biology_predictor["max_n_measurement"].where( + biology_predictor["max_n_measurement"] == 0, + biology_predictor["n_measurement"] / biology_predictor["max_n_measurement"], + ) + biology_predictor = biology_predictor.drop(columns="max_n_measurement") + + return biology_predictor + + +def get_hospital_measurements(measurement, visit_occurrence, care_site): + hospital_measurement = measurement.merge( + visit_occurrence.drop(columns="date"), on="visit_occurrence_id" + ) + hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") + + if is_koalas(hospital_measurement): + hospital_measurement.spark.cache() + + return hospital_measurement diff --git a/edsteva/probes/biology_per_visit.py b/edsteva/probes/biology/biology_per_visit.py similarity index 100% rename from edsteva/probes/biology_per_visit.py rename to edsteva/probes/biology/biology_per_visit.py diff --git a/edsteva/probes/biology/viz_config.py b/edsteva/probes/biology/viz_config.py new file mode 100644 index 00000000..6d07ae7b --- /dev/null +++ b/edsteva/probes/biology/viz_config.py @@ -0,0 +1,300 @@ +import altair as alt + + +def get_estimates_dashboard_config(self): + estimates_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + error_line=dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, + ] + + [ + { + "title": "{} concept".format(terminology), + "field": "{}_concept_name".format(terminology), + "sort": "-x", + } + for terminology in self._standard_terminologies.copy() + ], + x=[ + dict( + x=alt.X( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + ) + + return estimates_dashboard_config + + +def get_predictor_dashboard_config(self): + predictor_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict( + completeness=alt.datum.sum_measurement / alt.datum.max_measurement + ), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "type": "nominal", + "sort": "-x", + }, + { + "title": "Concepts-set", + "field": "concepts_set", + "type": "nominal", + "sort": "-x", + }, + ] + + [ + { + "title": "{} concept".format(terminology), + "field": "{}_concept_name".format(terminology), + "sort": "-x", + } + for terminology in self._standard_terminologies.copy() + ], + x=[ + dict( + x=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ) + ], + ), + ) + return predictor_dashboard_config diff --git a/edsteva/probes/condition/__init__.py b/edsteva/probes/condition/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/probes/condition_per_visit.py b/edsteva/probes/condition/condition_per_visit.py similarity index 94% rename from edsteva/probes/condition_per_visit.py rename to edsteva/probes/condition/condition_per_visit.py index c5cb1521..b2dd68a2 100644 --- a/edsteva/probes/condition_per_visit.py +++ b/edsteva/probes/condition/condition_per_visit.py @@ -20,141 +20,7 @@ from edsteva.utils.framework import is_koalas, to from edsteva.utils.typing import Data - -def compute_completeness(condition_predictor): - partition_cols = [ - "care_site_level", - "care_site_id", - "care_site_short_name", - "stay_type", - "diag_type", - "condition_type", - "source_system", - "length_of_stay", - "date", - ] - n_visit_with_condition = ( - condition_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"has_condition": "count"}) - .rename(columns={"has_condition": "n_visit_with_condition"}) - ) - partition_cols = list( - set(partition_cols) - {"diag_type", "condition_type", "source_system"} - ) - - n_visit = ( - condition_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"visit_id": "nunique"}) - .rename(columns={"visit_id": "n_visit"}) - ) - - condition_predictor = n_visit_with_condition.merge( - n_visit, - on=partition_cols, - ) - - condition_predictor = to("pandas", condition_predictor) - - condition_predictor["c"] = condition_predictor["n_visit"].where( - condition_predictor["n_visit"] == 0, - condition_predictor["n_visit_with_condition"] / condition_predictor["n_visit"], - ) - condition_predictor = condition_predictor.drop(columns=["n_visit_with_condition"]) - - return condition_predictor - - -def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): - condition_hospital = condition_occurrence.drop_duplicates( - ["visit_occurrence_id", "diag_type", "condition_type", "source_system"] - ) - condition_hospital["has_condition"] = True - hospital_visit = visit_occurrence.merge( - condition_hospital, - on="visit_occurrence_id", - how="left", - ) - hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) - hospital_visit = hospital_visit.merge(care_site, on="care_site_id") - - if is_koalas(hospital_visit): - hospital_visit.spark.cache() - - return hospital_visit - - -def get_uf_visit( - condition_occurrence, - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, -): # pragma: no cover - condition_uf = ( - condition_occurrence[ - [ - "visit_detail_id", - "diag_type", - "condition_type", - "source_system", - ] - ] - .drop_duplicates() - .rename(columns={"visit_detail_id": "visit_id"}) - ) - condition_uf["has_condition"] = True - - visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "stay_type"]], - on="visit_occurrence_id", - ) - visit_detail = visit_detail.merge( - condition_uf, - on="visit_id", - how="left", - ) - visit_detail = visit_detail.drop(columns=["visit_occurrence_id"]) - - uf_visit = convert_table_to_uf( - table=visit_detail, - table_name="visit_detail", - care_site_relationship=care_site_relationship, - ) - uf_visit = uf_visit.merge(care_site, on="care_site_id") - - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] - - if is_koalas(uf_visit): - uf_visit.spark.cache() - - return uf_visit - - -def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover - pole_visit = convert_table_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), - table_name="uf_visit", - care_site_relationship=care_site_relationship, - ) - - pole_visit = pole_visit.merge(care_site, on="care_site_id") - - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] - - if is_koalas(pole_visit): - pole_visit.spark.cache() - - return pole_visit +from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config class ConditionPerVisitProbe(BaseProbe): @@ -184,6 +50,9 @@ class ConditionPerVisitProbe(BaseProbe): "source_system", "care_site_id", ] + _metrics = ["c", "n_visit", "n_visit_with_condition"] + get_predictor_dashboard_config = get_predictor_dashboard_config + get_estimates_dashboard_config = get_estimates_dashboard_config def compute_process( self, @@ -197,10 +66,7 @@ def compute_process( care_site_short_names: List[str] = None, extra_data: Data = None, diag_types: Union[str, Dict[str, str]] = None, - condition_types: Union[str, Dict[str, str]] = { - "All": ".*", - "Cancer": "C", - }, + condition_types: Union[str, Dict[str, str]] = {"All": ".*"}, source_systems: List[str] = ["ORBIS"], stay_durations: List[float] = None, ): @@ -296,4 +162,129 @@ def compute_process( care_site_levels=care_site_levels, ) - return compute_completeness(condition_predictor) + return compute_completeness(self, condition_predictor) + + +def compute_completeness(self, condition_predictor): + partition_cols = self._index.copy() + ["date"] + n_visit_with_condition = ( + condition_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"has_condition": "count"}) + .rename(columns={"has_condition": "n_visit_with_condition"}) + ) + partition_cols = list( + set(partition_cols) - {"diag_type", "condition_type", "source_system"} + ) + + n_visit = ( + condition_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"visit_id": "nunique"}) + .rename(columns={"visit_id": "n_visit"}) + ) + + condition_predictor = n_visit_with_condition.merge( + n_visit, + on=partition_cols, + ) + + condition_predictor = to("pandas", condition_predictor) + + condition_predictor["c"] = condition_predictor["n_visit"].where( + condition_predictor["n_visit"] == 0, + condition_predictor["n_visit_with_condition"] / condition_predictor["n_visit"], + ) + + return condition_predictor + + +def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): + condition_hospital = condition_occurrence.drop_duplicates( + ["visit_occurrence_id", "diag_type", "condition_type", "source_system"] + ) + condition_hospital["has_condition"] = True + hospital_visit = visit_occurrence.merge( + condition_hospital, + on="visit_occurrence_id", + how="left", + ) + hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) + hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + + if is_koalas(hospital_visit): + hospital_visit.spark.cache() + + return hospital_visit + + +def get_uf_visit( + condition_occurrence, + visit_occurrence, + visit_detail, + care_site, + care_site_relationship, +): # pragma: no cover + condition_uf = ( + condition_occurrence[ + [ + "visit_detail_id", + "diag_type", + "condition_type", + "source_system", + ] + ] + .drop_duplicates() + .rename(columns={"visit_detail_id": "visit_id"}) + ) + condition_uf["has_condition"] = True + + visit_detail = visit_detail.merge( + visit_occurrence[["visit_occurrence_id", "stay_type"]], + on="visit_occurrence_id", + ) + visit_detail = visit_detail.merge( + condition_uf, + on="visit_id", + how="left", + ) + visit_detail = visit_detail.drop(columns=["visit_occurrence_id"]) + + uf_visit = convert_table_to_uf( + table=visit_detail, + table_name="visit_detail", + care_site_relationship=care_site_relationship, + ) + uf_visit = uf_visit.merge(care_site, on="care_site_id") + + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] + + if is_koalas(uf_visit): + uf_visit.spark.cache() + + return uf_visit + + +def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover + pole_visit = convert_table_to_pole( + table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="uf_visit", + care_site_relationship=care_site_relationship, + ) + + pole_visit = pole_visit.merge(care_site, on="care_site_id") + + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] + + if is_koalas(pole_visit): + pole_visit.spark.cache() + + return pole_visit diff --git a/edsteva/probes/condition/viz_config.py b/edsteva/probes/condition/viz_config.py new file mode 100644 index 00000000..e003d4d1 --- /dev/null +++ b/edsteva/probes/condition/viz_config.py @@ -0,0 +1,356 @@ +import altair as alt + + +def get_estimates_dashboard_config(self): + estimates_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_condition="sum(n_visit_with_condition)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict( + normalized_c=( + alt.datum.sum_visit_with_condition / alt.datum.sum_visit + ) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + error_line=dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Source system", + "field": "source_system", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Condition type", + "field": "condition_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Diag type", + "field": "diag_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit_with_condition):Q", + title="Number of administrative records with condition", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_condition):Q", + format=",", + ), + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.Y( + "sum(n_visit_with_condition):Q", + title="Number of administrative records with condition", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_condition):Q", + format=",", + ), + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + ), + dict( + x=alt.Y( + "sum(n_visit):Q", + title="Number of administrative", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + ) + + return estimates_dashboard_config + + +def get_predictor_dashboard_config(self): + predictor_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_condition="sum(n_visit_with_condition)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict( + completeness=alt.datum.sum_visit_with_condition + / alt.datum.sum_visit + ), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Source system", + "field": "source_system", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Condition type", + "field": "condition_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Diag type", + "field": "diag_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit_with_condition):Q", + title="Number of administrative records with condition", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_condition):Q", + format=",", + ), + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "type": "nominal", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.Y( + "sum(n_visit_with_condition):Q", + title="Number of administrative records with condition", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_condition):Q", + format=",", + ), + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + ), + dict( + x=alt.Y( + "sum(n_visit):Q", + title="Number of administrative", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + ) + return predictor_dashboard_config diff --git a/edsteva/probes/note/__init__.py b/edsteva/probes/note/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/probes/note_per_visit.py b/edsteva/probes/note/note_per_visit.py similarity index 84% rename from edsteva/probes/note_per_visit.py rename to edsteva/probes/note/note_per_visit.py index 67fc23a5..3fdf4bed 100644 --- a/edsteva/probes/note_per_visit.py +++ b/edsteva/probes/note/note_per_visit.py @@ -2,6 +2,7 @@ from typing import Dict, List, Union import pandas as pd +from loguru import logger from edsteva.probes.base import BaseProbe from edsteva.probes.utils import ( @@ -20,17 +21,141 @@ from edsteva.utils.framework import is_koalas, to from edsteva.utils.typing import Data +from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config -def compute_completeness(note_predictor): - partition_cols = [ + +class NotePerVisitProbe(BaseProbe): + r""" + The ``NoteProbe`` computes $c(t)$ the availability of clinical documents linked to patients' administrative visit: + + $$ + c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. + + Attributes + ---------- + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id"]`` + """ + + _index = [ "care_site_level", - "care_site_id", - "care_site_short_name", "stay_type", - "note_type", "length_of_stay", - "date", + "note_type", + "care_site_id", ] + _metrics = ["c", "n_visit", "n_visit_with_note"] + get_predictor_dashboard_config = get_predictor_dashboard_config + get_estimates_dashboard_config = get_estimates_dashboard_config + + def compute_process( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str] = None, + extra_data: Data = None, + stay_durations: List[float] = None, + note_types: Union[str, Dict[str, str]] = { + "Urgence": "urge", + "Ordonnance": "ordo", + "CRH": "crh", + }, + ): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + extra_data : Data, optional + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + note_types : Union[str, Dict[str, str]], optional + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + """ + check_tables(data=data, required_tables=["note"]) + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + care_site = prepare_care_site( + data, + care_site_ids, + care_site_short_names, + care_site_relationship, + ) + + note = prepare_note(data, note_types) + + hospital_visit = get_hospital_visit(note, visit_occurrence, care_site) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + note_predictor_by_level = {hospital_name: hospital_visit} + + # UF selection + if not hospital_only(care_site_levels=care_site_levels): + if extra_data: + visit_detail = prepare_visit_detail(data, start_date, end_date) + + uf_visit = get_uf_visit( + extra_data, + note, + visit_occurrence, + visit_detail, + care_site, + care_site_relationship, + ) + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + note_predictor_by_level[uf_name] = uf_visit + + pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + note_predictor_by_level[pole_name] = pole_visit + else: + logger.info("Note data are only available at hospital level") + care_site_levels = ["Hospital"] + + # Concatenate all predictors + note_predictor = concatenate_predictor_by_level( + predictor_by_level=note_predictor_by_level, + care_site_levels=care_site_levels, + ) + + if is_koalas(note_predictor): + note_predictor.spark.cache() + + return compute_completeness(self, note_predictor) + + +def compute_completeness(self, note_predictor): + partition_cols = self._index.copy() + ["date"] + n_visit_with_note = ( note_predictor.groupby( partition_cols, @@ -63,7 +188,6 @@ def compute_completeness(note_predictor): note_predictor["n_visit"] == 0, note_predictor["n_visit_with_note"] / note_predictor["n_visit"], ) - note_predictor = note_predictor.drop(columns=["n_visit_with_note"]) return note_predictor @@ -139,130 +263,3 @@ def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no c pole_visit.spark.cache() return pole_visit - - -class NotePerVisitProbe(BaseProbe): - r""" - The ``NoteProbe`` computes $c(t)$ the availability of clinical documents linked to patients' administrative visit: - - $$ - c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. - - Attributes - ---------- - _index: List[str] - Variable from which data is grouped - - **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id"]`` - """ - - _index = [ - "care_site_level", - "stay_type", - "length_of_stay", - "note_type", - "care_site_id", - ] - - def compute_process( - self, - data: Data, - care_site_relationship: pd.DataFrame, - start_date: datetime, - end_date: datetime, - care_site_levels: List[str], - stay_types: Union[str, Dict[str, str]], - care_site_ids: List[int], - care_site_short_names: List[str] = None, - extra_data: Data = None, - stay_durations: List[float] = None, - note_types: Union[str, Dict[str, str]] = { - "All": ".*", - "Urgence": "urge", - "Ordonnance": "ordo", - "CRH": "crh", - }, - ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - extra_data : Data, optional - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - note_types : Union[str, Dict[str, str]], optional - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - """ - check_tables(data=data, required_tables=["note"]) - - visit_occurrence = prepare_visit_occurrence( - data=data, - start_date=start_date, - end_date=end_date, - stay_types=stay_types, - stay_durations=stay_durations, - ) - - care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, - ) - - note = prepare_note(data, note_types) - - hospital_visit = get_hospital_visit(note, visit_occurrence, care_site) - hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] - note_predictor_by_level = {hospital_name: hospital_visit} - - # UF selection - if not hospital_only(care_site_levels=care_site_levels) and extra_data: - visit_detail = prepare_visit_detail(data, start_date, end_date) - - uf_visit = get_uf_visit( - extra_data, - note, - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, - ) - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - note_predictor_by_level[uf_name] = uf_visit - - pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - note_predictor_by_level[pole_name] = pole_visit - - # Concatenate all predictors - note_predictor = concatenate_predictor_by_level( - predictor_by_level=note_predictor_by_level, - care_site_levels=care_site_levels, - ) - - note_predictor = note_predictor.drop_duplicates( - ["visit_id", "care_site_id", "stay_type", "note_type", "date"] - ) - - if is_koalas(note_predictor): - note_predictor.spark.cache() - - return compute_completeness(note_predictor) diff --git a/edsteva/probes/note/viz_config.py b/edsteva/probes/note/viz_config.py new file mode 100644 index 00000000..7e3651fd --- /dev/null +++ b/edsteva/probes/note/viz_config.py @@ -0,0 +1,327 @@ +import altair as alt + + +def get_estimates_dashboard_config(self): + estimates_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_note="sum(n_visit_with_note)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_visit_with_note / alt.datum.sum_visit) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + error_line=dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Note type", + "field": "note_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit_with_note):Q", + title="Number of administrative records with discharge summary", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_note):Q", + format=",", + ), + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_visit_with_note):Q", + title="Number of administrative records with discharge summary", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_note):Q", + format=",", + ), + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + ), + dict( + x=alt.X( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + ) + + return estimates_dashboard_config + + +def get_predictor_dashboard_config(self): + predictor_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_note="sum(n_visit_with_note)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_visit_with_note / alt.datum.sum_visit), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Note type", + "field": "note_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit_with_note):Q", + title="Number of administrative records with discharge summary", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_note):Q", + format=",", + ), + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "type": "nominal", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_visit_with_note):Q", + title="Number of administrative records with discharge summary", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_note):Q", + format=",", + ), + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + ), + dict( + x=alt.X( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + ) + return predictor_dashboard_config diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py index 2bfe0ce9..0e56309a 100644 --- a/edsteva/probes/utils.py +++ b/edsteva/probes/utils.py @@ -10,7 +10,7 @@ from loguru import logger from edsteva.utils.checks import check_columns, check_tables -from edsteva.utils.framework import get_framework, to +from edsteva.utils.framework import get_framework, is_koalas, to from edsteva.utils.typing import Data, DataFrame CARE_SITE_LEVEL_NAMES = { @@ -125,6 +125,8 @@ def prepare_measurement( ] ] biology_relationship = to(get_framework(measurement), biology_relationship) + if is_koalas(biology_relationship): + biology_relationship = biology_relationship.spark.hint("broadcast") measurement = measurement.merge( biology_relationship, on="{}_concept_id".format(root_terminology) ) @@ -352,7 +354,7 @@ def prepare_visit_detail( data: Data, start_date: datetime, end_date: datetime, - visit_detail_type: str = "PASS", + visit_detail_type: str = "PASS UF", ): visit_detail = data.visit_detail[ [ @@ -810,16 +812,13 @@ def delete_object(obj, filename: str): def add_length_of_stay(visit_occurrence: DataFrame, stay_durations: List[float]): if stay_durations: - visit_occurrence["length_of_stay"] = ( + visit_occurrence["length"] = ( visit_occurrence["visit_end_datetime"] - visit_occurrence["visit_start_datetime"] ) / np.timedelta64(timedelta(days=1)) - # All stays - all_stays = visit_occurrence.copy() - all_stays["length_of_stay"] = "All lengths" - # Incomplete stays + visit_occurrence["length_of_stay"] = "Unknown" visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( visit_occurrence["visit_end_datetime"].isna(), "Incomplete stay", @@ -829,11 +828,11 @@ def add_length_of_stay(visit_occurrence: DataFrame, stay_durations: List[float]) min_duration = stay_durations[0] max_duration = stay_durations[-1] visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - (visit_occurrence["length_of_stay"] <= min_duration), + (visit_occurrence["length"] <= min_duration), "<= {} days".format(min_duration), ) visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - (visit_occurrence["length_of_stay"] >= max_duration), + (visit_occurrence["length"] >= max_duration), ">= {} days".format(max_duration), ) n_duration = len(stay_durations) @@ -843,13 +842,11 @@ def add_length_of_stay(visit_occurrence: DataFrame, stay_durations: List[float]) visit_occurrence["length_of_stay"] = visit_occurrence[ "length_of_stay" ].mask( - (visit_occurrence["length_of_stay"] >= min) - & (visit_occurrence["length_of_stay"] < max), + (visit_occurrence["length"] >= min) + & (visit_occurrence["length"] < max), "{} days - {} days".format(min, max), ) - visit_occurrence = get_framework(visit_occurrence).concat( - [all_stays, visit_occurrence] - ) + visit_occurrence = visit_occurrence.drop(columns="length") else: visit_occurrence["length_of_stay"] = "All lengths" @@ -911,10 +908,10 @@ def get_biology_relationship( required_columns=concept_relationship_columns, df_name="concept_relationship", ) - concept = data.concept[concept_columns].to_pandas() - concept_relationship = data.concept_relationship[ - concept_relationship_columns - ].to_pandas() + concept = to("pandas", data.concept[concept_columns]) + concept_relationship = to( + "pandas", data.concept_relationship[concept_relationship_columns] + ) concept_by_terminology = {} for terminology, regex in source_terminologies.items(): concept_by_terminology[terminology] = ( @@ -1216,7 +1213,7 @@ def concatenate_predictor_by_level( if level in predictor_by_level: predictors_to_concat.append(predictor_by_level[level]) selected_levels.append(level) - elif level in CARE_SITE_LEVEL_NAMES: + elif level in CARE_SITE_LEVEL_NAMES.keys(): predictors_to_concat.append( predictor_by_level[CARE_SITE_LEVEL_NAMES[level]] ) diff --git a/edsteva/probes/visit/__init__.py b/edsteva/probes/visit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/probes/visit.py b/edsteva/probes/visit/visit.py similarity index 85% rename from edsteva/probes/visit.py rename to edsteva/probes/visit/visit.py index 2a66851f..0e5ccfa3 100644 --- a/edsteva/probes/visit.py +++ b/edsteva/probes/visit/visit.py @@ -8,7 +8,6 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, convert_table_to_pole, - convert_table_to_uf, hospital_only, prepare_care_site, prepare_visit_detail, @@ -17,99 +16,7 @@ from edsteva.utils.framework import is_koalas, to from edsteva.utils.typing import Data - -def compute_completeness(visit_predictor): - partition_cols = [ - "care_site_level", - "care_site_id", - "care_site_short_name", - "stay_type", - "length_of_stay", - "date", - ] - n_visit = ( - visit_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"visit_id": "nunique"}) - .rename(columns={"visit_id": "n_visit"}) - ) - - n_visit = to("pandas", n_visit) - - partition_cols = list(set(partition_cols) - {"date"}) - q_99_visit = ( - n_visit.groupby( - partition_cols, - as_index=False, - dropna=False, - )[["n_visit"]] - .quantile(q=0.99) - .rename(columns={"n_visit": "q_99_visit"}) - ) - - visit_predictor = n_visit.merge( - q_99_visit, - on=partition_cols, - ) - - visit_predictor["c"] = visit_predictor["q_99_visit"].where( - visit_predictor["q_99_visit"] == 0, - visit_predictor["n_visit"] / visit_predictor["q_99_visit"], - ) - visit_predictor = visit_predictor.drop(columns="q_99_visit") - - return visit_predictor - - -def get_hospital_visit(visit_occurrence, care_site): - hospital_visit = visit_occurrence.rename( - columns={"visit_occurrence_id": "visit_id"} - ) - hospital_visit = hospital_visit.merge(care_site, on="care_site_id") - - if is_koalas(hospital_visit): - hospital_visit.spark.cache() - - return hospital_visit - - -def get_uf_visit(visit_occurrence, visit_detail, care_site, care_site_relationship): - visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "stay_type"]], - on="visit_occurrence_id", - ).drop(columns="visit_occurrence_id") - - uf_visit = convert_table_to_uf( - table=visit_detail, - table_name="visit_detail", - care_site_relationship=care_site_relationship, - ) - uf_visit = uf_visit.merge(care_site, on="care_site_id") - uf_visit = uf_visit[uf_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"]] - if is_koalas(uf_visit): - uf_visit.spark.cache() - - return uf_visit - - -def get_pole_visit(uf_visit, care_site, care_site_relationship): - pole_visit = convert_table_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), - table_name="uf_visit", - care_site_relationship=care_site_relationship, - ) - - pole_visit = pole_visit.merge(care_site, on="care_site_id") - pole_visit = pole_visit[ - pole_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Pole"] - ] - if is_koalas(pole_visit): - pole_visit.spark.cache() - - return pole_visit +from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config class VisitProbe(BaseProbe): @@ -131,6 +38,9 @@ class VisitProbe(BaseProbe): """ _index = ["care_site_level", "stay_type", "length_of_stay", "care_site_id"] + _metrics = ["c", "n_visit"] + get_predictor_dashboard_config = get_predictor_dashboard_config + get_estimates_dashboard_config = get_estimates_dashboard_config def compute_process( self, @@ -213,4 +123,90 @@ def compute_process( care_site_levels=care_site_levels, ) - return compute_completeness(visit_predictor) + return compute_completeness(self, visit_predictor) + + +def compute_completeness(self, visit_predictor): + partition_cols = self._index.copy() + ["date"] + + n_visit = ( + visit_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"visit_id": "nunique"}) + .rename(columns={"visit_id": "n_visit"}) + ) + + n_visit = to("pandas", n_visit) + + partition_cols = list(set(partition_cols) - {"date"}) + q_99_visit = ( + n_visit.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"n_visit": "max"}) + .rename(columns={"n_visit": "max_n_visit"}) + ) + + visit_predictor = n_visit.merge( + q_99_visit, + on=partition_cols, + ) + + visit_predictor["c"] = visit_predictor["max_n_visit"].where( + visit_predictor["max_n_visit"] == 0, + visit_predictor["n_visit"] / visit_predictor["max_n_visit"], + ) + visit_predictor = visit_predictor.drop(columns="max_n_visit") + + return visit_predictor + + +def get_hospital_visit(visit_occurrence, care_site): + hospital_visit = visit_occurrence.rename( + columns={"visit_occurrence_id": "visit_id"} + ) + + hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + hospital_visit = hospital_visit[ + hospital_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Hospital"] + ] + if is_koalas(hospital_visit): + hospital_visit.spark.cache() + + return hospital_visit + + +def get_uf_visit(visit_occurrence, visit_detail, care_site, care_site_relationship): + visit_detail = visit_detail.merge( + visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], + on="visit_occurrence_id", + ).drop(columns="visit_occurrence_id") + + uf_visit = visit_detail.merge(care_site, on="care_site_id") + uf_visit = uf_visit[uf_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"]] + if is_koalas(uf_visit): + uf_visit.spark.cache() + + return uf_visit + + +def get_pole_visit(uf_visit, care_site, care_site_relationship): + pole_visit = convert_table_to_pole( + table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="uf_visit", + care_site_relationship=care_site_relationship, + ) + + pole_visit = pole_visit.merge(care_site, on="care_site_id") + pole_visit = pole_visit[ + pole_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Pole"] + ] + if is_koalas(pole_visit): + pole_visit.spark.cache() + + return pole_visit diff --git a/edsteva/probes/visit/viz_config.py b/edsteva/probes/visit/viz_config.py new file mode 100644 index 00000000..fd5ee79f --- /dev/null +++ b/edsteva/probes/visit/viz_config.py @@ -0,0 +1,275 @@ +import altair as alt + + +def get_estimates_dashboard_config(self): + estimates_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + max_visit="max(sum_visit)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_visit", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + error_line=dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + ) + + return estimates_dashboard_config + + +def get_predictor_dashboard_config(self): + predictor_dashboard_config = dict( + chart_style=dict( + labelFontSize=12, + titleFontSize=13, + ), + main_chart=dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + max_visit="max(sum_visit)", + groupby=["value"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_visit / alt.datum.max_visit), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_visit", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), + ), + time_line=dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), + ), + vertical_bar_charts=dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], + ), + horizontal_bar_charts=dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "type": "nominal", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ) + ], + ), + ) + return predictor_dashboard_config diff --git a/edsteva/viz/dashboards/__init__.py b/edsteva/viz/dashboards/__init__.py index f47542d7..6e356aea 100644 --- a/edsteva/viz/dashboards/__init__.py +++ b/edsteva/viz/dashboards/__init__.py @@ -1,4 +1,6 @@ -from edsteva.viz.dashboards.estimates_dashboard import estimates_dashboard +from edsteva.viz.dashboards.estimates_dashboard.estimates_dashboard import ( + estimates_dashboard, +) from edsteva.viz.dashboards.predictor_dashboard.wrapper import predictor_dashboard __all__ = [ diff --git a/edsteva/viz/dashboards/estimates_dashboard.py b/edsteva/viz/dashboards/estimates_dashboard.py deleted file mode 100644 index 2d48c042..00000000 --- a/edsteva/viz/dashboards/estimates_dashboard.py +++ /dev/null @@ -1,466 +0,0 @@ -import uuid -from functools import reduce - -import altair as alt -from IPython.display import HTML, display - -from edsteva.models.base import BaseModel -from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import CARE_SITE_LEVEL_NAMES -from edsteva.viz.utils import filter_predictor, round_it, save_html, scale_it - - -def estimates_dashboard( - probe: BaseProbe, - fitted_model: BaseModel, - care_site_level: str = CARE_SITE_LEVEL_NAMES["Hospital"], - save_path: str = None, - labelFontSize: float = 12, - titleFontSize: float = 13, -): - r"""Displays an interactive chart with: - - - On the top, the aggregated normalized completeness predictor $\frac{c(\Delta t)}{c_0}$ over normalized time $\Delta t = t - t_0$. It represents the overall deviation from the Model. - - On the bottom, interactive filters including all the columns in the [Probe][probe] (such as time, care site, number of visits...etc.) and all the estimates (coefficients and metrics) in the [Model][model]. - - Is is possible to save the chart in HTML with the "save_path" optional input. - - Parameters - ---------- - probe : BaseProbe - Class describing the completeness predictor $c(t)$ - fitted_model : BaseModel - Model fitted to the probe - care_site_level : str, optional - **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` - save_path : str, optional - Folder path where to save the chart in HTML format. - - **EXAMPLE**: `"my_folder/my_file.html"` - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. - """ - alt.data_transformers.disable_max_rows() - - predictor = probe.predictor.copy() - estimates = fitted_model.estimates.copy() - predictor = predictor.merge(estimates, on=probe._index) - - def month_diff(x, y): - end = x.dt.to_period("M").view(dtype="int64") - start = y.dt.to_period("M").view(dtype="int64") - return end - start - - predictor["date"] = predictor["date"].astype("datetime64[ns]") - predictor["t_0"] = predictor["t_0"].astype("datetime64[ns]") - predictor["normalized_date"] = month_diff(predictor["date"], predictor["t_0"]) - predictor["t_0"] = predictor["t_0"].astype(str) - predictor["normalized_date"] = predictor["normalized_date"].astype(int) - - predictor["normalized_c"] = predictor["c"].mask( - (predictor["normalized_date"] >= 0) & (predictor["c_0"] == 0), 1 - ) - predictor["normalized_c"] = predictor["normalized_c"].mask( - (predictor["normalized_date"] >= 0) & (predictor["c_0"] > 0), - predictor["c"] / predictor["c_0"], - ) - - predictor["legend_error_band"] = "Standard deviation" - predictor["legend_model"] = type(fitted_model).__name__ - - predictor["model"] = predictor["c_0"].where(predictor["normalized_date"] < 0, 1) - predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) - - predictor = filter_predictor( - predictor=predictor, - care_site_level=care_site_level, - ) - - # RectangleModel - if fitted_model.name == "RectangleFunction": - predictor = predictor[predictor.date < predictor.t_1] - - index = list(set(probe._index).difference(["care_site_level", "care_site_id"])) - time = "date" - _predictor = "c" - - c_0_min_slider = alt.binding_range( - min=0, - max=round_it(predictor.c_0.max(), 2), - step=scale_it(predictor.c_0.max()) / 100, - name="c₀ min: ", - ) - c_0_min_selection = alt.selection_single( - name="c_0_min", - fields=["c_0_min"], - bind=c_0_min_slider, - init={"c_0_min": 0}, - ) - t_0_slider = alt.binding( - input="t_0", - name="t₀ max: ", - ) - t_0_selection = alt.selection_single( - name="t_0", - fields=["t_0"], - bind=t_0_slider, - init={"t_0": predictor.t_0.astype(str).max()}, - ) - if fitted_model.name == "RectangleFunction": - t_1_slider = alt.binding( - input="t_1", - name="t₁ min: ", - ) - t_1_selection = alt.selection_single( - name="t_1", - fields=["t_1"], - bind=t_1_slider, - init={"t_1": predictor.t_1.astype(str).min()}, - ) - - error_max_slider = alt.binding_range( - min=0, - max=round_it(predictor.error.max(), 2), - step=scale_it(predictor.error.max()) / 100, - name="error max: ", - ) - error_max_selection = alt.selection_single( - name="error_max", - fields=["error_max"], - bind=error_max_slider, - init={"error_max": round_it(predictor.error.max(), 2)}, - ) - - care_site_selection = alt.selection_multi(fields=["care_site_short_name"]) - care_site_color = alt.condition( - care_site_selection, - alt.Color( - "care_site_short_name:N", - legend=None, - sort={"field": "c_0", "op": "min", "order": "descending"}, - ), - alt.value("lightgray"), - ) - - base_chart = alt.Chart(predictor).transform_joinaggregate( - mean_c_0="mean(c_0)", - mean_error="mean(error)", - groupby=["care_site_short_name"] + index, - ) - - time_selection = alt.selection_interval(encodings=["x"]) - time_line = ( - base_chart.mark_line() - .encode( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "mean(c):Q", - title="c(Δt)", - ), - ) - .add_selection(time_selection) - ).properties(width=800, height=50) - - predictor_hist = ( - base_chart.mark_bar() - .encode( - y=alt.Y( - "care_site_short_name:N", - title="Care site short name", - sort="-x", - ), - color=care_site_color, - ) - .add_selection(care_site_selection) - .transform_filter(alt.datum.mean_c_0 >= c_0_min_selection.c_0_min) - .transform_filter(alt.datum.mean_error <= error_max_selection.error_max) - .transform_filter(alt.datum.t_0 <= t_0_selection.t_0) - ).properties(width=300) - - # RectangleModel - if fitted_model.name == "RectangleFunction": - predictor_hist = predictor_hist.transform_filter( - alt.datum.t_1 >= t_1_selection.t_1 - ) - - c_0_hist = predictor_hist.encode( - x=alt.X( - "min(mean_c_0):Q", - title="Min(c₀)", - ), - tooltip=alt.Tooltip("min(mean_c_0):Q", format=".2"), - ) - error_hist = predictor_hist.encode( - x=alt.X( - "max(mean_error):Q", - title="Max(error)", - ), - tooltip=alt.Tooltip("max(mean_error):Q", format=".2"), - ) - - index_variables_hists = [] - index_variables_selections = [] - for index_variable in index: - index_variable_selection = alt.selection_multi(fields=[index_variable]) - index_variables_selections.append(index_variable_selection) - - index_variable_color = alt.condition( - index_variable_selection, - alt.Color( - "{}:N".format(index_variable), - legend=None, - sort={"field": "c_0", "op": "min", "order": "descending"}, - ), - alt.value("lightgray"), - ) - index_variable_hist = ( - base_chart.mark_bar() - .encode( - y=alt.Y( - "mean(c):Q", - title="c", - ), - x=alt.X( - "{}:N".format(index_variable), - title=index_variable, - sort="-y", - ), - tooltip=alt.Tooltip("mean(c):Q", format=".2"), - color=index_variable_color, - ) - .add_selection(index_variable_selection) - .transform_filter(care_site_selection) - .transform_filter(alt.datum.mean_c_0 >= c_0_min_selection.c_0_min) - .transform_filter(alt.datum.t_0 <= t_0_selection.t_0) - .transform_filter(alt.datum.mean_error <= error_max_selection.error_max) - ).properties(title="Average completeness per {}".format(index_variable)) - - # RectangleModel - if fitted_model.name == "RectangleFunction": - index_variable_hist = index_variable_hist.transform_filter( - alt.datum.t_1 >= t_1_selection.t_1 - ) - - index_variables_hists.append(index_variable_hist) - - extra_predictors = predictor.columns.difference( - index - + [time] - + [_predictor] - + [ - "care_site_short_name", - "care_site_id", - "model", - "legend_error_band", - "legend_model", - "normalized_date", - "normalized_c", - "c_0", - "t_0", - "t_1", - "error", - ] - ) - extra_predictors_hists = [] - - for extra_predictor in extra_predictors: - extra_predictor_hist = predictor_hist.encode( - x=alt.X( - "sum({}):Q".format(extra_predictor), - title="{}".format(extra_predictor), - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip("sum({}):Q".format(extra_predictor), format=","), - ).properties(title="Total {} per care site".format(extra_predictor)) - extra_predictors_hists.append(extra_predictor_hist) - - index.append("care_site_short_name") - index_selection = alt.selection_single( - fields=["index"], - bind=alt.binding_radio(name="Group by: ", options=index), - init={"index": "stay_type"}, - ) - - probe_line = ( - base_chart.transform_fold(index, as_=["index", "value"]) - .encode( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - color=alt.Color( - "value:N", - sort={"field": "c_0", "op": "min", "order": "descending"}, - title=None, - ), - ) - .transform_filter(alt.datum.mean_c_0 >= c_0_min_selection.c_0_min) - .transform_filter(alt.datum.mean_error <= error_max_selection.error_max) - .transform_filter(alt.datum.t_0 <= t_0_selection.t_0) - .transform_filter(care_site_selection) - .transform_filter(index_selection) - ).properties(width=900, height=300) - # RectangleModel - if fitted_model.name == "RectangleFunction": - probe_line = probe_line.transform_filter(alt.datum.t_1 >= t_1_selection.t_1) - - mean_line = probe_line.mark_line().encode( - y=alt.Y( - "mean(normalized_c):Q", - ) - ) - error_line = probe_line.mark_errorband(extent="stdev").encode( - y=alt.Y( - "normalized_c:Q", - title="c(Δt) / c₀", - ), - stroke=alt.Stroke( - "legend_error_band", - title="Error band", - legend=alt.Legend(symbolType="square", orient="top"), - ), - ) - model_line = ( - alt.Chart(predictor) - .mark_line(color="black", interpolate="step-after", strokeDash=[5, 5]) - .encode( - x=alt.X( - "normalized_date:Q", - scale=alt.Scale(nice=False), - ), - y="model:Q", - strokeWidth=alt.StrokeWidth( - "legend_model", - title="Model line", - legend=alt.Legend(orient="top", symbolDash=[2, 2]), - ), - ) - ) - - top_chart = mean_line + error_line + model_line - - top_chart = top_chart.add_selection(index_selection).transform_filter( - time_selection - ) - - for index_variable_selection in index_variables_selections: - top_chart = top_chart.transform_filter(index_variable_selection) - c_0_hist = c_0_hist.transform_filter(index_variable_selection) - error_hist = error_hist.transform_filter(index_variable_selection) - for idx in range(len(extra_predictors_hists)): - extra_predictors_hists[idx] = extra_predictors_hists[idx].transform_filter( - index_variable_selection - ) - for idx in range(len(index_variables_hists)): - if idx != index_variables_selections.index(index_variable_selection): - index_variables_hists[idx] = index_variables_hists[ - idx - ].transform_filter(index_variable_selection) - - index_variables_hists = reduce( - lambda index_variable_hist_1, index_variable_hist_2: index_variable_hist_1 - & index_variable_hist_2, - index_variables_hists, - ) - extra_predictors_hists = reduce( - lambda extra_predictor_hist_1, extra_predictor_hist_2: extra_predictor_hist_1 - & extra_predictor_hist_2, - extra_predictors_hists, - ) - - chart = ( - ( - ( - alt.vconcat( - alt.vconcat(top_chart, time_line, spacing=130), - ( - index_variables_hists - | c_0_hist - | error_hist & extra_predictors_hists - ), - spacing=10, - ) - ) - .resolve_scale(color="independent") - .add_selection(error_max_selection) - .add_selection(c_0_min_selection) - .add_selection(t_0_selection) - ) - .configure_axis(labelFontSize=labelFontSize, titleFontSize=titleFontSize) - .configure_legend(labelFontSize=labelFontSize) - ) - if fitted_model.name == "RectangleFunction": - chart = chart.add_selection(t_1_selection) - - vis_threshold = "id" + uuid.uuid4().hex - new_sliders_threshold_id = "id" + uuid.uuid4().hex - old_sliders_threshold_id = "id" + uuid.uuid4().hex - new_index_threshold_id = "id" + uuid.uuid4().hex - old_index_threshold_id = "id" + uuid.uuid4().hex - html_chart = f""" - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Interactive filters

-
-
-
- - - - - """ - display(HTML(html_chart)) - if save_path: - save_html( - obj=html_chart, - filename=save_path, - ) diff --git a/edsteva/viz/dashboards/estimates_dashboard/__init__.py b/edsteva/viz/dashboards/estimates_dashboard/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py b/edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py new file mode 100644 index 00000000..e31d8038 --- /dev/null +++ b/edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py @@ -0,0 +1,243 @@ +import uuid +from copy import deepcopy + +import altair as alt +import pandas as pd +from IPython.display import HTML, display + +from edsteva.models.base import BaseModel +from edsteva.probes.base import BaseProbe +from edsteva.probes.utils import CARE_SITE_LEVEL_NAMES +from edsteva.viz.utils import ( + add_estimates_filters, + add_interactive_selection, + concatenate_charts, + configure_style, + create_groupby_selection, + filter_predictor, + generate_error_line, + generate_horizontal_bar_charts, + generate_main_chart, + generate_model_line, + generate_probe_line, + generate_time_line, + generate_vertical_bar_charts, + month_diff, + save_html, +) + + +def estimates_dashboard( + probe: BaseProbe, + fitted_model: BaseModel, + care_site_level: str = CARE_SITE_LEVEL_NAMES["Hospital"], + save_path: str = None, + **kwargs, +): + r"""Displays an interactive chart with: + + - On the top, the aggregated normalized completeness predictor $\frac{c(\Delta t)}{c_0}$ over normalized time $\Delta t = t - t_0$. It represents the overall deviation from the Model. + - On the bottom, interactive filters including all the columns in the [Probe][probe] (such as time, care site, number of visits...etc.) and all the estimates (coefficients and metrics) in the [Model][model]. + + Is is possible to save the chart in HTML with the "save_path" optional input. + + Parameters + ---------- + probe : BaseProbe + Class describing the completeness predictor $c(t)$ + fitted_model : BaseModel + Model fitted to the probe + care_site_level : str, optional + **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` + save_path : str, optional + Folder path where to save the chart in HTML format. + + **EXAMPLE**: `"my_folder/my_file.html"` + labelFontSize: float, optional + The font size of the labels (axis and legend). + titleFontSize: float, optional + The font size of the titles. + """ + alt.data_transformers.disable_max_rows() + + predictor = probe.predictor.copy() + estimates = fitted_model.estimates.copy() + predictor = predictor.merge(estimates, on=probe._index) + + predictor["normalized_date"] = month_diff( + predictor["date"], predictor["t_0"] + ).astype(int) + predictor["normalized_c_0"] = predictor["c_0"].mask( + (predictor["normalized_date"] < 0) | (predictor["c_0"] == 0), 1 + ) + + predictor["model"] = 1 + predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) + + predictor.t_0 = predictor.t_0.dt.strftime("%Y-%m") + probe_config = deepcopy(probe.get_estimates_dashboard_config()) + main_chart_config = probe_config["main_chart"] + time_line_config = probe_config["time_line"] + error_line_config = probe_config["error_line"] + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + chart_style = probe_config["chart_style"] + + predictor["legend_predictor"] = main_chart_config["legend_title"] + predictor["legend_error_band"] = error_line_config["legend_title"] + predictor["legend_model"] = type(fitted_model).__name__ + + predictor = filter_predictor( + predictor=predictor, care_site_level=care_site_level, **kwargs + ) + predictor = probe.add_names_columns(predictor) + for estimate in fitted_model._coefs + fitted_model._metrics: + if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): + predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") + model_config = deepcopy( + fitted_model.get_estimates_dashboard_config(predictor=predictor) + ) + probe_line_config = model_config["probe_line"] + model_line_config = model_config["model_line"] + estimates_selections = model_config["estimates_selections"] + estimates_filters = model_config["estimates_filters"] + horizontal_bar_charts_config["x"] = ( + horizontal_bar_charts_config["x"] + model_config["extra_horizontal_bar_charts"] + ) + vertical_bar_charts_config["y"] = ( + vertical_bar_charts_config["y"] + model_config["extra_vertical_bar_charts"] + ) + + base = alt.Chart(predictor) + time_line, time_selection = generate_time_line( + base=base, + time_line_config=time_line_config, + ) + + horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( + base=base, + horizontal_bar_charts_config=horizontal_bar_charts_config, + ) + vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( + base=base, + vertical_bar_charts_config=vertical_bar_charts_config, + ) + + selections = dict( + date=time_selection, + **y_variables_selections, + **x_variables_selections, + ) + selection_charts = dict( + horizontal_bar_charts, + **vertical_bar_charts, + ) + + base = add_interactive_selection( + base=base, + selection_charts=selection_charts, + selections=selections, + ) + base = add_estimates_filters( + base=base, + selection_charts=selection_charts, + estimates_filters=estimates_filters, + ) + index_selection, index_fields = create_groupby_selection( + indexes=vertical_bar_charts_config["x"] + horizontal_bar_charts_config["y"], + ) + main_chart = generate_main_chart( + base=base, + main_chart_config=main_chart_config, + index_selection=index_selection, + index_fields=index_fields, + ) + probe_line = generate_probe_line( + main_chart=main_chart, probe_line_config=probe_line_config + ) + error_line = generate_error_line( + main_chart=main_chart, error_line_config=error_line_config + ) + model_line = generate_model_line( + main_chart=main_chart, model_line_config=model_line_config + ) + + main_chart = probe_line + error_line + model_line + if index_selection: + main_chart = main_chart.add_selection(index_selection) + chart = concatenate_charts( + main_chart=main_chart, + time_line=time_line, + horizontal_bar_charts=horizontal_bar_charts, + vertical_bar_charts=vertical_bar_charts, + spacing=0, + ) + chart = configure_style(chart=chart, chart_style=chart_style) + for estimate_selection in estimates_selections: + chart = chart.add_selection(estimate_selection) + + vis_threshold = "id" + uuid.uuid4().hex + new_sliders_threshold_id = "id" + uuid.uuid4().hex + old_sliders_threshold_id = "id" + uuid.uuid4().hex + new_index_threshold_id = "id" + uuid.uuid4().hex + old_index_threshold_id = "id" + uuid.uuid4().hex + html_chart = f""" + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Interactive filters

+
+
+
+ + + + + """ + display(HTML(html_chart)) + if save_path: + save_html( + obj=html_chart, + filename=save_path, + ) diff --git a/edsteva/viz/dashboards/predictor_dashboard/fitted_probe.py b/edsteva/viz/dashboards/predictor_dashboard/fitted_probe.py index 0325b9c2..61472735 100644 --- a/edsteva/viz/dashboards/predictor_dashboard/fitted_probe.py +++ b/edsteva/viz/dashboards/predictor_dashboard/fitted_probe.py @@ -1,19 +1,28 @@ -from functools import reduce -from typing import List +from typing import Dict import altair as alt import pandas as pd +from edsteva.viz.utils import ( + add_interactive_selection, + concatenate_charts, + configure_style, + create_groupby_selection, + generate_horizontal_bar_charts, + generate_main_chart, + generate_model_line, + generate_probe_line, + generate_time_line, + generate_vertical_bar_charts, +) + def fitted_probe_dashboard( predictor: pd.DataFrame, - index: List[str], - x_axis_title: str = "Time (Month Year)", - y_axis_title: str = "Completeness predictor c(t)", - x_grid: bool = True, - y_grid: bool = True, - labelAngle: float = -90, - labelFontSize: float = 12, + probe_config: Dict[str, str], + model_config: Dict[str, str], + legend_predictor: str = "Predictor c(t)", + legend_model: str = "Model f(t)", ): r"""Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] @@ -36,224 +45,79 @@ def fitted_probe_dashboard( labelFontSize: float, optional The font size of the labels (axis and legend). """ - alt.data_transformers.disable_max_rows() - - predictor["legend_predictor"] = "Predictor c(t)" - predictor["legend_model"] = "Model f(t)" - - time_selection = alt.selection_interval(encodings=["x"]) - time_line = ( - alt.Chart(predictor) - .mark_line() - .encode( - x=alt.X( - f'yearmonth({"date"}):T', - title=x_axis_title, - axis=alt.Axis(tickCount="month", labelAngle=labelAngle), - ), - y=alt.Y( - "mean(c):Q", - title="c(t)", - ), - ) - .add_selection(time_selection) - ).properties(width=900, height=50) - - care_site_selection = alt.selection_multi(fields=["care_site_short_name"]) - care_site_color = alt.condition( - care_site_selection, - alt.Color( - "care_site_short_name:N", - legend=None, - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - alt.value("lightgray"), + predictor["legend_predictor"] = legend_predictor + predictor["legend_model"] = legend_model + + main_chart_config = probe_config["main_chart"] + time_line_config = probe_config["time_line"] + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + chart_style = probe_config["chart_style"] + + model_line_config = model_config["model_line"] + probe_line_config = model_config["probe_line"] + horizontal_bar_charts_config["x"] = ( + horizontal_bar_charts_config["x"] + model_config["extra_horizontal_bar_charts"] ) - predictor_hist = ( - alt.Chart(predictor) - .mark_bar() - .encode( - y=alt.Y( - "care_site_short_name:N", - title="Care site short name", - sort="-x", - ), - color=care_site_color, - ) - .transform_filter(time_selection) - .add_selection(care_site_selection) - ).properties(width=300) - - care_site_hist = predictor_hist.encode( - x=alt.X( - "mean(c):Q", - title="c", - ), - tooltip=alt.Tooltip("mean(c):Q", format=".2"), - ).properties(title="Average completeness per care site") - - index_variables_hists = [] - index_variables_selections = [] - for index_variable in index: - index_variable_selection = alt.selection_multi(fields=[index_variable]) - index_variables_selections.append(index_variable_selection) - - index_variable_color = alt.condition( - index_variable_selection, - alt.Color( - "{}:N".format(index_variable), - legend=None, - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - alt.value("lightgray"), - ) - index_variable_hist = ( - alt.Chart(predictor) - .mark_bar() - .encode( - y=alt.Y( - "mean(c):Q", - title="c", - ), - x=alt.X( - "{}:N".format(index_variable), - title=index_variable, - sort="-y", - ), - tooltip=alt.Tooltip("mean(c):Q", format=".2"), - color=index_variable_color, - ) - .add_selection(index_variable_selection) - .transform_filter(time_selection) - .transform_filter(care_site_selection) - ).properties(title="Average completeness per {}".format(index_variable)) - index_variables_hists.append(index_variable_hist) - - extra_predictors = predictor.columns.difference( - index - + [ - "date", - "care_site_short_name", - "care_site_id", - "c", - "c_hat", - "legend_predictor", - "legend_model", - ] + vertical_bar_charts_config["y"] = ( + vertical_bar_charts_config["y"] + model_config["extra_vertical_bar_charts"] ) - extra_predictors_hists = [] - - for extra_predictor in extra_predictors: - extra_predictor_hist = predictor_hist.encode( - x=alt.X( - "sum({}):Q".format(extra_predictor), - title="{}".format(extra_predictor), - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip("sum({}):Q".format(extra_predictor), format=","), - ).properties(title="Total {} per care site".format(extra_predictor)) - - extra_predictors_hists.append(extra_predictor_hist) - index.append("care_site_short_name") - index_selection = alt.selection_single( - fields=["index"], - bind=alt.binding_radio(name="Group by: ", options=index), - init={"index": "stay_type"}, + base = alt.Chart(predictor) + time_line, time_selection = generate_time_line( + base=base, + time_line_config=time_line_config, ) - - base_line = ( - alt.Chart(predictor) - .transform_fold(index, as_=["index", "value"]) - .encode( - x=alt.X( - f'yearmonth({"date"}):T', - title=x_axis_title, - axis=alt.Axis(tickCount="month", labelAngle=-90, grid=x_grid), - ), - color=alt.Color( - "value:N", - sort={"field": "c", "op": "mean", "order": "descending"}, - title=None, - ), - ) - .transform_filter(index_selection) - ).properties(width=900, height=300) - - probe_line = base_line.mark_line().encode( - y=alt.Y( - "mean(c):Q", - title=y_axis_title, - axis=alt.Axis(grid=y_grid), - ), - strokeDash=alt.StrokeDash( - "legend_predictor", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=labelFontSize, - labelFontStyle="bold", - orient="left", - ), - ), + horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( + base=base, + horizontal_bar_charts_config=horizontal_bar_charts_config, ) - - model_line = base_line.mark_line( - interpolate="step-after", strokeDash=[5, 5] - ).encode( - y=alt.Y( - "mean(c_hat):Q", - ), - strokeWidth=alt.StrokeWidth( - "legend_model", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=labelFontSize, - labelFontStyle="bold", - symbolDash=[2, 2], - orient="left", - ), - ), + vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( + base=base, + vertical_bar_charts_config=vertical_bar_charts_config, ) - fitted_probe = (probe_line + model_line).add_selection(index_selection) + selections = dict( + date=time_selection, + **y_variables_selections, + **x_variables_selections, + ) + selection_charts = dict( + horizontal_bar_charts, + **vertical_bar_charts, + ) - fitted_probe = fitted_probe.transform_filter(care_site_selection) - fitted_probe = fitted_probe.transform_filter(time_selection) + base = add_interactive_selection( + base=base, selection_charts=selection_charts, selections=selections + ) - for index_variable_selection in index_variables_selections: - fitted_probe = fitted_probe.transform_filter(index_variable_selection) - care_site_hist = care_site_hist.transform_filter(index_variable_selection) - for extra_predictor_hist in extra_predictors_hists: - extra_predictor_hist = extra_predictor_hist.transform_filter( - index_variable_selection - ) - for idx in range(len(index_variables_hists)): - if idx != index_variables_selections.index(index_variable_selection): - index_variables_hists[idx] = index_variables_hists[ - idx - ].transform_filter(index_variable_selection) + index_selection, index_fields = create_groupby_selection( + indexes=vertical_bar_charts_config["x"] + horizontal_bar_charts_config["y"], + ) + main_chart = generate_main_chart( + base=base, + main_chart_config=main_chart_config, + index_selection=index_selection, + index_fields=index_fields, + ) - index_variables_hists = reduce( - lambda index_variable_hist_1, index_variable_hist_2: index_variable_hist_1 - & index_variable_hist_2, - index_variables_hists, + probe_line = generate_probe_line( + main_chart=main_chart, probe_line_config=probe_line_config ) - extra_predictors_hists = reduce( - lambda extra_predictor_hist_1, extra_predictor_hist_2: extra_predictor_hist_1 - & extra_predictor_hist_2, - extra_predictors_hists, + + model_line = generate_model_line( + main_chart=main_chart, model_line_config=model_line_config ) - chart = ( - alt.vconcat( - alt.vconcat(fitted_probe, time_line, spacing=130), - (index_variables_hists | care_site_hist | extra_predictors_hists), - spacing=10, - ) - ).resolve_scale(color="independent") + main_chart = probe_line + model_line + if index_selection: + main_chart = main_chart.add_selection(index_selection) + chart = concatenate_charts( + main_chart=main_chart, + time_line=time_line, + horizontal_bar_charts=horizontal_bar_charts, + vertical_bar_charts=vertical_bar_charts, + ) + chart = configure_style(chart=chart, chart_style=chart_style) return chart diff --git a/edsteva/viz/dashboards/predictor_dashboard/probe.py b/edsteva/viz/dashboards/predictor_dashboard/probe.py index 2d20609f..80922b7c 100644 --- a/edsteva/viz/dashboards/predictor_dashboard/probe.py +++ b/edsteva/viz/dashboards/predictor_dashboard/probe.py @@ -1,28 +1,32 @@ -from functools import reduce -from typing import List +from typing import Dict import altair as alt import pandas as pd +from edsteva.viz.utils import ( + add_interactive_selection, + concatenate_charts, + configure_style, + create_groupby_selection, + generate_horizontal_bar_charts, + generate_main_chart, + generate_time_line, + generate_vertical_bar_charts, +) + def probe_dashboard( predictor: pd.DataFrame, - index: List[str], - x_axis_title: str = "Time (Month Year)", - y_axis_title: str = "Completeness predictor c(t)", - x_grid: bool = True, - y_grid: bool = True, - show_n_visit: bool = False, - labelAngle: float = -90, + probe_config: Dict[str, str], ): """Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] Parameters ---------- predictor : pd.DataFrame - $c(t)$ computed in the Probe + $c(t)$ computed in the Probe. index : List[str] - Variable from which data is grouped + Variable from which data is grouped. x_axis_title: str, optional, Label name for the x axis. x_grid: bool, optional, @@ -31,188 +35,62 @@ def probe_dashboard( Label name for the y axis. y_grid: bool, optional, If False, remove the grid for the y axis. - show_n_visit: bool, optional - show the number of visit instead of the completeness predictor $c(t)$ + show_n_events: bool, optional + show the number of events instead of the completeness predictor $c(t)$. labelAngle: float, optional The rotation angle of the label on the x_axis. """ - - time = "date" - _predictor = "c" - - alt.data_transformers.disable_max_rows() - - time_selection = alt.selection_interval(encodings=["x"]) - time_line = ( - alt.Chart(predictor) - .mark_line() - .encode( - x=alt.X( - f'yearmonth({"date"}):T', - title=x_axis_title, - axis=alt.Axis(tickCount="month", labelAngle=labelAngle), - ), - y=alt.Y( - "mean(c):Q", - title="c(t)", - ), - ) - .add_selection(time_selection) - ).properties(width=900, height=50) - - care_site_selection = alt.selection_multi(fields=["care_site_short_name"]) - care_site_color = alt.condition( - care_site_selection, - alt.Color( - "care_site_short_name:N", - legend=None, - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - alt.value("lightgray"), + main_chart_config = probe_config["main_chart"] + time_line_config = probe_config["time_line"] + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + chart_style = probe_config["chart_style"] + + base = alt.Chart(predictor) + time_line, time_selection = generate_time_line( + base=base, + time_line_config=time_line_config, ) - predictor_hist = ( - alt.Chart(predictor) - .mark_bar() - .encode( - y=alt.Y( - "care_site_short_name:N", - title="Care site short name", - sort="-x", - ), - color=care_site_color, - ) - .transform_filter(time_selection) - .add_selection(care_site_selection) - ).properties(width=300) - - care_site_hist = predictor_hist.encode( - x=alt.X( - "mean(c):Q", - title="c", - ), - tooltip=alt.Tooltip("mean(c):Q", format=".2"), - ).properties(title="Average completeness per care site") - - index_variables_hists = [] - index_variables_selections = [] - for index_variable in index: - index_variable_selection = alt.selection_multi(fields=[index_variable]) - index_variables_selections.append(index_variable_selection) - - index_variable_color = alt.condition( - index_variable_selection, - alt.Color( - "{}:N".format(index_variable), - legend=None, - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - alt.value("lightgray"), - ) - index_variable_hist = ( - alt.Chart(predictor) - .mark_bar() - .encode( - y=alt.Y( - "mean(c):Q", - title="c", - ), - x=alt.X( - "{}:N".format(index_variable), - title=index_variable, - sort="-y", - ), - tooltip=alt.Tooltip("mean(c):Q", format=".2"), - color=index_variable_color, - ) - .add_selection(index_variable_selection) - .transform_filter(time_selection) - .transform_filter(care_site_selection) - ).properties(title="Average completeness per {}".format(index_variable)) - index_variables_hists.append(index_variable_hist) - - extra_predictors = predictor.columns.difference( - index - + [time] - + [_predictor] - + ["care_site_short_name", "care_site_id", "c_hat"] + horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( + base=base, + horizontal_bar_charts_config=horizontal_bar_charts_config, ) - extra_predictors_hists = [] - - for extra_predictor in extra_predictors: - extra_predictor_hist = predictor_hist.encode( - x=alt.X( - "sum({}):Q".format(extra_predictor), - title="{}".format(extra_predictor), - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip("sum({}):Q".format(extra_predictor), format=","), - ).properties(title="Total {} per care site".format(extra_predictor)) - - extra_predictors_hists.append(extra_predictor_hist) - - index.append("care_site_short_name") - index_selection = alt.selection_single( - fields=["index"], - bind=alt.binding_radio(name="Group by: ", options=index), - init={"index": "stay_type"}, + vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( + base=base, + vertical_bar_charts_config=vertical_bar_charts_config, + ) + selections = dict( + date=time_selection, + **y_variables_selections, + **x_variables_selections, + ) + selection_charts = dict( + horizontal_bar_charts, + **vertical_bar_charts, + ) + base = add_interactive_selection( + base=base, selection_charts=selection_charts, selections=selections ) - probe_line = ( - alt.Chart(predictor) - .transform_fold(index, as_=["index", "value"]) - .mark_line() - .encode( - x=alt.X( - f'yearmonth({"date"}):T', - title=x_axis_title, - axis=alt.Axis(tickCount="month", labelAngle=-90, grid=x_grid), - ), - y=alt.Y( - "sum(n_visit):Q" if show_n_visit else "mean(c):Q", - title=y_axis_title, - axis=alt.Axis(grid=y_grid), - ), - color=alt.Color( - "value:N", - sort={"field": "c", "op": "mean", "order": "descending"}, - title=None, - ), - ) - .add_selection(index_selection) - .transform_filter(index_selection) - .transform_filter(care_site_selection) - .transform_filter(time_selection) - ).properties(width=900, height=300) - - for index_variable_selection in index_variables_selections: - probe_line = probe_line.transform_filter(index_variable_selection) - care_site_hist = care_site_hist.transform_filter(index_variable_selection) - for idx in range(len(extra_predictors_hists)): - extra_predictors_hists[idx] = extra_predictors_hists[idx].transform_filter( - index_variable_selection - ) - for idx in range(len(index_variables_hists)): - if idx != index_variables_selections.index(index_variable_selection): - index_variables_hists[idx] = index_variables_hists[ - idx - ].transform_filter(index_variable_selection) - index_variables_hists = reduce( - lambda index_variable_hist_1, index_variable_hist_2: index_variable_hist_1 - & index_variable_hist_2, - index_variables_hists, + index_selection, index_fields = create_groupby_selection( + indexes=vertical_bar_charts_config["x"] + horizontal_bar_charts_config["y"], ) - extra_predictors_hists = reduce( - lambda extra_predictor_hist_1, extra_predictor_hist_2: extra_predictor_hist_1 - & extra_predictor_hist_2, - extra_predictors_hists, + main_chart = generate_main_chart( + base=base, + main_chart_config=main_chart_config, + index_selection=index_selection, + index_fields=index_fields, ) - chart = ( - alt.vconcat( - alt.vconcat(probe_line, time_line, spacing=130), - (index_variables_hists | care_site_hist | extra_predictors_hists), - spacing=10, - ) - ).resolve_scale(color="independent") + main_chart = main_chart.mark_line() + if index_selection: + main_chart = main_chart.add_selection(index_selection) + chart = concatenate_charts( + main_chart=main_chart, + time_line=time_line, + horizontal_bar_charts=horizontal_bar_charts, + vertical_bar_charts=vertical_bar_charts, + ) + chart = configure_style(chart=chart, chart_style=chart_style) return chart diff --git a/edsteva/viz/dashboards/predictor_dashboard/wrapper.py b/edsteva/viz/dashboards/predictor_dashboard/wrapper.py index 89d9e2f5..1fb6263f 100644 --- a/edsteva/viz/dashboards/predictor_dashboard/wrapper.py +++ b/edsteva/viz/dashboards/predictor_dashboard/wrapper.py @@ -1,4 +1,5 @@ import uuid +from copy import deepcopy import altair as alt from IPython.display import HTML, display @@ -9,7 +10,7 @@ fitted_probe_dashboard, ) from edsteva.viz.dashboards.predictor_dashboard.probe import probe_dashboard -from edsteva.viz.utils import filter_predictor, save_html +from edsteva.viz.utils import filter_predictor, json_dir, save_html def predictor_dashboard( @@ -17,14 +18,9 @@ def predictor_dashboard( fitted_model: BaseModel = None, care_site_level: str = None, save_path: str = None, - x_axis_title: str = "Time (Month Year)", - x_grid: bool = True, - y_axis_title: str = "Completeness predictor c(t)", - y_grid: bool = True, - show_n_visit: bool = False, - labelAngle: float = -90, - labelFontSize: float = 12, - titleFontSize: float = 13, + legend_predictor: str = "Predictor c(t)", + legend_model: str = "Model f(t)", + **kwargs, ): r"""Displays an interactive chart with: @@ -53,8 +49,8 @@ def predictor_dashboard( Label name for the y axis. y_grid: bool, optional, If False, remove the grid for the y axis. - show_n_visit: bool, optional - show the number of visit instead of the completeness predictor $c(t)$. + show_n_events: bool, optional + show the number of events instead of the completeness predictor $c(t)$. labelAngle: float, optional The rotation angle of the label on the x_axis. labelFontSize: float, optional @@ -62,49 +58,46 @@ def predictor_dashboard( titleFontSize: float, optional The font size of the titles. """ + if save_path: + alt.data_transformers.enable("default") + alt.data_transformers.disable_max_rows() + + else: + alt.data_transformers.register("json_dir", json_dir) + alt.data_transformers.enable("json_dir") - index = list(set(probe._index).difference(["care_site_level", "care_site_id"])) + probe_config = deepcopy(probe.get_predictor_dashboard_config()) if fitted_model: predictor = fitted_model.predict(probe) else: - predictor = probe.predictor - + predictor = probe.predictor.copy() + predictor = probe.add_names_columns(predictor) predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, + **kwargs, ) if fitted_model: + model_config = deepcopy(fitted_model.get_predictor_dashboard_config()) chart = fitted_probe_dashboard( predictor=predictor, - index=index, - x_axis_title=x_axis_title, - y_axis_title=y_axis_title, - x_grid=x_grid, - y_grid=y_grid, - labelAngle=labelAngle, - labelFontSize=labelFontSize, + probe_config=probe_config, + model_config=model_config, + legend_predictor=legend_predictor, + legend_model=legend_model, ) else: chart = probe_dashboard( predictor=predictor, - index=index, - x_axis_title=x_axis_title, - y_axis_title=y_axis_title, - x_grid=x_grid, - y_grid=y_grid, - show_n_visit=show_n_visit, - labelAngle=labelAngle, + probe_config=probe_config, ) - chart = chart.configure_axis( - labelFontSize=labelFontSize, titleFontSize=titleFontSize - ).configure_legend(labelFontSize=labelFontSize) vis_probe = "id" + uuid.uuid4().hex new_index_probe_id = "id" + uuid.uuid4().hex old_index_probe_id = "id" + uuid.uuid4().hex - + left_shift = "145px" if fitted_model else "45px" html_chart = f""" @@ -120,7 +113,7 @@ def predictor_dashboard(
-
+
@@ -144,17 +137,12 @@ def predictor_dashboard( }}).catch(console.error); - """ - display(HTML(html_chart)) if save_path: save_html( obj=html_chart, filename=save_path, ) + else: + display(HTML(html_chart)) diff --git a/edsteva/viz/plots/__init__.py b/edsteva/viz/plots/__init__.py index e5bb1a99..ba68dfa7 100644 --- a/edsteva/viz/plots/__init__.py +++ b/edsteva/viz/plots/__init__.py @@ -1,3 +1,11 @@ -from edsteva.viz.plots.estimates_densities import plot_estimates_densities -from edsteva.viz.plots.normalized_probe import plot_normalized_probe +from edsteva.viz.plots.estimates_densities.estimates_densities import ( + plot_estimates_densities, +) +from edsteva.viz.plots.normalized_probe.normalized_probe import plot_normalized_probe from edsteva.viz.plots.plot_probe.wrapper import plot_probe + +__all__ = [ + "plot_probe", + "plot_estimates_densities", + "plot_normalized_probe", +] diff --git a/edsteva/viz/plots/estimates_densities.py b/edsteva/viz/plots/estimates_densities.py deleted file mode 100644 index 4db937bc..00000000 --- a/edsteva/viz/plots/estimates_densities.py +++ /dev/null @@ -1,149 +0,0 @@ -from functools import reduce - -import altair as alt - -from edsteva.models import BaseModel -from edsteva.viz.utils import save_html - - -def plot_estimates_densities( - fitted_model: BaseModel, - save_path: str = None, - labelFontSize: float = 12, - titleFontSize: float = 13, - **kwargs, -): - r"""Displays the density plot with the associated box plot of each estimate and metric computed in the input model. It can help you to set the thresholds. - - - Parameters - ---------- - fitted_model : BaseModel - Model with estimates of interest - **EXAMPLE**: StepFunction Model with $(\hat{t_0}, \hat{c_0})$ - save_path : str, optional - Folder path where to save the chart in HTML format. - - **EXAMPLE**: `"my_folder/my_file.html"` - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. - """ - alt.data_transformers.disable_max_rows() - - estimates = fitted_model.estimates.copy() - - indexes = list( - estimates.columns.difference(fitted_model._coefs + fitted_model._metrics) - ) - indexes.remove("care_site_id") - - quantitative_estimates = [] - time_estimates = [] - - for estimate in fitted_model._coefs + fitted_model._metrics: - if estimates[estimate].dtype == float or estimates[estimate].dtype == int: - max_value = estimates[estimate].max() - min_value = estimates[estimate].min() - estimates[estimate] = round(estimates[estimate], 3) - - estimate_density = ( - alt.vconcat( - ( - ( - alt.Chart(estimates) - .transform_density( - estimate, - as_=[estimate, "Density"], - groupby=indexes, - extent=[min_value, max_value], - **kwargs, - ) - .mark_area() - .encode( - x=alt.X( - "{}:Q".format(estimate), - title=None, - ), - y="Density:Q", - ) - ) - + alt.Chart(estimates) - .mark_rule(color="red") - .encode(x="median({}):Q".format(estimate)) - ).properties(width=800, height=300), - ( - alt.Chart(estimates) - .mark_tick() - .encode(x=alt.X("{}:Q".format(estimate), axis=None)) - ), - spacing=0, - ) - & ( - alt.Chart(estimates) - .mark_boxplot() - .encode( - x="{}:Q".format(estimate), - ) - ) - ).resolve_scale(x="shared") - quantitative_estimates.append(estimate_density) - - else: - estimates[estimate] = estimates[estimate] - - estimates[estimate] = estimates[estimate].astype("datetime64[s]") - estimate_density = ( - ( - alt.Chart(estimates) - .transform_timeunit(estimate="yearmonth({})".format(estimate)) - .mark_bar(size=10) - .encode( - x=alt.X( - "{}:T".format(estimate), - axis=alt.Axis( - tickCount="month", - format="%Y, %b", - labelAngle=-90, - ), - title=estimate, - ), - y=alt.Y( - "count({}):Q".format(estimate), - axis=alt.Axis(tickMinStep=1), - ), - ) - ) - + alt.Chart(estimates) - .mark_rule(color="red") - .encode(x="median({}):T".format(estimate)) - ).properties(width=800, height=300) - time_estimates.append(estimate_density) - - estimates_densities = time_estimates + quantitative_estimates - estimates_densities = reduce( - lambda estimate_density_1, estimate_density_2: estimate_density_1 - & estimate_density_2, - estimates_densities, - ) - - for index in indexes: - index_selection = alt.selection_single( - fields=[index], - bind=alt.binding_select(name=index, options=estimates[index].unique()), - init={index: estimates[index].unique()[0]}, - ) - - estimates_densities = estimates_densities.add_selection(index_selection) - estimates_densities = estimates_densities.transform_filter(index_selection) - - if save_path: - save_html( - obj=estimates_densities.configure_axis( - labelFontSize=labelFontSize, titleFontSize=titleFontSize - ).configure_legend(labelFontSize=labelFontSize), - filename=save_path, - ) - - return estimates_densities diff --git a/edsteva/viz/plots/estimates_densities/__init__.py b/edsteva/viz/plots/estimates_densities/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py new file mode 100644 index 00000000..8e764c6a --- /dev/null +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -0,0 +1,238 @@ +import uuid +from copy import deepcopy +from functools import reduce + +import altair as alt + +from edsteva.models import BaseModel +from edsteva.probes import BaseProbe +from edsteva.viz.utils import ( + add_interactive_selection, + concatenate_charts, + configure_style, + generate_horizontal_bar_charts, + generate_vertical_bar_charts, + save_html, +) + + +def plot_estimates_densities( + probe: BaseProbe, + fitted_model: BaseModel, + save_path: str = None, + **kwargs, +): + r"""Displays the density plot with the associated box plot of each estimate and metric computed in the input model. It can help you to set the thresholds. + + + Parameters + ---------- + fitted_model : BaseModel + Model with estimates of interest + **EXAMPLE**: StepFunction Model with $(\hat{t_0}, \hat{c_0})$ + save_path : str, optional + Folder path where to save the chart in HTML format. + + **EXAMPLE**: `"my_folder/my_file.html"` + labelFontSize: float, optional + The font size of the labels (axis and legend). + titleFontSize: float, optional + The font size of the titles. + """ + alt.data_transformers.disable_max_rows() + + predictor = probe.predictor.copy() + estimates = fitted_model.estimates.copy() + predictor = probe.add_names_columns(predictor) + estimates = probe.add_names_columns(estimates) + probe_config = deepcopy(probe.get_predictor_dashboard_config()) + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + chart_style = probe_config["chart_style"] + + quantitative_estimates = [] + time_estimates = [] + + for estimate in fitted_model._coefs + fitted_model._metrics: + if estimates[estimate].dtype == float or estimates[estimate].dtype == int: + max_value = estimates[estimate].max() + min_value = estimates[estimate].min() + estimates[estimate] = round(estimates[estimate], 3) + + estimate_density = ( + alt.vconcat( + ( + ( + alt.Chart(estimates) + .transform_density( + estimate, + as_=[estimate, "Density"], + extent=[min_value, max_value], + **kwargs, + ) + .mark_area() + .encode( + x=alt.X( + "{}:Q".format(estimate), + title=None, + ), + y="Density:Q", + ) + ) + + alt.Chart(estimates) + .mark_rule(color="red") + .encode( + x="median({}):Q".format(estimate), + tooltip=alt.Tooltip("median({}):Q".format(estimate)), + ) + ).properties(width=800, height=300), + ( + alt.Chart(estimates) + .mark_tick() + .encode(x=alt.X("{}:Q".format(estimate), axis=None)) + ), + spacing=0, + ) + & ( + alt.Chart(estimates) + .mark_boxplot() + .encode( + x="{}:Q".format(estimate), + ) + ) + ).resolve_scale(x="shared") + quantitative_estimates.append(estimate_density) + + else: + estimates[estimate] = estimates[estimate].astype("datetime64[s]") + estimate_density = ( + ( + alt.Chart(estimates) + .transform_timeunit(estimate="yearmonth({})".format(estimate)) + .mark_bar(size=10) + .encode( + x=alt.X( + "{}:T".format(estimate), + axis=alt.Axis( + tickCount="month", + format="%Y, %b", + labelAngle=-90, + ), + title=estimate, + ), + y=alt.Y( + "count({}):Q".format(estimate), + axis=alt.Axis(tickMinStep=1), + ), + ) + ) + + alt.Chart(estimates) + .mark_rule(color="red") + .encode( + x="median({}):T".format(estimate), + tooltip=alt.Tooltip("median({}):T".format(estimate)), + ) + ).properties(width=800, height=300) + time_estimates.append(estimate_density) + + estimates_densities = time_estimates + quantitative_estimates + care_site_level_selection = alt.selection_single( + fields=["care_site_level"], + bind=alt.binding_select( + name="Care site level : ", options=estimates["care_site_level"].unique() + ), + init={"care_site_level": estimates["care_site_level"].unique()[0]}, + ) + main_chart = reduce( + lambda estimate_density_1, estimate_density_2: estimate_density_1 + & estimate_density_2, + estimates_densities, + ).add_selection(care_site_level_selection) + + base = alt.Chart(predictor) + + horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( + base=base, + horizontal_bar_charts_config=horizontal_bar_charts_config, + ) + vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( + base=base, + vertical_bar_charts_config=vertical_bar_charts_config, + ) + + selections = dict( + y_variables_selections, + **x_variables_selections, + **dict(cares_site_level=care_site_level_selection), + ) + selection_charts = dict( + horizontal_bar_charts, + **vertical_bar_charts, + ) + main_chart = add_interactive_selection( + base=main_chart, selection_charts=selection_charts, selections=selections + ) + + chart = concatenate_charts( + main_chart=main_chart, + horizontal_bar_charts=horizontal_bar_charts, + vertical_bar_charts=vertical_bar_charts, + spacing=0, + ) + chart = configure_style(chart=chart, chart_style=chart_style) + + vis_threshold = "id" + uuid.uuid4().hex + new_sliders_threshold_id = "id" + uuid.uuid4().hex + old_sliders_threshold_id = "id" + uuid.uuid4().hex + html_chart = f""" + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+ +
+
+ + + + + """ + if save_path: + save_html( + obj=html_chart, + filename=save_path, + ) + + return html_chart diff --git a/edsteva/viz/plots/normalized_probe.py b/edsteva/viz/plots/normalized_probe.py deleted file mode 100644 index 1a364eae..00000000 --- a/edsteva/viz/plots/normalized_probe.py +++ /dev/null @@ -1,315 +0,0 @@ -from datetime import datetime -from typing import List, Union - -import altair as alt -import pandas as pd - -from edsteva.models.base import BaseModel -from edsteva.probes.base import BaseProbe -from edsteva.viz.utils import filter_predictor, round_it, save_html, scale_it - - -def plot_normalized_probe( - probe: BaseProbe, - fitted_model: BaseModel, - t_0_max: datetime = None, - t_1_min: datetime = None, - error_max: float = None, - c_0_min: float = None, - care_site_level: str = None, - stay_type: List[str] = None, - care_site_id: List[int] = None, - start_date: Union[datetime, str] = None, - end_date: Union[datetime, str] = None, - care_site_short_name: List[int] = None, - t_min: int = None, - t_max: int = None, - save_path: str = None, - x_axis_title: str = "Δt = (t - t₀) months", - y_axis_title: str = "c(Δt) / c₀", - show_per_care_site: bool = False, - labelFontSize: float = 12, - titleFontSize: float = 13, - **kwargs, -): - r"""Displays a chart with the aggregated normalized completeness predictor $\frac{c(\Delta t)}{c_0}$ over normalized time $\Delta t = t - t_0$. It represents the overall deviation from the Model. - - Is is possible to save the chart in HTML with the "save_path" optional input. - - Parameters - ---------- - probe : BaseProbe - Class describing the completeness predictor $c(t)$ - fitted_model : BaseModel - Model fitted to the probe - t_0_max : datetime, optional - Initial value for the $t_0$ threshold. If None, it will be set as the maximum possible $t_0$ value. - - **EXAMPLE**: `"2022-01"`, `datetime(2020, 2, 1)` - error_max : float, optional - Initial value for the $error$ threshold. If None, it will be set as the maximum possible error value. - - **EXAMPLE**: `0.02`, `0.25` - c_0_min : float, optional - Initial value for the $c_0$ threshold. If None, it will be set as 0. - - **EXAMPLE**: `0.1`, `0.8` - stay_type : List[str], optional - **EXAMPLE**: `"All"` or `["All", "Urg"]` - care_site_id : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_level : str, optional - **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` - stay_type : List[str], optional - **EXAMPLE**: `"All"` or `["All", "Urg"]` - care_site_id : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_short_name : List[int], optional - **EXAMPLE**: `"HOSPITAL XXXX"` - save_path : str, optional - Folder path where to save the chart in HTML format. - - **EXAMPLE**: `"my_folder/my_file.html"` - x_axis_title: str, optional, - Label name for the x axis - y_axis_title: str, optional, - Label name for the y axis - show_per_care_site: bool, optional - If True, the average completeness predictor $c(t)$ is computed for each care site independently. If False, it is computed over all care sites. - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. - """ - - predictor = probe.predictor.copy() - estimates = fitted_model.estimates.copy() - predictor = predictor.merge(estimates, on=probe._index) - - def month_diff(x, y): - end = x.dt.to_period("M").view(dtype="int64") - start = y.dt.to_period("M").view(dtype="int64") - return end - start - - predictor["date"] = predictor["date"].astype("datetime64[ns]") - predictor["t_0"] = predictor["t_0"].astype("datetime64[ns]") - predictor["normalized_date"] = month_diff(predictor["date"], predictor["t_0"]) - predictor["t_0"] = predictor["t_0"].astype(str) - predictor["normalized_date"] = predictor["normalized_date"].astype(int) - if t_min: - predictor = predictor[predictor.normalized_date >= t_min] - if t_max: - predictor = predictor[predictor.normalized_date <= t_max] - predictor["normalized_c"] = predictor["c"].mask( - (predictor["normalized_date"] >= 0) & (predictor["c_0"] == 0), 1 - ) - predictor["normalized_c"] = predictor["normalized_c"].mask( - (predictor["normalized_date"] >= 0) & (predictor["c_0"] > 0), - predictor["c"] / predictor["c_0"], - ) - - predictor["legend_error_band"] = "Standard deviation" - predictor["legend_model"] = type(fitted_model).__name__ - - predictor["model"] = predictor["c_0"].where(predictor["normalized_date"] < 0, 1) - predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) - - # RectangleModel - if fitted_model.name == "RectangleFunction": - predictor = predictor[predictor.date < predictor.t_1] - - index = list(set(probe._index).difference(["care_site_level", "care_site_id"])) - if show_per_care_site: - index = index + ["care_site_short_name"] - - predictor = filter_predictor( - predictor=predictor, - care_site_level=care_site_level, - stay_type=stay_type, - care_site_id=care_site_id, - care_site_short_name=care_site_short_name, - start_date=start_date, - end_date=end_date, - **kwargs, - ) - index = [variable for variable in index if len(predictor[variable].unique()) >= 2] - - if c_0_min: - c_0_min = round_it(float(c_0_min), 2) - if c_0_min > round_it(predictor.c_0.max(), 2): - c_0_min = round_it(predictor.c_0.max(), 2) - elif c_0_min < round_it(predictor.c_0.min(), 2): - c_0_min = round_it(predictor.c_0.min(), 2) - else: - c_0_min = round_it(predictor.c_0.min(), 2) - - if error_max: - error_max = round_it(float(error_max), 2) - if error_max > predictor.error.max(): - error_max = round_it(predictor.error.max(), 2) - elif error_max < round_it(predictor.error.min(), 2): - error_max = round_it(predictor.error.min(), 2) - else: - error_max = round_it(predictor.error.max(), 2) - - t_0_max = ( - str(pd.to_datetime(t_0_max)) if t_0_max else predictor.t_0.astype(str).max() - ) - - c_0_min_slider = alt.binding_range( - min=0, - max=round_it(predictor.c_0.max(), 2), - step=1 / 100, - name="c₀ min: ", - ) - c_0_min_selection = alt.selection_single( - name="c_0_min", - fields=["c_0_min"], - bind=c_0_min_slider, - init={"c_0_min": c_0_min}, - ) - t_0_slider = alt.binding( - input="t_0", - name="t₀ max: ", - ) - t_0_selection = alt.selection_single( - name="t_0", - fields=["t_0"], - bind=t_0_slider, - init={"t_0": t_0_max}, - ) - if fitted_model.name == "RectangleFunction": - t_1_min = ( - str(pd.to_datetime(t_1_min)) if t_1_min else predictor.t_1.astype(str).min() - ) - t_1_slider = alt.binding( - input="t_1", - name="t₁ min: ", - ) - t_1_selection = alt.selection_single( - name="t_1", - fields=["t_1"], - bind=t_1_slider, - init={"t_1": t_1_min}, - ) - error_max_slider = alt.binding_range( - min=round_it(predictor.error.min(), 2), - max=round_it(predictor.error.max(), 2), - step=scale_it(predictor.error.max()) / 100, - name="error max: ", - ) - error_max_selection = alt.selection_single( - name="error_max", - fields=["error_max"], - bind=error_max_slider, - init={"error_max": error_max}, - ) - - alt.data_transformers.disable_max_rows() - - base_chart = ( - alt.Chart(predictor).encode( - x=alt.X( - "normalized_date:Q", - title=x_axis_title, - scale=alt.Scale(nice=False), - ), - ) - ).properties(width=900, height=300) - - transform_chart = ( - base_chart.transform_joinaggregate( - mean_c_0="mean(c_0)", - mean_error="mean(error)", - groupby=["care_site_short_name"] + index, - ) - .transform_filter(alt.datum.mean_c_0 >= c_0_min_selection.c_0_min) - .transform_filter(alt.datum.mean_error <= error_max_selection.error_max) - .transform_filter(alt.datum.t_0 <= t_0_selection.t_0) - ) - # RectangleModel - if fitted_model.name == "RectangleFunction": - transform_chart = transform_chart.transform_filter( - alt.datum.t_1 >= t_1_selection.t_1 - ) - - mean_line = transform_chart.mark_line().encode( - y=alt.Y( - "mean(normalized_c):Q", - ) - ) - - error_line = transform_chart.mark_errorband(extent="stdev").encode( - y=alt.Y( - "normalized_c:Q", - title=y_axis_title, - ), - stroke=alt.Stroke( - "legend_error_band", - title="Error band", - legend=alt.Legend(symbolType="square", orient="top"), - ), - ) - - model_line = base_chart.mark_line( - color="black", interpolate="step-after", strokeDash=[5, 5] - ).encode( - y="model:Q", - strokeWidth=alt.StrokeWidth( - "legend_model", - title="Model line", - legend=alt.Legend(orient="top", symbolDash=[2, 2]), - ), - ) - - chart = mean_line + error_line + model_line - - if len(index) >= 2: - index_selection = alt.selection_single( - fields=["index"], - bind=alt.binding_radio(name="Group by: ", options=index), - init={"index": index[0]}, - ) - chart = ( - chart.transform_fold(index, as_=["index", "value"]) - .encode( - color=alt.Color( - "value:N", - sort={"field": "c_0", "op": "min", "order": "descending"}, - title=None, - ), - ) - .transform_filter(index_selection) - .add_selection(index_selection) - ) - - elif len(index) == 1: - chart = chart.encode( - color=alt.Color( - "{}:N".format(index[0]), - sort={"field": "c_0", "op": "min", "order": "descending"}, - ), - ) - - chart = ( - chart.add_selection(error_max_selection) - .add_selection(c_0_min_selection) - .add_selection(t_0_selection) - ) - # RectangleModel - if fitted_model.name == "RectangleFunction": - chart = chart.add_selection(t_1_selection) - - if save_path: - save_html( - obj=chart.configure_axis( - labelFontSize=labelFontSize, titleFontSize=titleFontSize - ).configure_legend(labelFontSize=labelFontSize), - filename=save_path, - ) - - return chart diff --git a/edsteva/viz/plots/normalized_probe/__init__.py b/edsteva/viz/plots/normalized_probe/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/edsteva/viz/plots/normalized_probe/normalized_probe.py b/edsteva/viz/plots/normalized_probe/normalized_probe.py new file mode 100644 index 00000000..e8476fca --- /dev/null +++ b/edsteva/viz/plots/normalized_probe/normalized_probe.py @@ -0,0 +1,184 @@ +from copy import deepcopy +from datetime import datetime +from typing import List, Union + +import altair as alt +import pandas as pd + +from edsteva.models.base import BaseModel +from edsteva.probes.base import BaseProbe +from edsteva.viz.utils import ( + add_estimates_filters, + create_groupby_selection, + filter_predictor, + generate_error_line, + generate_main_chart, + generate_model_line, + generate_probe_line, + month_diff, + save_html, +) + + +def plot_normalized_probe( + probe: BaseProbe, + fitted_model: BaseModel, + care_site_level: str = None, + stay_type: List[str] = None, + care_site_id: List[int] = None, + start_date: Union[datetime, str] = None, + end_date: Union[datetime, str] = None, + care_site_short_name: List[int] = None, + t_min: int = None, + t_max: int = None, + save_path: str = None, + labelFontSize: float = 12, + titleFontSize: float = 13, + **kwargs, +): + r"""Displays a chart with the aggregated normalized completeness predictor $\frac{c(\Delta t)}{c_0}$ over normalized time $\Delta t = t - t_0$. It represents the overall deviation from the Model. + + Is is possible to save the chart in HTML with the "save_path" optional input. + + Parameters + ---------- + probe : BaseProbe + Class describing the completeness predictor $c(t)$ + fitted_model : BaseModel + Model fitted to the probe + t_0_max : datetime, optional + Initial value for the $t_0$ threshold. If None, it will be set as the maximum possible $t_0$ value. + + **EXAMPLE**: `"2022-01"`, `datetime(2020, 2, 1)` + error_max : float, optional + Initial value for the $error$ threshold. If None, it will be set as the maximum possible error value. + + **EXAMPLE**: `0.02`, `0.25` + c_0_min : float, optional + Initial value for the $c_0$ threshold. If None, it will be set as 0. + + **EXAMPLE**: `0.1`, `0.8` + stay_type : List[str], optional + **EXAMPLE**: `"All"` or `["All", "Urg"]` + care_site_id : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_level : str, optional + **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` + stay_type : List[str], optional + **EXAMPLE**: `"All"` or `["All", "Urg"]` + care_site_id : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_short_name : List[int], optional + **EXAMPLE**: `"HOSPITAL XXXX"` + save_path : str, optional + Folder path where to save the chart in HTML format. + + **EXAMPLE**: `"my_folder/my_file.html"` + x_axis_title: str, optional, + Label name for the x axis + y_axis_title: str, optional, + Label name for the y axis + show_per_care_site: bool, optional + If True, the average completeness predictor $c(t)$ is computed for each care site independently. If False, it is computed over all care sites. + labelFontSize: float, optional + The font size of the labels (axis and legend). + titleFontSize: float, optional + The font size of the titles. + """ + + predictor = probe.predictor.copy() + estimates = fitted_model.estimates.copy() + + predictor = probe.add_names_columns(predictor) + indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) + predictor = predictor.merge(estimates, on=probe._index) + + probe_config = deepcopy(probe.get_estimates_dashboard_config()) + main_chart_config = probe_config["main_chart"] + error_line_config = probe_config["error_line"] + + predictor["normalized_date"] = month_diff( + predictor["date"], predictor["t_0"] + ).astype(int) + predictor["legend_predictor"] = "Mean" + predictor["legend_error_band"] = "Standard deviation" + predictor["legend_model"] = type(fitted_model).__name__ + + predictor["model"] = 1 + predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) + + predictor = filter_predictor( + predictor=predictor, + care_site_level=care_site_level, + stay_type=stay_type, + care_site_id=care_site_id, + care_site_short_name=care_site_short_name, + start_date=start_date, + end_date=end_date, + **kwargs, + ) + for estimate in fitted_model._coefs + fitted_model._metrics: + if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): + predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") + model_config = deepcopy( + fitted_model.get_estimates_dashboard_config(predictor=predictor) + ) + probe_line_config = model_config["probe_line"] + model_line_config = model_config["model_line"] + estimates_selections = model_config["estimates_selections"] + estimates_filters = model_config["estimates_filters"] + + if t_min: + predictor = predictor[predictor.normalized_date >= t_min] + if t_max: + predictor = predictor[predictor.normalized_date <= t_max] + + indexes = [ + {"field": variable, "title": variable.replace("_", " ").capitalize()} + for variable in indexes + if len(predictor[variable].unique()) >= 2 + ] + + index_selection, index_fields = create_groupby_selection( + indexes=indexes, + ) + base = alt.Chart(predictor) + base = add_estimates_filters( + base=base, + estimates_filters=estimates_filters, + ) + main_chart = generate_main_chart( + base=base, + main_chart_config=main_chart_config, + index_selection=index_selection, + index_fields=index_fields, + ) + probe_line = generate_probe_line( + main_chart=main_chart, probe_line_config=probe_line_config + ) + error_line = generate_error_line( + main_chart=main_chart, error_line_config=error_line_config + ) + model_line = generate_model_line( + main_chart=main_chart, model_line_config=model_line_config + ) + main_chart = probe_line + error_line + model_line + if index_selection: + main_chart = main_chart.add_selection(index_selection) + + for estimate_selection in estimates_selections: + main_chart = main_chart.add_selection(estimate_selection) + + if save_path: + save_html( + obj=main_chart.configure_axis( + labelFontSize=labelFontSize, titleFontSize=titleFontSize + ).configure_legend(labelFontSize=labelFontSize), + filename=save_path, + ) + + return main_chart diff --git a/edsteva/viz/plots/plot_probe/fitted_probe.py b/edsteva/viz/plots/plot_probe/fitted_probe.py index cc8e8344..abf95d44 100644 --- a/edsteva/viz/plots/plot_probe/fitted_probe.py +++ b/edsteva/viz/plots/plot_probe/fitted_probe.py @@ -1,18 +1,23 @@ -from typing import List +from typing import Dict, List import altair as alt import pandas as pd +from edsteva.viz.utils import ( + create_groupby_selection, + generate_main_chart, + generate_model_line, + generate_probe_line, +) + def fitted_probe_line( predictor: pd.DataFrame, - index: List[str], - x_axis_title: str = "Time (Month Year)", - y_axis_title: str = "Completeness predictor c(t)", - x_grid: bool = True, - y_grid: bool = True, - labelAngle: float = -90, - labelFontSize: float = 12, + probe_config: Dict[str, str], + model_config: Dict[str, str], + indexes: List[Dict[str, str]], + legend_predictor: str = "Predictor c(t)", + legend_model: str = "Model f(t)", ): r"""Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] @@ -35,83 +40,34 @@ def fitted_probe_line( labelFontSize: float, optional The font size of the labels (axis and legend). """ - predictor["legend_predictor"] = "Predictor c(t)" - predictor["legend_model"] = "Model f(t)" + predictor["legend_predictor"] = legend_predictor + predictor["legend_model"] = legend_model + main_chart_config = probe_config["main_chart"] + model_line_config = model_config["model_line"] + probe_line_config = model_config["probe_line"] - base_chart = ( - alt.Chart(predictor).encode( - x=alt.X( - f'yearmonth({"date"}):T', - title=x_axis_title, - axis=alt.Axis(tickCount="month", labelAngle=labelAngle, grid=x_grid), - ), - ) - ).properties(width=800, height=300) + base = alt.Chart(predictor) - probe_line = base_chart.mark_line().encode( - y=alt.Y( - "mean(c):Q", - title=y_axis_title, - axis=alt.Axis(grid=y_grid), - ), - strokeDash=alt.StrokeDash( - "legend_predictor", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=labelFontSize, - labelFontStyle="bold", - orient="left", - ), - ), + index_selection, index_fields = create_groupby_selection( + indexes=indexes, + ) + main_chart = generate_main_chart( + base=base, + main_chart_config=main_chart_config, + index_selection=index_selection, + index_fields=index_fields, ) - model_line = base_chart.mark_line( - interpolate="step-after", strokeDash=[5, 5] - ).encode( - y=alt.Y( - "mean(c_hat):Q", - ), - strokeWidth=alt.StrokeWidth( - "legend_model", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=labelFontSize, - labelFontStyle="bold", - symbolDash=[2, 2], - orient="left", - ), - ), + + probe_line = generate_probe_line( + main_chart=main_chart, probe_line_config=probe_line_config ) - chart = probe_line + model_line + model_line = generate_model_line( + main_chart=main_chart, model_line_config=model_line_config + ) - if len(index) >= 2: - index_selection = alt.selection_single( - fields=["index"], - bind=alt.binding_radio(name="Group by: ", options=index), - init={"index": index[0]}, - ) - chart = ( - chart.transform_fold(index, as_=["index", "value"]) - .encode( - color=alt.Color( - "value:N", - sort={"field": "c", "op": "mean", "order": "descending"}, - title=None, - ), - ) - .transform_filter(index_selection) - .add_selection(index_selection) - ) - elif len(index) == 1: - chart = chart.encode( - color=alt.Color( - "{}:N".format(index[0]), - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - ) + main_chart = probe_line + model_line + if index_selection: + main_chart = main_chart.add_selection(index_selection) - return chart + return main_chart diff --git a/edsteva/viz/plots/plot_probe/probe.py b/edsteva/viz/plots/plot_probe/probe.py index 92003837..f7461285 100644 --- a/edsteva/viz/plots/plot_probe/probe.py +++ b/edsteva/viz/plots/plot_probe/probe.py @@ -1,18 +1,15 @@ -from typing import List +from typing import Dict, List import altair as alt import pandas as pd +from edsteva.viz.utils import create_groupby_selection, generate_main_chart + def probe_line( predictor: pd.DataFrame, - index: List[str], - x_axis_title: str = "Time (Month Year)", - y_axis_title: str = "Completeness predictor c(t)", - x_grid: bool = True, - y_grid: bool = True, - show_n_visit: bool = False, - labelAngle: float = -90, + probe_config: Dict[str, str], + indexes: List[Dict[str, str]], ): """Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] @@ -30,54 +27,27 @@ def probe_line( Label name for the y axis. y_grid: bool, optional, If False, remove the grid for the y axis. - show_n_visit: bool, optional + show_n_events: bool, optional show the number of visit instead of the completeness predictor $c(t)$ labelAngle: float, optional The rotation angle of the label on the x_axis. """ + main_chart_config = probe_config["main_chart"] + + base = alt.Chart(predictor) - chart = ( - alt.Chart(predictor) - .mark_line() - .encode( - x=alt.X( - f'yearmonth({"date"}):T', - title=x_axis_title, - axis=alt.Axis(tickCount="month", labelAngle=labelAngle, grid=x_grid), - ), - y=alt.Y( - "sum(n_visit):Q" if show_n_visit else "mean(c):Q", - title=y_axis_title, - axis=alt.Axis(grid=y_grid), - ), - ) - ).properties(width=800, height=300) + index_selection, index_fields = create_groupby_selection( + indexes=indexes, + ) + main_chart = generate_main_chart( + base=base, + main_chart_config=main_chart_config, + index_selection=index_selection, + index_fields=index_fields, + ) + main_chart = main_chart.mark_line() - if len(index) >= 2: - index_selection = alt.selection_single( - fields=["index"], - bind=alt.binding_radio(name="Group by: ", options=index), - init={"index": index[0]}, - ) - chart = ( - chart.transform_fold(index, as_=["index", "value"]) - .encode( - color=alt.Color( - "value:N", - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - ) - .add_selection(index_selection) - .transform_filter(index_selection) - ).properties(width=800, height=300) - elif len(index) == 1: - chart = ( - chart.encode( - color=alt.Color( - "{}:N".format(index[0]), - sort={"field": "c", "op": "mean", "order": "descending"}, - ), - ) - ).properties(width=800, height=300) + if index_selection: + main_chart = main_chart.add_selection(index_selection) - return chart + return main_chart diff --git a/edsteva/viz/plots/plot_probe/wrapper.py b/edsteva/viz/plots/plot_probe/wrapper.py index afac7dc3..baa39ef0 100644 --- a/edsteva/viz/plots/plot_probe/wrapper.py +++ b/edsteva/viz/plots/plot_probe/wrapper.py @@ -1,3 +1,4 @@ +from copy import deepcopy from datetime import datetime from typing import List @@ -7,7 +8,7 @@ from edsteva.probes.base import BaseProbe from edsteva.viz.plots.plot_probe.fitted_probe import fitted_probe_line from edsteva.viz.plots.plot_probe.probe import probe_line -from edsteva.viz.utils import filter_predictor, save_html +from edsteva.viz.utils import configure_style, filter_predictor, json_dir, save_html def plot_probe( @@ -20,15 +21,8 @@ def plot_probe( end_date: datetime = None, care_site_short_name: List[int] = None, save_path: str = None, - x_axis_title: str = "Time (Month Year)", - x_grid: bool = True, - y_axis_title: str = "Completeness predictor c(t)", - y_grid: bool = True, - show_n_visit: bool = False, - show_per_care_site: bool = True, - labelAngle: float = -90, - labelFontSize: float = 12, - titleFontSize: float = 13, + legend_predictor: str = "Predictor c(t)", + legend_model: str = "Model f(t)", **kwargs, ): r""" @@ -65,7 +59,7 @@ def plot_probe( Label name for the y axis. y_grid: bool, optional, If False, remove the grid for the y axis. - show_n_visit: bool, optional + show_n_events: bool, optional If True, compute the sum of the number of visit instead of the mean of the completeness predictor $c(t)$. show_per_care_site: bool, optional If True, the average completeness predictor $c(t)$ is computed for each care site independently. If False, it is computed over all care sites. @@ -76,15 +70,26 @@ def plot_probe( titleFontSize: float, optional The font size of the titles. """ + if save_path: + alt.data_transformers.enable("default") + alt.data_transformers.disable_max_rows() + + else: + alt.data_transformers.register("json_dir", json_dir) + alt.data_transformers.enable("json_dir") - index = list(set(probe._index).difference(["care_site_level", "care_site_id"])) - if show_per_care_site: - index = index + ["care_site_short_name"] + probe_config = deepcopy(probe.get_predictor_dashboard_config()) + chart_style = probe_config["chart_style"] + predictor = probe.predictor.copy() + predictor = probe.add_names_columns(predictor) + indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) if fitted_model: - predictor = fitted_model.predict(probe) + predictor = fitted_model.predict(probe).copy() else: - predictor = probe.predictor + predictor = probe.predictor.copy() + + predictor = probe.add_names_columns(predictor) predictor = filter_predictor( predictor=predictor, @@ -97,38 +102,32 @@ def plot_probe( **kwargs, ) - index = [variable for variable in index if len(predictor[variable].unique()) >= 2] - - alt.data_transformers.disable_max_rows() + indexes = [ + {"field": variable, "title": variable.replace("_", " ").capitalize()} + for variable in indexes + if len(predictor[variable].unique()) >= 2 + ] if fitted_model: + model_config = deepcopy(fitted_model.get_predictor_dashboard_config()) chart = fitted_probe_line( predictor=predictor, - index=index, - x_axis_title=x_axis_title, - y_axis_title=y_axis_title, - x_grid=x_grid, - y_grid=y_grid, - labelAngle=labelAngle, - labelFontSize=labelFontSize, + probe_config=probe_config, + model_config=model_config, + indexes=indexes, + legend_predictor=legend_predictor, + legend_model=legend_model, ) else: chart = probe_line( predictor=predictor, - index=index, - x_axis_title=x_axis_title, - y_axis_title=y_axis_title, - x_grid=x_grid, - y_grid=y_grid, - show_n_visit=show_n_visit, - labelAngle=labelAngle, + probe_config=probe_config, + indexes=indexes, ) if save_path: save_html( - obj=chart.configure_axis( - labelFontSize=labelFontSize, titleFontSize=titleFontSize - ).configure_legend(labelFontSize=labelFontSize), + obj=configure_style(chart=chart, chart_style=chart_style), filename=save_path, ) diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index a361789d..276737ca 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -1,16 +1,311 @@ import os from datetime import datetime +from functools import reduce from math import ceil, floor, log10 from pathlib import Path -from typing import List, Union +from typing import Dict, List, Union import altair as alt import pandas as pd from loguru import logger +from toolz.curried import pipe +from edsteva import CACHE_DIR from edsteva.probes.utils import CARE_SITE_LEVEL_NAMES, filter_table_by_date +def generate_main_chart( + base: alt.Chart, + main_chart_config: Dict[str, str], + index_selection: alt.Selection = None, + index_fields: List[str] = None, +): + if index_fields: + base = base.transform_fold(index_fields, as_=["index", "value"]) + if "aggregates" in main_chart_config.keys(): + for aggregate in main_chart_config["aggregates"]: + base = base.transform_joinaggregate(**aggregate) + if "calculates" in main_chart_config.keys(): + for calculate in main_chart_config["calculates"]: + base = base.transform_calculate(**calculate) + if "filters" in main_chart_config.keys(): + for filter in main_chart_config["filters"]: + base = base.transform_filter(**filter) + main_chart = base.encode(**main_chart_config["encode"]) + if index_selection: + main_chart = main_chart.transform_filter(index_selection) + else: + main_chart = base.encode( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "mean(c):Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + ) + return main_chart.properties(**main_chart_config["properties"]) + + +def generate_model_line( + main_chart: alt.Chart, + model_line_config: Dict[str, str], +): + model_line = main_chart.mark_line(**model_line_config["mark_line"]) + if "aggregates" in model_line_config.keys(): + for aggregate in model_line_config["aggregates"]: + model_line = model_line.transform_joinaggregate(**aggregate) + if "calculates" in model_line_config.keys(): + for calculate in model_line_config["calculates"]: + model_line = model_line.transform_calculate(**calculate) + if "filters" in model_line_config.keys(): + for filter in model_line_config["filters"]: + model_line = model_line.transform_filter(**filter) + model_line = model_line.encode(**model_line_config["encode"]) + + return model_line + + +def generate_error_line( + main_chart: alt.Chart, + error_line_config: Dict[str, str], +): + error_line = main_chart.mark_errorband( + **error_line_config["mark_errorband"] + ).encode(**error_line_config["encode"]) + return error_line + + +def generate_probe_line( + main_chart: alt.Chart, + probe_line_config: Dict[str, str], +): + probe_line = main_chart.mark_line().encode(**probe_line_config["encode"]) + + return probe_line + + +def generate_time_line( + base: alt.Chart, + time_line_config: Dict[str, str], +): + time_selection = alt.selection_interval(encodings=["x"]) + time_line = ( + base.mark_line() + .encode(**time_line_config["encode"]) + .add_selection(time_selection) + ).properties(**time_line_config["properties"]) + return time_line, time_selection + + +def generate_horizontal_bar_charts( + base: alt.Chart, + horizontal_bar_charts_config: Dict[str, str], +): + horizontal_bar_charts = {} + y_variables_selections = {} + for y_variable in horizontal_bar_charts_config["y"]: + y_variable_bar_charts = [] + y_variable_selection = alt.selection_multi(fields=[y_variable["field"]]) + y_variables_selections[y_variable["field"]] = y_variable_selection + y_variable_base_chart = ( + base.mark_bar() + .encode( + y=alt.Y(**y_variable), + ) + .add_selection(y_variable_selection) + ) + for x_variable in horizontal_bar_charts_config["x"]: + y_index_variable_color = alt.condition( + y_variables_selections[y_variable["field"]], + alt.Color( + "{}:N".format(y_variable["field"]), + legend=None, + sort=x_variable["sort"], + ), + alt.value("lightgray"), + ) + y_variable_bar_chart = y_variable_base_chart.encode( + x=x_variable["x"], + color=y_index_variable_color, + tooltip=x_variable["tooltip"], + ) + + y_variable_bar_charts.append(y_variable_bar_chart) + horizontal_bar_charts[y_variable["field"]] = y_variable_bar_charts + return horizontal_bar_charts, y_variables_selections + + +def generate_vertical_bar_charts( + base: alt.Chart, + vertical_bar_charts_config: Dict[str, str], +): + vertical_bar_charts = {} + x_variables_selections = {} + for x_variable in vertical_bar_charts_config["x"]: + x_variable_bar_charts = [] + x_variable_selection = alt.selection_multi(fields=[x_variable["field"]]) + x_variables_selections[x_variable["field"]] = x_variable_selection + x_variable_base_chart = ( + base.mark_bar() + .encode( + x=alt.X(**x_variable), + ) + .add_selection(x_variable_selection) + ) + + for y_variable in vertical_bar_charts_config["y"]: + x_index_variable_color = alt.condition( + x_variables_selections[x_variable["field"]], + alt.Color( + "{}:N".format(x_variable["field"]), + legend=None, + sort=y_variable["sort"], + ), + alt.value("lightgray"), + ) + x_variable_bar_chart = x_variable_base_chart.encode( + y=y_variable["y"], + color=x_index_variable_color, + tooltip=y_variable["tooltip"], + ) + + x_variable_bar_charts.append(x_variable_bar_chart) + vertical_bar_charts[x_variable["field"]] = x_variable_bar_charts + return vertical_bar_charts, x_variables_selections + + +def add_interactive_selection( + base: alt.Chart, + selections: Dict[str, alt.Selection], + selection_charts: Dict[str, List[alt.Chart]] = {}, +): + for selection_variable, selection in selections.items(): + base = base.transform_filter(selection) + for chart_variable in selection_charts.keys(): + if chart_variable != selection_variable: + for i in range(len(selection_charts[chart_variable])): + selection_charts[chart_variable][i] = selection_charts[ + chart_variable + ][i].transform_filter(selection) + return base + + +def add_estimates_filters( + base: alt.Chart, + estimates_filters: Dict[str, alt.Selection], + selection_charts: Dict[str, List[alt.Chart]] = {}, +): + for estimate_filter in estimates_filters: + base = base.transform_filter(estimate_filter) + for chart_variable in selection_charts.keys(): + for i in range(len(selection_charts[chart_variable])): + selection_charts[chart_variable][i] = selection_charts[chart_variable][ + i + ].transform_filter(estimate_filter) + + return base + + +def create_groupby_selection( + indexes: List[str], +): + index_fields = [index["field"] for index in indexes] + if len(index_fields) >= 2: + index_labels = [index["title"] for index in indexes] + index_selection = alt.selection_single( + fields=["index"], + bind=alt.binding_radio( + name="Group by: ", options=index_fields, labels=index_labels + ), + init={"index": index_fields[0]}, + ) + else: + index_selection = None + return index_selection, index_fields + + +def configure_style( + chart: alt.Chart, + chart_style: Dict[str, float], +): + return chart.configure_axis( + labelFontSize=chart_style["labelFontSize"], + titleFontSize=chart_style["titleFontSize"], + ).configure_legend(labelFontSize=chart_style["labelFontSize"]) + + +def concatenate_charts( + main_chart: alt.Chart, + horizontal_bar_charts: Dict[str, List[alt.Chart]], + vertical_bar_charts: Dict[str, List[alt.Chart]], + time_line: alt.Chart = None, + spacing: float = 10, +): + bar_charts_rows = [] + for bar_charts_row in horizontal_bar_charts.values(): + bar_charts_row = reduce( + lambda bar_chart_1, bar_chart_2: (bar_chart_1 | bar_chart_2).resolve_scale( + color="independent" + ), + bar_charts_row, + ) + bar_charts_rows.append(bar_charts_row) + horizontal_bar_charts = reduce( + lambda bar_chart_1, bar_chart_2: (bar_chart_1 & bar_chart_2).resolve_scale( + color="independent" + ), + bar_charts_rows, + ) + + bar_charts_columns = [] + for bar_charts_column in vertical_bar_charts.values(): + bar_charts_column = reduce( + lambda bar_chart_1, bar_chart_2: (bar_chart_1 | bar_chart_2).resolve_scale( + color="independent" + ), + bar_charts_column, + ) + bar_charts_columns.append(bar_charts_column) + vertical_bar_charts = reduce( + lambda bar_chart_1, bar_chart_2: (bar_chart_1 & bar_chart_2).resolve_scale( + color="independent" + ), + bar_charts_columns, + ) + if time_line: + top_chart = alt.vconcat(main_chart, time_line, spacing=100).resolve_scale( + color="independent" + ) + else: + top_chart = main_chart + concat_chart = alt.vconcat( + top_chart, + (vertical_bar_charts | horizontal_bar_charts), + spacing=spacing, + ) + return concat_chart + + +def month_diff(x, y): + end = x.dt.to_period("M").view(dtype="int64") + start = y.dt.to_period("M").view(dtype="int64") + return end - start + + +def json_dir(data): + os.makedirs(CACHE_DIR / "data_viz", exist_ok=True) + return pipe( + data, + alt.to_json( + filename=(CACHE_DIR / "data_viz").__str__() + "/{prefix}-{hash}.{extension}" + ), + ) + + def save_html(obj: alt.Chart, filename: str): """Save chart in the specified file @@ -34,11 +329,12 @@ def save_html(obj: alt.Chart, filename: str): logger.info("The chart has been saved in {}", filename) -def round_it(x: float, sig: int): +def round_up(x: float, sig: int): if x == 0: return 0 else: - return round(x, sig - int(floor(log10(abs(x)))) - 1) + decimals = sig - floor(log10(abs(x))) - 1 + return ceil(x * 10**decimals) / 10**decimals def scale_it(x: float): @@ -67,27 +363,25 @@ def filter_predictor( ) # Care site level - if not care_site_level: - if len(predictor.care_site_level.unique()) == 1: - care_site_level = predictor.care_site_level.unique()[0] - else: - care_site_level = CARE_SITE_LEVEL_NAMES["Hospital"] - elif care_site_level in CARE_SITE_LEVEL_NAMES.keys(): - care_site_level = CARE_SITE_LEVEL_NAMES[care_site_level] - - if care_site_level not in predictor.care_site_level.unique(): - raise AttributeError( - "The selected care site level {} is not part of the computed care site levels {}".format( - care_site_level, list(predictor.care_site_level.unique()) - ) + if care_site_level: + if not isinstance(care_site_level, list): + care_site_level = [care_site_level] + care_site_levels = [] + for care_site_lvl in care_site_level: + if care_site_lvl in CARE_SITE_LEVEL_NAMES.keys(): + care_site_lvl = CARE_SITE_LEVEL_NAMES[care_site_lvl] + if care_site_lvl not in predictor.care_site_level.unique(): + raise AttributeError( + "The selected care site level {} is not part of the computed care site levels {}".format( + care_site_level, list(predictor.care_site_level.unique()) + ) + ) + care_site_levels.append(care_site_lvl) + predictor = predictor[predictor.care_site_level.isin(care_site_levels)] + logger.debug( + "Predictor has been filtered on the selected care site level : {}", + care_site_levels, ) - predictor = predictor[predictor["care_site_level"] == care_site_level].drop( - columns=["care_site_level"] - ) - logger.debug( - "Predictor has been filtered on the selected care site level : {}", - care_site_level, - ) # Stay type if stay_type: @@ -127,6 +421,9 @@ def filter_predictor( logger.debug( "Predictor has been filtered on the selected {} : {}", key, - care_site_short_name, + value, ) + + if predictor.empty: + raise TypeError("Empty predictor: no data to plot.") return predictor From cdec8bdf27c1269be14d216b59077b853f94267d Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 23 Mar 2023 18:24:22 +0100 Subject: [PATCH 013/127] Add registry --- edsteva/__init__.py | 5 +- edsteva/io/synthetic/synthetic.py | 64 +- edsteva/metrics/__init__.py | 8 + edsteva/models/base.py | 74 +- .../rectangle_function/algos/__init__.py | 8 +- .../rectangle_function/rectangle_function.py | 41 +- .../models/rectangle_function/viz_config.py | 196 --- .../viz_configs/__init__.py | 46 + .../viz_configs/defaults.py | 200 +++ .../viz_configs/normalized_probe_dashboard.py | 38 + .../viz_configs/normalized_probe_plot.py | 34 + .../viz_configs/probe_dashboard.py | 11 + .../viz_configs/probe_plot.py | 9 + .../models/step_function/algos/__init__.py | 7 +- edsteva/models/step_function/step_function.py | 40 +- edsteva/models/step_function/viz_config.py | 181 --- .../step_function/viz_configs/__init__.py | 42 + .../step_function/viz_configs/defaults.py | 162 +++ .../viz_configs/normalized_probe_dashboard.py | 26 + .../viz_configs/normalized_probe_plot.py | 22 + .../viz_configs/probe_dashboard.py | 11 + .../step_function/viz_configs/probe_plot.py | 9 + edsteva/probes/__init__.py | 5 +- edsteva/probes/base.py | 16 +- edsteva/probes/biology/biology.py | 150 +- .../completeness_predictors/__init__.py | 11 + .../per_measurement.py | 150 ++ .../per_visit.py} | 2 +- .../probes/biology/viz_configs/__init__.py | 55 + .../viz_configs/per_measurement/defaults.py | 218 +++ .../estimates_densities_plot.py | 14 + .../normalized_probe_dashboard.py | 24 + .../per_measurement/normalized_probe_plot.py | 10 + .../per_measurement/probe_dashboard.py | 21 + .../viz_configs/per_measurement/probe_plot.py | 9 + .../biology/viz_configs/per_visit/defaults.py | 218 +++ .../per_visit/estimates_densities_plot.py | 17 + .../per_visit/normalized_probe_dashboard.py | 27 + .../per_visit/normalized_probe_plot.py | 13 + .../viz_configs/per_visit/probe_dashboard.py | 24 + .../viz_configs/per_visit/probe_plot.py | 12 + .../completeness_predictors/__init__.py | 16 + .../completeness_predictors/per_condition.py | 242 ++++ .../completeness_predictors/per_visit.py | 251 ++++ edsteva/probes/condition/condition.py | 118 ++ .../probes/condition/condition_per_visit.py | 290 ---- edsteva/probes/condition/viz_config.py | 356 ----- .../probes/condition/viz_configs/__init__.py | 81 ++ .../viz_configs/per_condition/defaults.py | 231 +++ .../per_condition/estimates_densities_plot.py | 11 + .../normalized_probe_dashboard.py | 21 + .../per_condition/normalized_probe_plot.py | 10 + .../per_condition/probe_dashboard.py | 18 + .../viz_configs/per_condition/probe_plot.py | 9 + .../viz_configs/per_visit/defaults.py | 247 ++++ .../per_visit/estimates_densities_plot.py | 11 + .../per_visit/normalized_probe_dashboard.py | 21 + .../per_visit/normalized_probe_plot.py | 10 + .../viz_configs/per_visit/probe_dashboard.py | 18 + .../viz_configs/per_visit/probe_plot.py | 9 + .../note/completeness_predictors/__init__.py | 15 + .../note/completeness_predictors/per_note.py | 209 +++ .../note/completeness_predictors/per_visit.py | 223 +++ edsteva/probes/note/note.py | 112 ++ edsteva/probes/note/note_per_visit.py | 265 ---- edsteva/probes/note/viz_config.py | 327 ----- edsteva/probes/note/viz_configs/__init__.py | 74 + .../note/viz_configs/per_note/defaults.py | 216 +++ .../per_note/estimates_densities_plot.py | 11 + .../per_note/normalized_probe_dashboard.py | 21 + .../per_note/normalized_probe_plot.py | 10 + .../viz_configs/per_note/probe_dashboard.py | 18 + .../note/viz_configs/per_note/probe_plot.py | 9 + .../note/viz_configs/per_visit/defaults.py | 235 ++++ .../per_visit/estimates_densities_plot.py | 11 + .../per_visit/normalized_probe_dashboard.py | 21 + .../per_visit/normalized_probe_plot.py | 10 + .../viz_configs/per_visit/probe_dashboard.py | 18 + .../note/viz_configs/per_visit/probe_plot.py | 9 + edsteva/probes/utils.py | 1251 ----------------- edsteva/probes/utils/filter_df.py | 584 ++++++++ edsteva/probes/utils/prepare_df.py | 609 ++++++++ edsteva/probes/utils/utils.py | 76 + .../visit/completeness_predictors/__init__.py | 11 + .../completeness_predictors/per_visit.py | 187 +++ edsteva/probes/visit/visit.py | 171 +-- edsteva/probes/visit/viz_configs/__init__.py | 53 + .../visit/viz_configs/per_visit/defaults.py | 202 +++ .../per_visit/estimates_densities_plot.py | 11 + .../per_visit/normalized_probe_dashboard.py | 21 + .../per_visit/normalized_probe_plot.py | 10 + .../viz_configs/per_visit/probe_dashboard.py | 18 + .../visit/viz_configs/per_visit/probe_plot.py | 9 + edsteva/utils/file_management.py | 43 + edsteva/utils/registry.py | 82 ++ edsteva/viz/dashboards/__init__.py | 10 +- .../__init__.py | 0 .../normalized_probe.py} | 12 +- .../__init__.py | 0 .../fitted_probe.py | 0 .../{predictor_dashboard => probe}/probe.py | 2 +- .../{predictor_dashboard => probe}/wrapper.py | 15 +- edsteva/viz/plots/__init__.py | 12 +- .../estimates_densities.py | 4 +- .../normalized_probe/normalized_probe.py | 10 +- .../plots/{plot_probe => probe}/__init__.py | 0 .../{plot_probe => probe}/fitted_probe.py | 0 .../viz/plots/{plot_probe => probe}/probe.py | 0 .../plots/{plot_probe => probe}/wrapper.py | 10 +- edsteva/viz/utils.py | 11 +- poetry.lock | 18 +- pyproject.toml | 1 + 112 files changed, 6174 insertions(+), 3283 deletions(-) delete mode 100644 edsteva/models/rectangle_function/viz_config.py create mode 100644 edsteva/models/rectangle_function/viz_configs/__init__.py create mode 100644 edsteva/models/rectangle_function/viz_configs/defaults.py create mode 100644 edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py create mode 100644 edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py create mode 100644 edsteva/models/rectangle_function/viz_configs/probe_dashboard.py create mode 100644 edsteva/models/rectangle_function/viz_configs/probe_plot.py delete mode 100644 edsteva/models/step_function/viz_config.py create mode 100644 edsteva/models/step_function/viz_configs/__init__.py create mode 100644 edsteva/models/step_function/viz_configs/defaults.py create mode 100644 edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py create mode 100644 edsteva/models/step_function/viz_configs/normalized_probe_plot.py create mode 100644 edsteva/models/step_function/viz_configs/probe_dashboard.py create mode 100644 edsteva/models/step_function/viz_configs/probe_plot.py create mode 100644 edsteva/probes/biology/completeness_predictors/__init__.py create mode 100644 edsteva/probes/biology/completeness_predictors/per_measurement.py rename edsteva/probes/biology/{biology_per_visit.py => completeness_predictors/per_visit.py} (99%) create mode 100644 edsteva/probes/biology/viz_configs/__init__.py create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/defaults.py create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/defaults.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/probe_plot.py create mode 100644 edsteva/probes/condition/completeness_predictors/__init__.py create mode 100644 edsteva/probes/condition/completeness_predictors/per_condition.py create mode 100644 edsteva/probes/condition/completeness_predictors/per_visit.py create mode 100644 edsteva/probes/condition/condition.py delete mode 100644 edsteva/probes/condition/condition_per_visit.py delete mode 100644 edsteva/probes/condition/viz_config.py create mode 100644 edsteva/probes/condition/viz_configs/__init__.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/defaults.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/probe_plot.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/defaults.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/probe_plot.py create mode 100644 edsteva/probes/note/completeness_predictors/__init__.py create mode 100644 edsteva/probes/note/completeness_predictors/per_note.py create mode 100644 edsteva/probes/note/completeness_predictors/per_visit.py create mode 100644 edsteva/probes/note/note.py delete mode 100644 edsteva/probes/note/note_per_visit.py delete mode 100644 edsteva/probes/note/viz_config.py create mode 100644 edsteva/probes/note/viz_configs/__init__.py create mode 100644 edsteva/probes/note/viz_configs/per_note/defaults.py create mode 100644 edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py create mode 100644 edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py create mode 100644 edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py create mode 100644 edsteva/probes/note/viz_configs/per_note/probe_dashboard.py create mode 100644 edsteva/probes/note/viz_configs/per_note/probe_plot.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/defaults.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/probe_plot.py delete mode 100644 edsteva/probes/utils.py create mode 100644 edsteva/probes/utils/filter_df.py create mode 100644 edsteva/probes/utils/prepare_df.py create mode 100644 edsteva/probes/utils/utils.py create mode 100644 edsteva/probes/visit/completeness_predictors/__init__.py create mode 100644 edsteva/probes/visit/completeness_predictors/per_visit.py create mode 100644 edsteva/probes/visit/viz_configs/__init__.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/defaults.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/probe_plot.py create mode 100644 edsteva/utils/file_management.py create mode 100644 edsteva/utils/registry.py rename edsteva/viz/dashboards/{estimates_dashboard => normalized_probe}/__init__.py (100%) rename edsteva/viz/dashboards/{estimates_dashboard/estimates_dashboard.py => normalized_probe/normalized_probe.py} (96%) rename edsteva/viz/dashboards/{predictor_dashboard => probe}/__init__.py (100%) rename edsteva/viz/dashboards/{predictor_dashboard => probe}/fitted_probe.py (100%) rename edsteva/viz/dashboards/{predictor_dashboard => probe}/probe.py (99%) rename edsteva/viz/dashboards/{predictor_dashboard => probe}/wrapper.py (92%) rename edsteva/viz/plots/{plot_probe => probe}/__init__.py (100%) rename edsteva/viz/plots/{plot_probe => probe}/fitted_probe.py (100%) rename edsteva/viz/plots/{plot_probe => probe}/probe.py (100%) rename edsteva/viz/plots/{plot_probe => probe}/wrapper.py (93%) diff --git a/edsteva/__init__.py b/edsteva/__init__.py index 97aa47c6..3ae6e944 100644 --- a/edsteva/__init__.py +++ b/edsteva/__init__.py @@ -48,7 +48,7 @@ def set_env_variables() -> None: def improve_performances( - to_add_conf: List[Tuple[str, str]] = [], + to_add_conf: List[Tuple[str, str]] = None, quiet_spark: bool = True, ) -> Tuple[SparkSession, SparkContext, SparkSession.sql]: """ @@ -85,6 +85,9 @@ def improve_performances( os.environ["TZ"] = tz time.tzset() + if to_add_conf is None: + to_add_conf = [] + to_add_conf.extend( [ ("spark.app.name", f"{os.environ.get('USER')}_scikit"), diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index ecf77991..462203e4 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -227,6 +227,7 @@ def generate_note_step( note_type, care_site_id, date_col, + note_date_col, id_visit_col, note_type_col, t0_visit, @@ -236,23 +237,31 @@ def generate_note_step( c_before = np.random.uniform(0, 0.2) c_after = np.random.uniform(0.8, 1) - note_before_t0_visit = visit_care_site[visit_care_site[date_col] <= t0_visit][ - [id_visit_col] - ].sample(frac=c_before) - + note_before_t0_visit = ( + visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] + .sample(frac=c_before) + .rename(columns={date_col: note_date_col}) + ) # Stratify visit between t0_visit and t0 to # ensure that these elements are represented # in the final notes dataset. - note_before_t0 = visit_care_site[ - (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) - ][[id_visit_col]].sample(frac=c_before) + note_before_t0 = ( + visit_care_site[ + (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) + ][[id_visit_col, date_col]] + .sample(frac=c_before) + .rename(columns={date_col: note_date_col}) + ) - note_after_t0 = visit_care_site[visit_care_site[date_col] > t0][ - [id_visit_col] - ].sample(frac=c_after) + note_after_t0 = ( + visit_care_site[visit_care_site[date_col] > t0][[id_visit_col, date_col]] + .sample(frac=c_after) + .rename(columns={date_col: note_date_col}) + ) note = pd.concat([note_before_t0_visit, note_before_t0, note_after_t0]) + note[note_date_col] = note[note_date_col].astype("datetime64[s]") note[note_type_col] = note_type note["care_site_id"] = care_site_id note["t_0"] = t0 @@ -265,6 +274,7 @@ def generate_note_rect( note_type, care_site_id, date_col, + note_date_col, id_visit_col, note_type_col, t0_visit, @@ -275,17 +285,24 @@ def generate_note_rect( c_out = np.random.uniform(0, 0.1) c_in = np.random.uniform(0.8, 1) - note_before_t0 = visit_care_site[visit_care_site[date_col] <= t0][ - [id_visit_col] - ].sample(frac=c_out) - - note_between_t0_t1 = visit_care_site[ - (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) - ][[id_visit_col]].sample(frac=c_in) + note_before_t0 = ( + visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] + .sample(frac=c_out) + .rename(columns={date_col: note_date_col}) + ) + note_between_t0_t1 = ( + visit_care_site[ + (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) + ][[id_visit_col, date_col]] + .sample(frac=c_in) + .rename(columns={date_col: note_date_col}) + ) - note_after_t1 = visit_care_site[(visit_care_site[date_col] > t1)][ - [id_visit_col] - ].sample(frac=c_out) + note_after_t1 = ( + visit_care_site[(visit_care_site[date_col] > t1)][[id_visit_col, date_col]] + .sample(frac=c_out) + .rename(columns={date_col: note_date_col}) + ) note = pd.concat( [ @@ -295,6 +312,7 @@ def generate_note_rect( ] ) + note[note_date_col] = note[note_date_col].astype("datetime64[s]") note[note_type_col] = note_type note["care_site_id"] = care_site_id note["t_0"] = t0 @@ -407,6 +425,8 @@ class SyntheticData: id_note_col: str = "note_id" id_bio_col: str = "measurement_id" note_type_col: str = "note_class_source_value" + note_date_col: str = "note_datetime" + condition_date_col: str = "condition_start_datetime" date_col: str = "visit_start_datetime" end_date_col: str = "visit_end_datetime" detail_date_col: str = "visit_detail_start_datetime" @@ -565,10 +585,12 @@ def _generate_condition_occurrence(self, visit_detail): n_condition = np.random.randint(1, 5) detail_id = visit[col_to_idx[self.id_detail_col]] visit_id = visit[col_to_idx[self.id_visit_col]] + date = visit[col_to_idx[self.detail_date_col]] condition = pd.DataFrame( { self.id_detail_col: [detail_id] * n_condition, self.id_visit_col: [visit_id] * n_condition, + self.condition_date_col: [date] * n_condition, } ) condition_occurrence.append(condition) @@ -593,6 +615,7 @@ def _generate_note( id_visit_col = self.id_visit_col id_note_col = self.id_note_col note_type_col = self.note_type_col + note_date_col = self.note_date_col notes = [] for care_site_id in hospital_ids: @@ -606,6 +629,7 @@ def _generate_note( params = dict( care_site_id=care_site_id, date_col=date_col, + note_date_col=note_date_col, id_visit_col=id_visit_col, note_type_col=note_type_col, t0_visit=t0_visit, diff --git a/edsteva/metrics/__init__.py b/edsteva/metrics/__init__.py index 35aab801..9e211bf7 100644 --- a/edsteva/metrics/__init__.py +++ b/edsteva/metrics/__init__.py @@ -1,3 +1,11 @@ +import catalogue + from edsteva.metrics.error import error from edsteva.metrics.error_after_t0 import error_after_t0 from edsteva.metrics.error_between_t0_t1 import error_between_t0_t1 + +metrics = catalogue.create("edsteva", "metrics") + +metrics.register("error", func=error) +metrics.register("error_after_t0", func=error_after_t0) +metrics.register("error_between_t0_t1", func=error_between_t0_t1) diff --git a/edsteva/models/base.py b/edsteva/models/base.py index 95f383c0..e9d9bb5d 100644 --- a/edsteva/models/base.py +++ b/edsteva/models/base.py @@ -1,17 +1,14 @@ from abc import ABCMeta, abstractmethod from functools import reduce -from typing import Callable, List +from typing import List import pandas as pd from edsteva import CACHE_DIR +from edsteva.metrics import metrics from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import ( - delete_object, - filter_table_by_date, - load_object, - save_object, -) +from edsteva.probes.utils.filter_df import filter_table_by_date +from edsteva.utils.file_management import delete_object, load_object, save_object class BaseModel(metaclass=ABCMeta): @@ -85,7 +82,7 @@ def predict_process( def fit( self, probe: BaseProbe, - metric_functions: List[Callable] = None, + metric_functions: List[str] = None, start_date: str = None, end_date: str = None, **kwargs, @@ -96,7 +93,7 @@ def fit( ---------- probe : BaseProbe Target variable to be fitted - metric_functions : List[Callable], optional + metric_functions : List[str], optional Metrics to apply on the fitted Probe. By default it will apply the default metric specified in the model. **EXAMPLE**: `[error, error_after_t0]` @@ -142,16 +139,16 @@ def fit( **kwargs, ) - metrics = self._compute_metrics( + metrics_df = self._compute_metrics( predictor=predictor, estimates=estimates, index=index, metric_functions=metric_functions, ) - if metrics is not None: - self._metrics = list(metrics.columns.difference(index)) - self.estimates = estimates.merge(metrics, on=index) + if metrics_df is not None: + self._metrics = list(metrics_df.columns.difference(index)) + self.estimates = estimates.merge(metrics_df, on=index) else: self.estimates = estimates @@ -280,46 +277,27 @@ def _compute_metrics( predictor: pd.DataFrame, estimates: pd.DataFrame, index: List[str], - metric_functions: List[Callable] = None, + metric_functions: List[str] = None, ): - if metric_functions: - if callable(metric_functions): - metrics = metric_functions( - predictor=predictor, estimates=estimates, index=index - ) - elif isinstance(metric_functions, list): - metrics = [] - for metric_function in metric_functions: - if callable(metric_function): - metrics.append( - metric_function( - predictor=predictor, estimates=estimates, index=index - ) - ) - else: - raise TypeError( - "{} is not callable. The metrics input must be a list of callable functions".format( - type(metric_function) - ) - ) - metrics = reduce( - lambda left, right: pd.merge(left, right, on=index), metrics - ) + if metric_functions is None: + if hasattr(self, "_default_metrics"): + metric_functions = self._default_metrics else: - raise TypeError( - "{} is not callable. The metrics input must be a callable function".format( - type(metrics) - ) + metric_functions = [] + if isinstance(metric_functions, str): + metric_functions = [metric_functions] + metrics_df = [] + for metric_function in metric_functions: + metrics_df.append( + metrics.get(metric_function)( + predictor=predictor, estimates=estimates, index=index ) - - elif hasattr(self, "default_metrics"): - metrics = self.default_metrics( - predictor=predictor, estimates=estimates, index=index ) - else: - metrics = None + metrics_df = reduce( + lambda left, right: pd.merge(left, right, on=index), metrics_df + ) - return metrics + return metrics_df def is_predictable_probe( self, diff --git a/edsteva/models/rectangle_function/algos/__init__.py b/edsteva/models/rectangle_function/algos/__init__.py index b8749e0a..9cc443d0 100644 --- a/edsteva/models/rectangle_function/algos/__init__.py +++ b/edsteva/models/rectangle_function/algos/__init__.py @@ -1,3 +1,7 @@ -from .loss_minimization import loss_minimization +import catalogue -__all__ = ["loss_minimization"] +from edsteva.models.rectangle_function.algos.loss_minimization import loss_minimization + +algos = catalogue.create("edsteva.models.rectangle_function", "algos") + +algos.register("loss_minimization", func=loss_minimization) diff --git a/edsteva/models/rectangle_function/rectangle_function.py b/edsteva/models/rectangle_function/rectangle_function.py index 09bbde85..c4602aac 100644 --- a/edsteva/models/rectangle_function/rectangle_function.py +++ b/edsteva/models/rectangle_function/rectangle_function.py @@ -1,12 +1,10 @@ -from typing import Callable, List +from typing import Dict, List import pandas as pd -from edsteva.metrics import error_between_t0_t1 from edsteva.models import BaseModel -from edsteva.models.rectangle_function import algos - -from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config +from edsteva.models.rectangle_function.algos import algos +from edsteva.models.rectangle_function.viz_configs import viz_configs class RectangleFunction(BaseModel): @@ -49,15 +47,21 @@ class RectangleFunction(BaseModel): | Hôpital | 8312022130 | 'Hospit' | 2022-02-01 | 0.652 | 2022-08-01 | 0.027 | """ - _coefs = ["t_0", "c_0", "t_1"] - get_predictor_dashboard_config = get_predictor_dashboard_config - get_estimates_dashboard_config = get_estimates_dashboard_config + def __init__( + self, + algo: str = "loss_minimization", + _viz_config: Dict[str, str] = None, + ): + self._algo = algo + self._coefs = ["t_0", "c_0", "t_1"] + self._default_metrics = ["error_between_t0_t1"] + if _viz_config is None: + self._viz_config = {} def fit_process( self, predictor: pd.DataFrame, index: List[str] = None, - algo: Callable = algos.loss_minimization, **kwargs, ): """Script to be used by [``fit()``][edsteva.models.base.BaseModel.fit] @@ -73,7 +77,9 @@ def fit_process( algo : Callable, optional Algorithm used for the coefficients estimation ($t_0$ and $c_0$) """ - return algo(predictor, index, **kwargs) + estimates = algos.get(self._algo)(predictor=predictor, index=index, **kwargs) + + return estimates def predict_process( self, @@ -118,6 +124,15 @@ def predict_process( return prediction.drop(columns=self._metrics) + def get_viz_config(self, viz_type: str, **kwargs): + if viz_type in viz_configs.keys(): + _viz_config = self._viz_config.get(viz_type) + if _viz_config is None: + _viz_config = "default" + else: + raise ValueError(f"edsteva has no {viz_type} registry !") + return viz_configs[viz_type].get(_viz_config)(self, **kwargs) + def default_metrics( self, predictor: pd.DataFrame, @@ -137,8 +152,4 @@ def default_metrics( **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` """ - return error_between_t0_t1( - predictor=predictor, - estimates=estimates, - index=index, - ) + return None diff --git a/edsteva/models/rectangle_function/viz_config.py b/edsteva/models/rectangle_function/viz_config.py deleted file mode 100644 index b9b1dcd8..00000000 --- a/edsteva/models/rectangle_function/viz_config.py +++ /dev/null @@ -1,196 +0,0 @@ -import altair as alt - -from edsteva.utils.typing import DataFrame -from edsteva.viz.utils import round_up, scale_it - - -def get_estimates_dashboard_config(self, predictor: DataFrame): - c_0_min_slider = alt.binding_range( - min=0, - max=round_up(predictor.c_0.max(), 2), - step=scale_it(predictor.c_0.max()) / 100, - name="c₀ min: ", - ) - c_0_min_selection = alt.selection_single( - name="c_0_min", - fields=["c_0_min"], - bind=c_0_min_slider, - init={"c_0_min": 0}, - ) - c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min - t_0_slider = alt.binding( - input="t_0", - name="t₀ max: ", - ) - t_0_selection = alt.selection_single( - name="t_0", - fields=["t_0"], - bind=t_0_slider, - init={"t_0": predictor.t_0.max()}, - ) - t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 - t_1_slider = alt.binding( - input="t_1", - name="t₁ min: ", - ) - t_1_selection = alt.selection_single( - name="t_1", - fields=["t_1"], - bind=t_1_slider, - init={"t_1": predictor.t_1.min()}, - ) - t_1_min_filter = alt.datum.t_1 >= t_1_selection.t_1 - error_max_slider = alt.binding_range( - min=0, - max=round_up(predictor.error.max(), 2), - step=scale_it(predictor.error.max()) / 100, - name="error max: ", - ) - error_max_selection = alt.selection_single( - name="error_max", - fields=["error_max"], - bind=error_max_slider, - init={"error_max": round_up(predictor.error.max(), 2)}, - ) - error_max_filter = alt.datum.error <= error_max_selection.error_max - estimates_dashboard_config = dict( - estimates_selections=[ - c_0_min_selection, - t_0_selection, - t_1_selection, - error_max_selection, - ], - estimates_filters=[ - c_0_min_filter, - t_0_min_filter, - t_1_min_filter, - error_max_filter, - ], - probe_line=dict( - encode=dict( - strokeDash=alt.StrokeDash( - "legend_predictor", - title="Predictor line", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - orient="top", - ), - ) - ) - ), - model_line=dict( - mark_line=dict( - color="black", - interpolate="step-after", - strokeDash=[5, 5], - ), - encode=dict( - y="model:Q", - strokeWidth=alt.StrokeWidth( - field="legend_model", - title="Model line", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - symbolDash=[2, 2], - orient="top", - ), - ), - color=alt.Color(), - ), - ), - extra_horizontal_bar_charts=[ - dict( - x=alt.X( - "min(c_0):Q", - title="Min(c₀)", - ), - tooltip=alt.Tooltip("min(c_0):Q", format=".2"), - sort={ - "field": "c_0", - "op": "min", - "order": "descending", - }, - ), - dict( - x=alt.X( - "max(error):Q", - title="Max(error)", - ), - tooltip=alt.Tooltip("max(error):Q", format=".2"), - sort={ - "field": "error", - "op": "max", - "order": "descending", - }, - ), - ], - extra_vertical_bar_charts=[], - ) - return estimates_dashboard_config - - -def get_predictor_dashboard_config(self): - predictor_dashboard_config = dict( - probe_line=dict( - encode=dict( - strokeDash=alt.StrokeDash( - "legend_predictor", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - orient="left", - ), - ) - ) - ), - model_line=dict( - mark_line=dict( - interpolate="step-after", - strokeDash=[5, 5], - ), - encode=dict( - y=alt.Y("min(c_hat)"), - strokeWidth=alt.StrokeWidth( - field="legend_model", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - symbolDash=[2, 2], - orient="left", - ), - ), - ), - ), - extra_horizontal_bar_charts=[ - dict( - x=alt.X( - "min(c_0):Q", - title="Minimum c₀", - axis=alt.Axis(format=".2"), - ), - tooltip=alt.Tooltip( - "min(c_0):Q", - format=".2", - ), - sort={ - "field": "c_0", - "op": "min", - "order": "descending", - }, - ), - ], - extra_vertical_bar_charts=[], - ) - return predictor_dashboard_config diff --git a/edsteva/models/rectangle_function/viz_configs/__init__.py b/edsteva/models/rectangle_function/viz_configs/__init__.py new file mode 100644 index 00000000..8950a2eb --- /dev/null +++ b/edsteva/models/rectangle_function/viz_configs/__init__.py @@ -0,0 +1,46 @@ +import catalogue + +from edsteva.models.rectangle_function.viz_configs.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.models.rectangle_function.viz_configs.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.models.rectangle_function.viz_configs.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.models.rectangle_function.viz_configs.probe_plot import ( + get_probe_plot_config, +) + +normalized_probe_dashboard = catalogue.create( + "edsteva.models.rectangle_function.viz_configs", "normalized_probe_dashboard" +) +normalized_probe_dashboard.register( + "default", func=get_normalized_probe_dashboard_config +) + + +probe_dashboard = catalogue.create( + "edsteva.models.rectangle_function.viz_configs", "probe_dashboard" +) +probe_dashboard.register("default", func=get_probe_dashboard_config) + + +normalized_probe_plot = catalogue.create( + "edsteva.models.rectangle_function.viz_configs", "normalized_probe_plot" +) +normalized_probe_plot.register("default", func=get_normalized_probe_plot_config) + + +probe_plot = catalogue.create( + "edsteva.models.rectangle_function.viz_configs", "probe_plot" +) +probe_plot.register("default", func=get_probe_plot_config) + +viz_configs = dict( + normalized_probe_dashboard=normalized_probe_dashboard, + probe_dashboard=probe_dashboard, + normalized_probe_plot=normalized_probe_plot, + probe_plot=probe_plot, +) diff --git a/edsteva/models/rectangle_function/viz_configs/defaults.py b/edsteva/models/rectangle_function/viz_configs/defaults.py new file mode 100644 index 00000000..9f804550 --- /dev/null +++ b/edsteva/models/rectangle_function/viz_configs/defaults.py @@ -0,0 +1,200 @@ +import altair as alt + +from edsteva.utils.typing import DataFrame +from edsteva.viz.utils import round_up, scale_it + + +def get_c_0_min_selection(predictor: DataFrame): + c_0_min_slider = alt.binding_range( + min=0, + max=round_up(predictor.c_0.max(), 2), + step=scale_it(predictor.c_0.max()) / 100, + name="c₀ min: ", + ) + c_0_min_selection = alt.selection_single( + name="c_0_min", + fields=["c_0_min"], + bind=c_0_min_slider, + init={"c_0_min": 0}, + ) + c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min + return c_0_min_selection, c_0_min_filter + + +def get_error_max_selection(predictor: DataFrame): + error_max_slider = alt.binding_range( + min=0, + max=round_up(predictor.error.max(), 2), + step=scale_it(predictor.error.max()) / 100, + name="error max: ", + ) + error_max_selection = alt.selection_single( + name="error_max", + fields=["error_max"], + bind=error_max_slider, + init={"error_max": round_up(predictor.error.max(), 2)}, + ) + error_max_filter = alt.datum.error <= error_max_selection.error_max + return error_max_selection, error_max_filter + + +def get_t_0_selection(predictor: DataFrame): + t_0_slider = alt.binding( + input="t_0", + name="t₀ max: ", + ) + t_0_selection = alt.selection_single( + name="t_0", + fields=["t_0"], + bind=t_0_slider, + init={"t_0": predictor.t_0.astype(str).max()}, + ) + t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 + return t_0_selection, t_0_min_filter + + +def get_t_1_selection(predictor: DataFrame): + t_1_slider = alt.binding( + input="t_1", + name="t₁ min: ", + ) + t_1_selection = alt.selection_single( + name="t_1", + fields=["t_1"], + bind=t_1_slider, + init={"t_1": predictor.t_1.min()}, + ) + t_1_min_filter = alt.datum.t_1 >= t_1_selection.t_1 + return t_1_selection, t_1_min_filter + + +normalized_probe_line = dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="Predictor line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="top", + ), + ) + ) +) +probe_line = dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="left", + ), + ) + ) +) +normalized_model_line = dict( + mark_line=dict( + color="black", + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y="model:Q", + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="Model line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="top", + ), + ), + ), +) + +model_line = dict( + mark_line=dict( + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y=alt.Y("min(c_hat)"), + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="left", + ), + ), + ), + aggregates=[ + dict( + max_t0="max(t_0)", + groupby=["value", "date"], + ), + ], + filters=[dict(filter=alt.datum.t_0 == alt.datum.max_t0)], +) + +horizontal_min_c0 = dict( + x=alt.X( + "min(c_0):Q", + title="Min(c₀)", + ), + tooltip=alt.Tooltip("min(c_0):Q", format=".2"), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, +) +vertical_min_c0 = dict( + y=alt.Y( + "min(c_0):Q", + title="Min(c₀)", + ), + tooltip=alt.Tooltip("min(c_0):Q", format=".2"), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, +) +horizontal_max_error = dict( + x=alt.X( + "max(error):Q", + title="Max(error)", + ), + tooltip=alt.Tooltip("max(error):Q", format=".2"), + sort={ + "field": "error", + "op": "max", + "order": "descending", + }, +) +vertical_max_error = dict( + y=alt.Y( + "max(error):Q", + title="Max(error)", + ), + tooltip=alt.Tooltip("max(error):Q", format=".2"), + sort={ + "field": "error", + "op": "max", + "order": "descending", + }, +) diff --git a/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py b/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py new file mode 100644 index 00000000..a19eb982 --- /dev/null +++ b/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py @@ -0,0 +1,38 @@ +from edsteva.utils.typing import DataFrame + +from .defaults import ( + get_c_0_min_selection, + get_error_max_selection, + get_t_0_selection, + get_t_1_selection, + horizontal_max_error, + horizontal_min_c0, + normalized_model_line, + normalized_probe_line, +) + + +def get_normalized_probe_dashboard_config(self, predictor: DataFrame): + c_0_min_selection, c_0_min_filter = get_c_0_min_selection(predictor=predictor) + t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) + t_1_selection, t_1_min_filter = get_t_1_selection(predictor=predictor) + error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) + normalized_probe_plot_config = dict( + estimates_selections=[ + t_0_selection, + t_1_selection, + c_0_min_selection, + error_max_selection, + ], + estimates_filters=[ + t_0_min_filter, + t_1_min_filter, + c_0_min_filter, + error_max_filter, + ], + probe_line=normalized_probe_line, + model_line=normalized_model_line, + extra_horizontal_bar_charts=[horizontal_min_c0, horizontal_max_error], + extra_vertical_bar_charts=[], + ) + return normalized_probe_plot_config diff --git a/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py b/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py new file mode 100644 index 00000000..8aa5c670 --- /dev/null +++ b/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py @@ -0,0 +1,34 @@ +from edsteva.utils.typing import DataFrame + +from .defaults import ( + get_c_0_min_selection, + get_error_max_selection, + get_t_0_selection, + get_t_1_selection, + normalized_model_line, + normalized_probe_line, +) + + +def get_normalized_probe_plot_config(self, predictor: DataFrame): + c_0_min_selection, c_0_min_filter = get_c_0_min_selection(predictor=predictor) + t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) + t_1_selection, t_1_min_filter = get_t_1_selection(predictor=predictor) + error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) + normalized_probe_dashboard_config = dict( + estimates_selections=[ + t_0_selection, + t_1_selection, + c_0_min_selection, + error_max_selection, + ], + estimates_filters=[ + t_0_min_filter, + t_1_min_filter, + c_0_min_filter, + error_max_filter, + ], + probe_line=normalized_probe_line, + model_line=normalized_model_line, + ) + return normalized_probe_dashboard_config diff --git a/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py b/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py new file mode 100644 index 00000000..4f47dadc --- /dev/null +++ b/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py @@ -0,0 +1,11 @@ +from .defaults import horizontal_min_c0, model_line, probe_line + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + probe_line=probe_line, + model_line=model_line, + extra_horizontal_bar_charts=[horizontal_min_c0], + extra_vertical_bar_charts=[], + ) + return probe_dashboard_config diff --git a/edsteva/models/rectangle_function/viz_configs/probe_plot.py b/edsteva/models/rectangle_function/viz_configs/probe_plot.py new file mode 100644 index 00000000..42e64462 --- /dev/null +++ b/edsteva/models/rectangle_function/viz_configs/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import model_line, probe_line + + +def get_probe_plot_config(self): + probe_plot_config = dict( + probe_line=probe_line, + model_line=model_line, + ) + return probe_plot_config diff --git a/edsteva/models/step_function/algos/__init__.py b/edsteva/models/step_function/algos/__init__.py index d62067fb..3caab6bc 100644 --- a/edsteva/models/step_function/algos/__init__.py +++ b/edsteva/models/step_function/algos/__init__.py @@ -1,4 +1,9 @@ +import catalogue + from edsteva.models.step_function.algos.loss_minimization import loss_minimization from edsteva.models.step_function.algos.quantile import quantile -__all__ = ["loss_minimization", "quantile"] +algos = catalogue.create("edsteva.models.step_function", "algos") + +algos.register("loss_minimization", func=loss_minimization) +algos.register("quantile", func=quantile) diff --git a/edsteva/models/step_function/step_function.py b/edsteva/models/step_function/step_function.py index ae55c258..a767b151 100644 --- a/edsteva/models/step_function/step_function.py +++ b/edsteva/models/step_function/step_function.py @@ -1,12 +1,11 @@ -from typing import Callable, List +from typing import Dict, List import pandas as pd -from edsteva.metrics import error_after_t0 +from edsteva.metrics import metrics from edsteva.models import BaseModel -from edsteva.models.step_function import algos - -from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config +from edsteva.models.step_function.algos import algos +from edsteva.models.step_function.viz_configs import viz_configs class StepFunction(BaseModel): @@ -48,16 +47,22 @@ class StepFunction(BaseModel): | Hôpital | 8312022130 | 'Urg_Hospit' | 2022-02-01 | 0.652 | """ - _coefs = ["t_0", "c_0"] - get_predictor_dashboard_config = get_predictor_dashboard_config - get_estimates_dashboard_config = get_estimates_dashboard_config + def __init__( + self, + algo: str = "loss_minimization", + _viz_config: Dict[str, str] = None, + ): + self._algo = algo + self._coefs = ["t_0", "c_0"] + self._default_metrics = ["error_after_t0"] + if _viz_config is None: + self._viz_config = {} def fit_process( self, predictor: pd.DataFrame, index: List[str] = None, - algo: Callable = algos.loss_minimization, - **kwargs + **kwargs, ) -> None: """Script to be used by [``fit()``][edsteva.models.base.BaseModel.fit] @@ -73,7 +78,7 @@ def fit_process( Algorithm used for the coefficients estimation ($t_0$ and $c_0$) """ - estimates = algo(predictor=predictor, index=index, **kwargs) + estimates = algos.get(self._algo)(predictor=predictor, index=index, **kwargs) return estimates[index + self._coefs] @@ -119,6 +124,15 @@ def predict_process( ) return prediction.drop(columns=self._metrics) + def get_viz_config(self, viz_type: str, **kwargs): + if viz_type in viz_configs.keys(): + _viz_config = self._viz_config.get(viz_type) + if _viz_config is None: + _viz_config = "default" + else: + raise ValueError(f"edsteva has no {viz_type} registry !") + return viz_configs[viz_type].get(_viz_config)(self, **kwargs) + def default_metrics( self, predictor: pd.DataFrame, @@ -138,4 +152,6 @@ def default_metrics( **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` """ - return error_after_t0(predictor=predictor, estimates=estimates, index=index) + return metrics.get("error_after_t0")( + predictor=predictor, estimates=estimates, index=index + ) diff --git a/edsteva/models/step_function/viz_config.py b/edsteva/models/step_function/viz_config.py deleted file mode 100644 index b14a8751..00000000 --- a/edsteva/models/step_function/viz_config.py +++ /dev/null @@ -1,181 +0,0 @@ -import altair as alt - -from edsteva.utils.typing import DataFrame -from edsteva.viz.utils import round_up, scale_it - - -def get_estimates_dashboard_config(self, predictor: DataFrame): - c_0_min_slider = alt.binding_range( - min=0, - max=round_up(predictor.c_0.max(), 2), - step=scale_it(predictor.c_0.max()) / 100, - name="c₀ min: ", - ) - c_0_min_selection = alt.selection_single( - name="c_0_min", - fields=["c_0_min"], - bind=c_0_min_slider, - init={"c_0_min": 0}, - ) - c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min - t_0_slider = alt.binding( - input="t_0", - name="t₀ max: ", - ) - t_0_selection = alt.selection_single( - name="t_0", - fields=["t_0"], - bind=t_0_slider, - init={"t_0": predictor.t_0.astype(str).max()}, - ) - t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 - error_max_slider = alt.binding_range( - min=0, - max=round_up(predictor.error.max(), 2), - step=scale_it(predictor.error.max()) / 100, - name="error max: ", - ) - error_max_selection = alt.selection_single( - name="error_max", - fields=["error_max"], - bind=error_max_slider, - init={"error_max": round_up(predictor.error.max(), 2)}, - ) - error_max_filter = alt.datum.error <= error_max_selection.error_max - estimates_dashboard_config = dict( - estimates_selections=[c_0_min_selection, t_0_selection, error_max_selection], - estimates_filters=[c_0_min_filter, t_0_min_filter, error_max_filter], - probe_line=dict( - encode=dict( - strokeDash=alt.StrokeDash( - "legend_predictor", - title="Predictor line", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - orient="top", - ), - ) - ) - ), - model_line=dict( - mark_line=dict( - color="black", - interpolate="step-after", - strokeDash=[5, 5], - ), - encode=dict( - y="model:Q", - strokeWidth=alt.StrokeWidth( - field="legend_model", - title="Model line", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - symbolDash=[2, 2], - orient="top", - ), - ), - ), - ), - extra_horizontal_bar_charts=[ - dict( - x=alt.X( - "min(c_0):Q", - title="Min(c₀)", - ), - tooltip=alt.Tooltip("min(c_0):Q", format=".2"), - sort={ - "field": "c_0", - "op": "min", - "order": "descending", - }, - ), - dict( - x=alt.X( - "max(error):Q", - title="Max(error)", - ), - tooltip=alt.Tooltip("max(error):Q", format=".2"), - sort={ - "field": "error", - "op": "max", - "order": "descending", - }, - ), - ], - extra_vertical_bar_charts=[], - ) - return estimates_dashboard_config - - -def get_predictor_dashboard_config(self): - predictor_dashboard_config = dict( - probe_line=dict( - encode=dict( - strokeDash=alt.StrokeDash( - "legend_predictor", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - orient="left", - ), - ) - ) - ), - model_line=dict( - mark_line=dict( - interpolate="step-after", - strokeDash=[5, 5], - ), - encode=dict( - y=alt.Y("min(c_hat)"), - strokeWidth=alt.StrokeWidth( - field="legend_model", - title="", - legend=alt.Legend( - symbolType="stroke", - symbolStrokeColor="steelblue", - labelFontSize=12, - labelFontStyle="bold", - symbolDash=[2, 2], - orient="left", - ), - ), - ), - aggregates=[ - dict( - max_t0="max(t_0)", - groupby=["value", "date"], - ), - ], - filters=[dict(filter=alt.datum.t_0 == alt.datum.max_t0)], - ), - extra_horizontal_bar_charts=[ - dict( - x=alt.X( - "min(c_0):Q", - title="Minimum c₀", - axis=alt.Axis(format=".2"), - ), - tooltip=alt.Tooltip( - "min(c_0):Q", - format=".2", - ), - sort={ - "field": "c_0", - "op": "min", - "order": "descending", - }, - ), - ], - extra_vertical_bar_charts=[], - ) - return predictor_dashboard_config diff --git a/edsteva/models/step_function/viz_configs/__init__.py b/edsteva/models/step_function/viz_configs/__init__.py new file mode 100644 index 00000000..306c28cf --- /dev/null +++ b/edsteva/models/step_function/viz_configs/__init__.py @@ -0,0 +1,42 @@ +import catalogue + +from edsteva.models.step_function.viz_configs.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.models.step_function.viz_configs.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.models.step_function.viz_configs.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.models.step_function.viz_configs.probe_plot import get_probe_plot_config + +normalized_probe_dashboard = catalogue.create( + "edsteva.models.step_function.viz_configs", "normalized_probe_dashboard" +) +normalized_probe_dashboard.register( + "default", func=get_normalized_probe_dashboard_config +) + + +probe_dashboard = catalogue.create( + "edsteva.models.step_function.viz_configs", "probe_dashboard" +) +probe_dashboard.register("default", func=get_probe_dashboard_config) + + +normalized_probe_plot = catalogue.create( + "edsteva.models.step_function.viz_configs", "normalized_probe_plot" +) +normalized_probe_plot.register("default", func=get_normalized_probe_plot_config) + + +probe_plot = catalogue.create("edsteva.models.step_function.viz_configs", "probe_plot") +probe_plot.register("default", func=get_probe_plot_config) + +viz_configs = dict( + normalized_probe_dashboard=normalized_probe_dashboard, + probe_dashboard=probe_dashboard, + normalized_probe_plot=normalized_probe_plot, + probe_plot=probe_plot, +) diff --git a/edsteva/models/step_function/viz_configs/defaults.py b/edsteva/models/step_function/viz_configs/defaults.py new file mode 100644 index 00000000..f468250f --- /dev/null +++ b/edsteva/models/step_function/viz_configs/defaults.py @@ -0,0 +1,162 @@ +import altair as alt + +from edsteva.utils.typing import DataFrame +from edsteva.viz.utils import round_up, scale_it + + +def get_c_0_min_selection(predictor: DataFrame): + c_0_min_slider = alt.binding_range( + min=0, + max=round_up(predictor.c_0.max(), 2), + step=scale_it(predictor.c_0.max()) / 100, + name="c₀ min: ", + ) + c_0_min_selection = alt.selection_single( + name="c_0_min", + fields=["c_0_min"], + bind=c_0_min_slider, + init={"c_0_min": 0}, + ) + c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min + return c_0_min_selection, c_0_min_filter + + +def get_error_max_selection(predictor: DataFrame): + error_max_slider = alt.binding_range( + min=0, + max=round_up(predictor.error.max(), 2), + step=scale_it(predictor.error.max()) / 100, + name="error max: ", + ) + error_max_selection = alt.selection_single( + name="error_max", + fields=["error_max"], + bind=error_max_slider, + init={"error_max": round_up(predictor.error.max(), 2)}, + ) + error_max_filter = alt.datum.error <= error_max_selection.error_max + return error_max_selection, error_max_filter + + +def get_t_0_selection(predictor: DataFrame): + t_0_slider = alt.binding( + input="t_0", + name="t₀ max: ", + ) + t_0_selection = alt.selection_single( + name="t_0", + fields=["t_0"], + bind=t_0_slider, + init={"t_0": predictor.t_0.astype(str).max()}, + ) + t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 + return t_0_selection, t_0_min_filter + + +normalized_probe_line = dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="Predictor line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="top", + ), + ) + ) +) +probe_line = dict( + encode=dict( + strokeDash=alt.StrokeDash( + "legend_predictor", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + orient="left", + ), + ) + ) +) +normalized_model_line = dict( + mark_line=dict( + color="black", + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y="model:Q", + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="Model line", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="top", + ), + ), + ), +) + +model_line = dict( + mark_line=dict( + interpolate="step-after", + strokeDash=[5, 5], + ), + encode=dict( + y=alt.Y("min(c_hat)"), + strokeWidth=alt.StrokeWidth( + field="legend_model", + title="", + legend=alt.Legend( + symbolType="stroke", + symbolStrokeColor="steelblue", + labelFontSize=12, + labelFontStyle="bold", + symbolDash=[2, 2], + orient="left", + ), + ), + ), + aggregates=[ + dict( + max_t0="max(t_0)", + groupby=["value", "date"], + ), + ], + filters=[dict(filter=alt.datum.t_0 == alt.datum.max_t0)], +) + +horizontal_min_c0 = dict( + x=alt.X( + "min(c_0):Q", + title="Min(c₀)", + ), + tooltip=alt.Tooltip("min(c_0):Q", format=".2"), + sort={ + "field": "c_0", + "op": "min", + "order": "descending", + }, +) + +horizontal_max_error = dict( + x=alt.X( + "max(error):Q", + title="Max(error)", + ), + tooltip=alt.Tooltip("max(error):Q", format=".2"), + sort={ + "field": "error", + "op": "max", + "order": "descending", + }, +) diff --git a/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py b/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py new file mode 100644 index 00000000..03cff30f --- /dev/null +++ b/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py @@ -0,0 +1,26 @@ +from edsteva.utils.typing import DataFrame + +from .defaults import ( + get_c_0_min_selection, + get_error_max_selection, + get_t_0_selection, + horizontal_max_error, + horizontal_min_c0, + normalized_model_line, + normalized_probe_line, +) + + +def get_normalized_probe_dashboard_config(self, predictor: DataFrame): + c_0_min_selection, c_0_min_filter = get_c_0_min_selection(predictor=predictor) + t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) + error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) + normalized_probe_plot_config = dict( + estimates_selections=[c_0_min_selection, t_0_selection, error_max_selection], + estimates_filters=[c_0_min_filter, t_0_min_filter, error_max_filter], + probe_line=normalized_probe_line, + model_line=normalized_model_line, + extra_horizontal_bar_charts=[horizontal_min_c0, horizontal_max_error], + extra_vertical_bar_charts=[], + ) + return normalized_probe_plot_config diff --git a/edsteva/models/step_function/viz_configs/normalized_probe_plot.py b/edsteva/models/step_function/viz_configs/normalized_probe_plot.py new file mode 100644 index 00000000..ca701819 --- /dev/null +++ b/edsteva/models/step_function/viz_configs/normalized_probe_plot.py @@ -0,0 +1,22 @@ +from edsteva.utils.typing import DataFrame + +from .defaults import ( + get_c_0_min_selection, + get_error_max_selection, + get_t_0_selection, + normalized_model_line, + normalized_probe_line, +) + + +def get_normalized_probe_plot_config(self, predictor: DataFrame): + c_0_min_selection, c_0_min_filter = get_c_0_min_selection(predictor=predictor) + t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) + error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) + normalized_probe_dashboard_config = dict( + estimates_selections=[c_0_min_selection, t_0_selection, error_max_selection], + estimates_filters=[c_0_min_filter, t_0_min_filter, error_max_filter], + probe_line=normalized_probe_line, + model_line=normalized_model_line, + ) + return normalized_probe_dashboard_config diff --git a/edsteva/models/step_function/viz_configs/probe_dashboard.py b/edsteva/models/step_function/viz_configs/probe_dashboard.py new file mode 100644 index 00000000..4f47dadc --- /dev/null +++ b/edsteva/models/step_function/viz_configs/probe_dashboard.py @@ -0,0 +1,11 @@ +from .defaults import horizontal_min_c0, model_line, probe_line + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + probe_line=probe_line, + model_line=model_line, + extra_horizontal_bar_charts=[horizontal_min_c0], + extra_vertical_bar_charts=[], + ) + return probe_dashboard_config diff --git a/edsteva/models/step_function/viz_configs/probe_plot.py b/edsteva/models/step_function/viz_configs/probe_plot.py new file mode 100644 index 00000000..42e64462 --- /dev/null +++ b/edsteva/models/step_function/viz_configs/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import model_line, probe_line + + +def get_probe_plot_config(self): + probe_plot_config = dict( + probe_line=probe_line, + model_line=model_line, + ) + return probe_plot_config diff --git a/edsteva/probes/__init__.py b/edsteva/probes/__init__.py index 6c57ad54..6e5e9a46 100644 --- a/edsteva/probes/__init__.py +++ b/edsteva/probes/__init__.py @@ -1,6 +1,5 @@ from edsteva.probes.base import BaseProbe from edsteva.probes.biology.biology import BiologyProbe -from edsteva.probes.biology.biology_per_visit import BiologyPerVisitProbe -from edsteva.probes.condition.condition_per_visit import ConditionPerVisitProbe -from edsteva.probes.note.note_per_visit import NotePerVisitProbe +from edsteva.probes.condition.condition import ConditionProbe +from edsteva.probes.note.note import NoteProbe from edsteva.probes.visit.visit import VisitProbe diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index f0661b99..521df36e 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -6,14 +6,10 @@ from loguru import logger from edsteva import CACHE_DIR -from edsteva.probes.utils import ( - delete_object, - filter_table_by_care_site, - get_care_site_relationship, - load_object, - save_object, -) +from edsteva.probes.utils.filter_df import filter_table_by_care_site +from edsteva.probes.utils.prepare_df import prepare_care_site_relationship from edsteva.utils.checks import check_columns, check_tables +from edsteva.utils.file_management import delete_object, load_object, save_object from edsteva.utils.typing import Data, DataFrame @@ -35,7 +31,7 @@ class BaseProbe(metaclass=ABCMeta): care_site_relationship: pd.DataFrame Available with the [``compute()``][edsteva.probes.base.BaseProbe.compute] method - It describes the care site structure (cf. [``get_care_site_relationship()``][edsteva.probes.utils.get_care_site_relationship]) + It describes the care site structure (cf. [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_care_site_relationship]) """ def __init__(self): @@ -191,7 +187,7 @@ def compute( Here are the following computation steps: - check if input data is valid with [``validate_input_data()``][edsteva.probes.base.BaseProbe.validate_input_data] method - - query care site relationship table with [``get_care_site_relationship()``][edsteva.probes.utils.get_care_site_relationship] + - query care site relationship table with [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_care_site_relationship] - compute predictor with [``compute_process()``][edsteva.probes.base.BaseProbe.compute_process] method - check if predictor is valid with [``is_computed_probe()``][edsteva.probes.base.BaseProbe.is_computed_probe] method @@ -246,7 +242,7 @@ def compute( """ self.validate_input_data(data=data) - care_site_relationship = get_care_site_relationship(data=data) + care_site_relationship = prepare_care_site_relationship(data=data) self.predictor = self.compute_process( data=data, diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 85817514..ac9e503b 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -2,24 +2,12 @@ from typing import Dict, List, Tuple, Union import pandas as pd -from loguru import logger from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import ( - CARE_SITE_LEVEL_NAMES, - concatenate_predictor_by_level, - get_biology_relationship, - hospital_only, - prepare_care_site, - prepare_measurement, - prepare_visit_occurrence, -) -from edsteva.utils.checks import check_tables -from edsteva.utils.framework import is_koalas, to +from edsteva.probes.biology.completeness_predictors import completeness_predictors +from edsteva.probes.biology.viz_configs import viz_configs from edsteva.utils.typing import Data -from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config - class BiologyProbe(BaseProbe): r""" @@ -50,10 +38,14 @@ class BiologyProbe(BaseProbe): **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` """ - get_predictor_dashboard_config = get_predictor_dashboard_config - get_estimates_dashboard_config = get_estimates_dashboard_config - def __init__(self, standard_terminologies: List[str] = ["ANABIO", "LOINC"]): + def __init__( + self, + completeness_predictor: str = "per_measurement_default", + standard_terminologies: List[str] = ["ANABIO", "LOINC"], + _viz_config: Dict[str, str] = None, + ): + self._completeness_predictor = completeness_predictor self._standard_terminologies = standard_terminologies self._index = [ "care_site_level", @@ -65,7 +57,8 @@ def __init__(self, standard_terminologies: List[str] = ["ANABIO", "LOINC"]): "{}_concept_code".format(terminology) for terminology in standard_terminologies ] - self._metrics = ["c", "n_measurement"] + if _viz_config is None: + self._viz_config = {} def compute_process( self, @@ -101,6 +94,7 @@ def compute_process( ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], + **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -123,114 +117,28 @@ def compute_process( care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` """ - check_tables( - data=data, - required_tables=["measurement", "concept", "concept_relationship"], - ) - standard_terminologies = self._standard_terminologies - biology_relationship = get_biology_relationship( - data=data, - standard_terminologies=standard_terminologies, - source_terminologies=source_terminologies, - mapping=mapping, - ) - - self.biology_relationship = biology_relationship - root_terminology = mapping[0][0] - - measurement = prepare_measurement( + return completeness_predictors.get(self._completeness_predictor)( + self, data=data, - biology_relationship=biology_relationship, - concepts_sets=concepts_sets, + care_site_relationship=care_site_relationship, start_date=start_date, end_date=end_date, - root_terminology=root_terminology, - standard_terminologies=standard_terminologies, - per_visit=False, - ) - - visit_occurrence = prepare_visit_occurrence( - data=data, - start_date=None, - end_date=None, + care_site_levels=care_site_levels, stay_types=stay_types, - stay_durations=stay_durations, - ) - - care_site = prepare_care_site( - data=data, care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, - care_site_relationship=care_site_relationship, - ) - - hospital_visit = get_hospital_measurements( - measurement=measurement, - visit_occurrence=visit_occurrence, - care_site=care_site, - ) - hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] - biology_predictor_by_level = {hospital_name: hospital_visit} - - if care_site_levels and not hospital_only(care_site_levels=care_site_levels): - logger.info( - "Biological measurements are only available at hospital level for now" - ) - care_site_levels = "Hospital" - - biology_predictor = concatenate_predictor_by_level( - predictor_by_level=biology_predictor_by_level, - care_site_levels=care_site_levels, - ) - - return compute_completeness(self, biology_predictor) - - -def compute_completeness(self, biology_predictor): - partition_cols = self._index.copy() + ["date"] - n_measurement = ( - biology_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, + concepts_sets=concepts_sets, + stay_durations=stay_durations, + source_terminologies=source_terminologies, + mapping=mapping, + **kwargs, ) - .agg({"measurement_id": "nunique"}) - .rename(columns={"measurement_id": "n_measurement"}) - ) - - n_measurement = to("pandas", n_measurement) - partition_cols = list(set(partition_cols) - {"date"}) - q_99_measurement = ( - n_measurement.groupby( - partition_cols, - as_index=False, - dropna=False, - )[["n_measurement"]] - .agg({"n_measurement": "max"}) - .rename(columns={"n_measurement": "max_n_measurement"}) - ) - - biology_predictor = n_measurement.merge( - q_99_measurement, - on=partition_cols, - ) - - biology_predictor["c"] = biology_predictor["max_n_measurement"].where( - biology_predictor["max_n_measurement"] == 0, - biology_predictor["n_measurement"] / biology_predictor["max_n_measurement"], - ) - biology_predictor = biology_predictor.drop(columns="max_n_measurement") - - return biology_predictor - - -def get_hospital_measurements(measurement, visit_occurrence, care_site): - hospital_measurement = measurement.merge( - visit_occurrence.drop(columns="date"), on="visit_occurrence_id" - ) - hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") - - if is_koalas(hospital_measurement): - hospital_measurement.spark.cache() - return hospital_measurement + def get_viz_config(self, viz_type: str, **kwargs): + if viz_type in viz_configs.keys(): + _viz_config = self._viz_config.get(viz_type) + if _viz_config is None: + _viz_config = self._completeness_predictor + else: + raise ValueError(f"edsteva has no {viz_type} registry !") + return viz_configs[viz_type].get(_viz_config)(self, **kwargs) diff --git a/edsteva/probes/biology/completeness_predictors/__init__.py b/edsteva/probes/biology/completeness_predictors/__init__.py new file mode 100644 index 00000000..a76b3348 --- /dev/null +++ b/edsteva/probes/biology/completeness_predictors/__init__.py @@ -0,0 +1,11 @@ +import catalogue + +from .per_measurement import compute_completeness_predictor_per_measurement + +completeness_predictors = catalogue.create( + "edsteva.probes.biology", "completeness_predictors" +) + +completeness_predictors.register( + "per_measurement_default", func=compute_completeness_predictor_per_measurement +) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py new file mode 100644 index 00000000..603033e4 --- /dev/null +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -0,0 +1,150 @@ +from datetime import datetime +from typing import Dict, List, Tuple, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.utils.prepare_df import ( + prepare_biology_relationship, + prepare_care_site, + prepare_measurement, + prepare_visit_occurrence, +) +from edsteva.probes.utils.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + hospital_only, +) +from edsteva.utils.checks import check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness_predictor_per_measurement( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str], + concepts_sets: Union[str, Dict[str, str]], + stay_durations: List[float], + source_terminologies: Dict[str, str], + mapping: List[Tuple[str, str, str]], +): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute]""" + self._metrics = ["c", "n_measurement"] + check_tables( + data=data, + required_tables=["measurement", "concept", "concept_relationship"], + ) + standard_terminologies = self._standard_terminologies + biology_relationship = prepare_biology_relationship( + data=data, + standard_terminologies=standard_terminologies, + source_terminologies=source_terminologies, + mapping=mapping, + ) + + self.biology_relationship = biology_relationship + root_terminology = mapping[0][0] + + measurement = prepare_measurement( + data=data, + biology_relationship=biology_relationship, + concepts_sets=concepts_sets, + start_date=start_date, + end_date=end_date, + root_terminology=root_terminology, + standard_terminologies=standard_terminologies, + per_visit=False, + ) + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=None, + end_date=None, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + care_site = prepare_care_site( + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_relationship=care_site_relationship, + ) + + hospital_visit = get_hospital_measurements( + measurement=measurement, + visit_occurrence=visit_occurrence, + care_site=care_site, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + biology_predictor_by_level = {hospital_name: hospital_visit} + + if care_site_levels and not hospital_only(care_site_levels=care_site_levels): + logger.info( + "Biological measurements are only available at hospital level for now" + ) + care_site_levels = "Hospital" + + biology_predictor = concatenate_predictor_by_level( + predictor_by_level=biology_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(self, biology_predictor) + + +def compute_completeness(self, biology_predictor): + partition_cols = self._index.copy() + ["date"] + n_measurement = ( + biology_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"measurement_id": "nunique"}) + .rename(columns={"measurement_id": "n_measurement"}) + ) + + n_measurement = to("pandas", n_measurement) + partition_cols = list(set(partition_cols) - {"date"}) + q_99_measurement = ( + n_measurement.groupby( + partition_cols, + as_index=False, + dropna=False, + )[["n_measurement"]] + .agg({"n_measurement": "max"}) + .rename(columns={"n_measurement": "max_n_measurement"}) + ) + + biology_predictor = n_measurement.merge( + q_99_measurement, + on=partition_cols, + ) + + biology_predictor["c"] = biology_predictor["max_n_measurement"].where( + biology_predictor["max_n_measurement"] == 0, + biology_predictor["n_measurement"] / biology_predictor["max_n_measurement"], + ) + biology_predictor = biology_predictor.drop(columns="max_n_measurement") + + return biology_predictor + + +def get_hospital_measurements(measurement, visit_occurrence, care_site): + hospital_measurement = measurement.merge( + visit_occurrence.drop(columns="date"), on="visit_occurrence_id" + ) + hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") + + if is_koalas(hospital_measurement): + hospital_measurement.spark.cache() + + return hospital_measurement diff --git a/edsteva/probes/biology/biology_per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py similarity index 99% rename from edsteva/probes/biology/biology_per_visit.py rename to edsteva/probes/biology/completeness_predictors/per_visit.py index dfb3155a..855f1488 100644 --- a/edsteva/probes/biology/biology_per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -5,7 +5,7 @@ from loguru import logger from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import ( +from edsteva.probes.utils.utils import ( CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, get_biology_relationship, diff --git a/edsteva/probes/biology/viz_configs/__init__.py b/edsteva/probes/biology/viz_configs/__init__.py new file mode 100644 index 00000000..ae824418 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/__init__.py @@ -0,0 +1,55 @@ +import catalogue + +from edsteva.probes.biology.viz_configs.per_measurement.estimates_densities_plot import ( + get_estimates_densities_plot_config, +) +from edsteva.probes.biology.viz_configs.per_measurement.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.probes.biology.viz_configs.per_measurement.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.probes.biology.viz_configs.per_measurement.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.probes.biology.viz_configs.per_measurement.probe_plot import ( + get_probe_plot_config, +) + +normalized_probe_dashboard = catalogue.create( + "edsteva.probes.biology.viz_configs", "normalized_probe_dashboard" +) +normalized_probe_dashboard.register( + "per_measurement_default", func=get_normalized_probe_dashboard_config +) + + +probe_dashboard = catalogue.create( + "edsteva.probes.biology.viz_configs", "probe_dashboard" +) +probe_dashboard.register("per_measurement_default", func=get_probe_dashboard_config) + +estimates_densities_plot = catalogue.create( + "edsteva.probes.biology.viz_configs", "estimates_densities_plot" +) +estimates_densities_plot.register( + "per_measurement_default", func=get_estimates_densities_plot_config +) + +normalized_probe_plot = catalogue.create( + "edsteva.probes.biology.viz_configs", "normalized_probe_plot" +) +normalized_probe_plot.register( + "per_measurement_default", func=get_normalized_probe_plot_config +) + +probe_plot = catalogue.create("edsteva.probes.biology.viz_configs", "probe_plot") +probe_plot.register("per_measurement_default", func=get_probe_plot_config) + +viz_configs = dict( + normalized_probe_dashboard=normalized_probe_dashboard, + probe_dashboard=probe_dashboard, + estimates_densities_plot=estimates_densities_plot, + normalized_probe_plot=normalized_probe_plot, + probe_plot=probe_plot, +) diff --git a/edsteva/probes/biology/viz_configs/per_measurement/defaults.py b/edsteva/probes/biology/viz_configs/per_measurement/defaults.py new file mode 100644 index 00000000..c95e2476 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/defaults.py @@ -0,0 +1,218 @@ +from typing import List + +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +def get_horizontal_bar_charts(standard_terminologies: List[str]): + return dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, + ] + + [ + { + "title": "{} concept".format(terminology), + "field": "{}_concept_name".format(terminology), + "sort": "-x", + } + for terminology in standard_terminologies + ], + x=[ + dict( + x=alt.X( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], + ) + + +main_chart = dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_measurement / alt.datum.max_measurement), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py new file mode 100644 index 00000000..7bf5c084 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py @@ -0,0 +1,14 @@ +from .defaults import chart_style, get_horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py new file mode 100644 index 00000000..af00c552 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py @@ -0,0 +1,24 @@ +from .defaults import ( + chart_style, + error_line, + get_horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py new file mode 100644 index 00000000..f94d63f2 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + get_horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py b/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/biology/viz_configs/per_visit/defaults.py b/edsteva/probes/biology/viz_configs/per_visit/defaults.py new file mode 100644 index 00000000..c95e2476 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/defaults.py @@ -0,0 +1,218 @@ +from typing import List + +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +def get_horizontal_bar_charts(standard_terminologies: List[str]): + return dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, + ] + + [ + { + "title": "{} concept".format(terminology), + "field": "{}_concept_name".format(terminology), + "sort": "-x", + } + for terminology in standard_terminologies + ], + x=[ + dict( + x=alt.X( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], + ) + + +main_chart = dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_measurement / alt.datum.max_measurement), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py new file mode 100644 index 00000000..5cbd692b --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py @@ -0,0 +1,17 @@ +from edsteva.probes.biology.viz_configs import estimates_densities_plot + +from .defaults import chart_style, get_horizontal_bar_charts, vertical_bar_charts + + +@estimates_densities_plot.register("per_visit_default") +def get_estimates_densities_plot_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py new file mode 100644 index 00000000..b10f69d1 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py @@ -0,0 +1,27 @@ +from edsteva.probes.biology.viz_configs import normalized_probe_dashboard + +from .defaults import ( + chart_style, + error_line, + get_horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +@normalized_probe_dashboard.register("per_measurement_default") +def get_normalized_probe_dashboard_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py new file mode 100644 index 00000000..74db50f1 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py @@ -0,0 +1,13 @@ +from edsteva.probes.biology.viz_configs import normalized_probe_plot + +from .defaults import chart_style, error_line, normalized_main_chart + + +@normalized_probe_plot.register("per_measurement_default") +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py new file mode 100644 index 00000000..f3fb8975 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py @@ -0,0 +1,24 @@ +from edsteva.probes.biology.viz_configs import probe_dashboard + +from .defaults import ( + chart_style, + get_horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +@probe_dashboard.register("per_measurement_default") +def get_probe_dashboard_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py b/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py new file mode 100644 index 00000000..0fa08755 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py @@ -0,0 +1,12 @@ +from edsteva.probes.biology.viz_configs import probe_plot + +from .defaults import chart_style, main_chart + + +@probe_plot.register("per_measurement_default") +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/condition/completeness_predictors/__init__.py b/edsteva/probes/condition/completeness_predictors/__init__.py new file mode 100644 index 00000000..d9dc7f4c --- /dev/null +++ b/edsteva/probes/condition/completeness_predictors/__init__.py @@ -0,0 +1,16 @@ +import catalogue + +from .per_condition import compute_completeness_predictor_per_condition +from .per_visit import compute_completeness_predictor_per_visit + +completeness_predictors = catalogue.create( + "edsteva.probes.condition", "completeness_predictors" +) + +completeness_predictors.register( + "per_visit_default", func=compute_completeness_predictor_per_visit +) + +completeness_predictors.register( + "per_condition_default", func=compute_completeness_predictor_per_condition +) diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py new file mode 100644 index 00000000..63ecbfbf --- /dev/null +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -0,0 +1,242 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.utils.filter_df import convert_uf_to_pole +from edsteva.probes.utils.prepare_df import ( + prepare_care_site, + prepare_condition_occurrence, + prepare_visit_detail, + prepare_visit_occurrence, +) +from edsteva.probes.utils.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + hospital_only, +) +from edsteva.utils.checks import check_conditon_source_systems, check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness_predictor_per_condition( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + extra_data: Data, + care_site_short_names: List[str], + diag_types: Union[str, Dict[str, str]], + condition_types: Union[str, Dict[str, str]], + source_systems: List[str], + stay_durations: List[float], +): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` + diag_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` + condition_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` + source_systems : List[str], optional + **EXAMPLE**: `["AREM", "ORBIS"]` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + """ + + self._metrics = ["c", "n_condition"] + check_tables(data=data, required_tables=["condition_occurrence"]) + check_conditon_source_systems(source_systems=source_systems) + if "AREM" in source_systems and not hospital_only( + care_site_levels=care_site_levels + ): + logger.info("AREM claim data are only available at hospital level") + + visit_occurrence = prepare_visit_occurrence( + data=data, + stay_types=stay_types, + stay_durations=stay_durations, + ).drop(columns="date") + + condition_occurrence = prepare_condition_occurrence( + data=data, + extra_data=extra_data, + visit_occurrence=visit_occurrence, + source_systems=source_systems, + diag_types=diag_types, + condition_types=condition_types, + start_date=start_date, + end_date=end_date, + ) + + care_site = prepare_care_site( + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_relationship=care_site_relationship, + ) + + hospital_visit = get_hospital_condition( + condition_occurrence, + visit_occurrence, + care_site, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + condition_predictor_by_level = {hospital_name: hospital_visit} + + # UF selection + if not hospital_only(care_site_levels=care_site_levels): + visit_detail = prepare_visit_detail( + data=data, + start_date=start_date, + end_date=end_date, + visit_detail_type="RUM", + ) + + uf_condition = get_uf_condition( + condition_occurrence=condition_occurrence, + visit_occurrence=visit_occurrence, + visit_detail=visit_detail, + care_site=care_site, + ) + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + condition_predictor_by_level[uf_name] = uf_condition + + pole_condition = get_pole_condition( + uf_condition, care_site, care_site_relationship + ) + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + condition_predictor_by_level[pole_name] = pole_condition + + condition_predictor = concatenate_predictor_by_level( + predictor_by_level=condition_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(self, condition_predictor) + + +def compute_completeness(self, condition_predictor): + partition_cols = self._index.copy() + ["date"] + + n_condition = ( + condition_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"condition_occurrence_id": "nunique"}) + .rename(columns={"condition_occurrence_id": "n_condition"}) + ) + n_condition = to("pandas", n_condition) + + partition_cols = list(set(partition_cols) - {"date"}) + max_n_condition = ( + n_condition.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"n_condition": "max"}) + .rename(columns={"n_condition": "max_n_condition"}) + ) + + condition_predictor = n_condition.merge( + max_n_condition, + on=partition_cols, + ) + + condition_predictor = to("pandas", condition_predictor) + condition_predictor["c"] = condition_predictor["max_n_condition"].where( + condition_predictor["max_n_condition"] == 0, + condition_predictor["n_condition"] / condition_predictor["max_n_condition"], + ) + condition_predictor = condition_predictor.drop(columns="max_n_condition") + + return condition_predictor + + +def get_hospital_condition(condition_occurrence, visit_occurrence, care_site): + hospital_condition = condition_occurrence.merge( + visit_occurrence, + on="visit_occurrence_id", + how="left", + ) + hospital_condition = hospital_condition.drop(columns="visit_occurrence_id") + hospital_condition = hospital_condition.merge(care_site, on="care_site_id") + + if is_koalas(hospital_condition): + hospital_condition.spark.cache() + + return hospital_condition + + +def get_uf_condition( + condition_occurrence, + visit_occurrence, + visit_detail, + care_site, +): # pragma: no cover + # Add visit information + uf_condition = condition_occurrence.merge( + visit_occurrence.drop(columns="care_site_id"), + on="visit_occurrence_id", + how="left", + ).rename(columns={"visit_detail_id": "visit_id"}) + + # Add care_site information + uf_condition = uf_condition.merge( + visit_detail[["visit_id", "care_site_id"]], + on="visit_id", + how="left", + ) + uf_condition = uf_condition.merge(care_site, on="care_site_id") + + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + uf_condition = uf_condition[uf_condition["care_site_level"] == uf_name] + + if is_koalas(uf_condition): + uf_condition.spark.cache() + + return uf_condition + + +def get_pole_condition( + uf_condition, care_site, care_site_relationship +): # pragma: no cover + pole_condition = convert_uf_to_pole( + table=uf_condition.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="uf_condition", + care_site_relationship=care_site_relationship, + ) + + pole_condition = pole_condition.merge(care_site, on="care_site_id") + + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + pole_condition = pole_condition[pole_condition["care_site_level"] == pole_name] + + if is_koalas(pole_condition): + pole_condition.spark.cache() + + return pole_condition diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py new file mode 100644 index 00000000..186e804b --- /dev/null +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -0,0 +1,251 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.utils.filter_df import convert_uf_to_pole +from edsteva.probes.utils.prepare_df import ( + prepare_care_site, + prepare_condition_occurrence, + prepare_visit_detail, + prepare_visit_occurrence, +) +from edsteva.probes.utils.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + hospital_only, +) +from edsteva.utils.checks import check_conditon_source_systems, check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness_predictor_per_visit( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + extra_data: Data, + care_site_short_names: List[str], + diag_types: Union[str, Dict[str, str]], + condition_types: Union[str, Dict[str, str]], + source_systems: List[str], + stay_durations: List[float], +): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` + diag_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` + condition_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` + source_systems : List[str], optional + **EXAMPLE**: `["AREM", "ORBIS"]` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + """ + + self._metrics = ["c", "n_visit", "n_visit_with_condition"] + check_tables(data=data, required_tables=["condition_occurrence"]) + check_conditon_source_systems(source_systems=source_systems) + if "AREM" in source_systems and not hospital_only( + care_site_levels=care_site_levels + ): + logger.info("AREM claim data are only available at hospital level") + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + condition_occurrence = prepare_condition_occurrence( + data=data, + extra_data=extra_data, + visit_occurrence=visit_occurrence, + source_systems=source_systems, + diag_types=diag_types, + condition_types=condition_types, + ).drop(columns=["condition_occurrence_id", "date"]) + + care_site = prepare_care_site( + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_relationship=care_site_relationship, + ) + + hospital_visit = get_hospital_visit( + condition_occurrence, + visit_occurrence, + care_site, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + condition_predictor_by_level = {hospital_name: hospital_visit} + + # UF selection + if not hospital_only(care_site_levels=care_site_levels): + visit_detail = prepare_visit_detail( + data, start_date, end_date, visit_detail_type="RUM" + ) + + uf_visit = get_uf_visit( + condition_occurrence, + visit_occurrence, + visit_detail, + care_site, + ) + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + condition_predictor_by_level[uf_name] = uf_visit + + pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + condition_predictor_by_level[pole_name] = pole_visit + + condition_predictor = concatenate_predictor_by_level( + predictor_by_level=condition_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(self, condition_predictor) + + +def compute_completeness(self, condition_predictor): + partition_cols = self._index.copy() + ["date"] + n_visit_with_condition = ( + condition_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"has_condition": "count"}) + .rename(columns={"has_condition": "n_visit_with_condition"}) + ) + partition_cols = list( + set(partition_cols) - {"diag_type", "condition_type", "source_system"} + ) + + n_visit = ( + condition_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"visit_id": "nunique"}) + .rename(columns={"visit_id": "n_visit"}) + ) + + condition_predictor = n_visit_with_condition.merge( + n_visit, + on=partition_cols, + ) + + condition_predictor = to("pandas", condition_predictor) + + condition_predictor["c"] = condition_predictor["n_visit"].where( + condition_predictor["n_visit"] == 0, + condition_predictor["n_visit_with_condition"] / condition_predictor["n_visit"], + ) + + return condition_predictor + + +def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): + condition_hospital = condition_occurrence.drop_duplicates( + ["visit_occurrence_id", "diag_type", "condition_type", "source_system"] + ) + condition_hospital["has_condition"] = True + hospital_visit = visit_occurrence.merge( + condition_hospital, + on="visit_occurrence_id", + how="left", + ) + hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) + hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + + if is_koalas(hospital_visit): + hospital_visit.spark.cache() + + return hospital_visit + + +def get_uf_visit( + condition_occurrence, + visit_occurrence, + visit_detail, + care_site, +): # pragma: no cover + condition_uf = ( + condition_occurrence[ + [ + "visit_detail_id", + "diag_type", + "condition_type", + "source_system", + ] + ] + .drop_duplicates() + .rename(columns={"visit_detail_id": "visit_id"}) + ) + condition_uf["has_condition"] = True + + visit_detail = visit_detail.merge( + visit_occurrence[["visit_occurrence_id", "stay_type"]], + on="visit_occurrence_id", + ) + visit_detail = visit_detail.merge( + condition_uf, + on="visit_id", + how="left", + ) + visit_detail = visit_detail.drop(columns=["visit_occurrence_id"]) + + uf_visit = visit_detail.merge(care_site, on="care_site_id") + + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] + + if is_koalas(uf_visit): + uf_visit.spark.cache() + + return uf_visit + + +def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover + pole_visit = convert_uf_to_pole( + table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="uf_visit", + care_site_relationship=care_site_relationship, + ) + + pole_visit = pole_visit.merge(care_site, on="care_site_id") + + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] + + if is_koalas(pole_visit): + pole_visit.spark.cache() + + return pole_visit diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py new file mode 100644 index 00000000..23d4ee6e --- /dev/null +++ b/edsteva/probes/condition/condition.py @@ -0,0 +1,118 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd + +from edsteva.probes.base import BaseProbe +from edsteva.probes.condition.completeness_predictors import completeness_predictors +from edsteva.probes.condition.viz_configs import viz_configs +from edsteva.utils.typing import Data + + +class ConditionProbe(BaseProbe): + r""" + The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data in patients' administrative stay: + + $$ + c_{condition}(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. + + Attributes + ---------- + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "diag_type", "condition_type", "source_system", "care_site_id"]`` + """ + + def __init__( + self, + completeness_predictor: str = "per_visit_default", + _viz_config: Dict[str, str] = None, + ): + self._completeness_predictor = completeness_predictor + self._index = [ + "care_site_level", + "stay_type", + "length_of_stay", + "diag_type", + "condition_type", + "source_system", + "care_site_id", + ] + if _viz_config is None: + self._viz_config = {} + + def compute_process( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + extra_data: Data = None, + care_site_short_names: List[str] = None, + diag_types: Union[str, Dict[str, str]] = None, + condition_types: Union[str, Dict[str, str]] = {"All": ".*"}, + source_systems: List[str] = ["ORBIS"], + stay_durations: List[float] = None, + **kwargs, + ): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` + diag_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` + condition_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` + source_systems : List[str], optional + **EXAMPLE**: `["AREM", "ORBIS"]` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + """ + + return completeness_predictors.get(self._completeness_predictor)( + self, + data=data, + care_site_relationship=care_site_relationship, + start_date=start_date, + end_date=end_date, + care_site_levels=care_site_levels, + stay_types=stay_types, + care_site_ids=care_site_ids, + extra_data=extra_data, + care_site_short_names=care_site_short_names, + diag_types=diag_types, + stay_durations=stay_durations, + condition_types=condition_types, + source_systems=source_systems, + **kwargs, + ) + + def get_viz_config(self, viz_type: str, **kwargs): + if viz_type in viz_configs.keys(): + _viz_config = self._viz_config.get(viz_type) + if _viz_config is None: + _viz_config = self._completeness_predictor + else: + raise ValueError(f"edsteva has no {viz_type} registry !") + return viz_configs[viz_type].get(_viz_config)(self, **kwargs) diff --git a/edsteva/probes/condition/condition_per_visit.py b/edsteva/probes/condition/condition_per_visit.py deleted file mode 100644 index b2dd68a2..00000000 --- a/edsteva/probes/condition/condition_per_visit.py +++ /dev/null @@ -1,290 +0,0 @@ -from datetime import datetime -from typing import Dict, List, Union - -import pandas as pd -from loguru import logger - -from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import ( - CARE_SITE_LEVEL_NAMES, - concatenate_predictor_by_level, - convert_table_to_pole, - convert_table_to_uf, - hospital_only, - prepare_care_site, - prepare_condition_occurrence, - prepare_visit_detail, - prepare_visit_occurrence, -) -from edsteva.utils.checks import check_conditon_source_systems, check_tables -from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data - -from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config - - -class ConditionPerVisitProbe(BaseProbe): - r""" - The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data in patients' administrative stay: - - $$ - c_{condition}(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. - - Attributes - ---------- - _index: List[str] - Variable from which data is grouped - - **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "diag_type", "condition_type", "source_system", "care_site_id"]`` - """ - - _index = [ - "care_site_level", - "stay_type", - "length_of_stay", - "diag_type", - "condition_type", - "source_system", - "care_site_id", - ] - _metrics = ["c", "n_visit", "n_visit_with_condition"] - get_predictor_dashboard_config = get_predictor_dashboard_config - get_estimates_dashboard_config = get_estimates_dashboard_config - - def compute_process( - self, - data: Data, - care_site_relationship: pd.DataFrame, - start_date: datetime, - end_date: datetime, - care_site_levels: List[str], - stay_types: Union[str, Dict[str, str]], - care_site_ids: List[int], - care_site_short_names: List[str] = None, - extra_data: Data = None, - diag_types: Union[str, Dict[str, str]] = None, - condition_types: Union[str, Dict[str, str]] = {"All": ".*"}, - source_systems: List[str] = ["ORBIS"], - stay_durations: List[float] = None, - ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` - diag_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` - condition_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` - source_systems : List[str], optional - **EXAMPLE**: `["AREM", "ORBIS"]` - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` - """ - - check_tables(data=data, required_tables=["condition_occurrence"]) - check_conditon_source_systems(source_systems=source_systems) - if "AREM" in source_systems and not hospital_only( - care_site_levels=care_site_levels - ): - logger.info("AREM claim data are only available at hospital level") - - visit_occurrence = prepare_visit_occurrence( - data=data, - start_date=start_date, - end_date=end_date, - stay_types=stay_types, - stay_durations=stay_durations, - ) - - condition_occurrence = prepare_condition_occurrence( - data=data, - extra_data=extra_data, - visit_occurrence=visit_occurrence, - source_systems=source_systems, - diag_types=diag_types, - condition_types=condition_types, - ) - - care_site = prepare_care_site( - data=data, - care_site_ids=care_site_ids, - care_site_short_names=care_site_short_names, - care_site_relationship=care_site_relationship, - ) - - hospital_visit = get_hospital_visit( - condition_occurrence, - visit_occurrence, - care_site, - ) - hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] - condition_predictor_by_level = {hospital_name: hospital_visit} - - # UF selection - if not hospital_only(care_site_levels=care_site_levels): - visit_detail = prepare_visit_detail( - data, start_date, end_date, visit_detail_type="RUM" - ) - - uf_visit = get_uf_visit( - condition_occurrence, - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, - ) - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - condition_predictor_by_level[uf_name] = uf_visit - - pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - condition_predictor_by_level[pole_name] = pole_visit - - condition_predictor = concatenate_predictor_by_level( - predictor_by_level=condition_predictor_by_level, - care_site_levels=care_site_levels, - ) - - return compute_completeness(self, condition_predictor) - - -def compute_completeness(self, condition_predictor): - partition_cols = self._index.copy() + ["date"] - n_visit_with_condition = ( - condition_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"has_condition": "count"}) - .rename(columns={"has_condition": "n_visit_with_condition"}) - ) - partition_cols = list( - set(partition_cols) - {"diag_type", "condition_type", "source_system"} - ) - - n_visit = ( - condition_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"visit_id": "nunique"}) - .rename(columns={"visit_id": "n_visit"}) - ) - - condition_predictor = n_visit_with_condition.merge( - n_visit, - on=partition_cols, - ) - - condition_predictor = to("pandas", condition_predictor) - - condition_predictor["c"] = condition_predictor["n_visit"].where( - condition_predictor["n_visit"] == 0, - condition_predictor["n_visit_with_condition"] / condition_predictor["n_visit"], - ) - - return condition_predictor - - -def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): - condition_hospital = condition_occurrence.drop_duplicates( - ["visit_occurrence_id", "diag_type", "condition_type", "source_system"] - ) - condition_hospital["has_condition"] = True - hospital_visit = visit_occurrence.merge( - condition_hospital, - on="visit_occurrence_id", - how="left", - ) - hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) - hospital_visit = hospital_visit.merge(care_site, on="care_site_id") - - if is_koalas(hospital_visit): - hospital_visit.spark.cache() - - return hospital_visit - - -def get_uf_visit( - condition_occurrence, - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, -): # pragma: no cover - condition_uf = ( - condition_occurrence[ - [ - "visit_detail_id", - "diag_type", - "condition_type", - "source_system", - ] - ] - .drop_duplicates() - .rename(columns={"visit_detail_id": "visit_id"}) - ) - condition_uf["has_condition"] = True - - visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "stay_type"]], - on="visit_occurrence_id", - ) - visit_detail = visit_detail.merge( - condition_uf, - on="visit_id", - how="left", - ) - visit_detail = visit_detail.drop(columns=["visit_occurrence_id"]) - - uf_visit = convert_table_to_uf( - table=visit_detail, - table_name="visit_detail", - care_site_relationship=care_site_relationship, - ) - uf_visit = uf_visit.merge(care_site, on="care_site_id") - - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] - - if is_koalas(uf_visit): - uf_visit.spark.cache() - - return uf_visit - - -def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover - pole_visit = convert_table_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), - table_name="uf_visit", - care_site_relationship=care_site_relationship, - ) - - pole_visit = pole_visit.merge(care_site, on="care_site_id") - - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] - - if is_koalas(pole_visit): - pole_visit.spark.cache() - - return pole_visit diff --git a/edsteva/probes/condition/viz_config.py b/edsteva/probes/condition/viz_config.py deleted file mode 100644 index e003d4d1..00000000 --- a/edsteva/probes/condition/viz_config.py +++ /dev/null @@ -1,356 +0,0 @@ -import altair as alt - - -def get_estimates_dashboard_config(self): - estimates_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_condition="sum(n_visit_with_condition)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict( - normalized_c=( - alt.datum.sum_visit_with_condition / alt.datum.sum_visit - ) - / alt.datum.c_0 - ) - ], - legend_title="Mean", - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "mean(normalized_c):Q", - title="c(Δt) / c₀", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={ - "field": "n_visit_with_condition", - "op": "sum", - "order": "descending", - }, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - error_line=dict( - legend_title="Standard deviation", - mark_errorband=dict( - extent="stdev", - ), - encode=dict( - stroke=alt.Stroke( - "legend_error_band", - title="Error band", - legend=alt.Legend( - symbolType="square", - orient="top", - labelFontSize=12, - labelFontStyle="bold", - ), - ), - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Source system", - "field": "source_system", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Condition type", - "field": "condition_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Diag type", - "field": "diag_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_visit_with_condition):Q", - title="Number of administrative records with condition", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_condition):Q", - format=",", - ), - sort={ - "field": "n_visit_with_condition", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "sort": "-x", - }, - ], - x=[ - dict( - x=alt.Y( - "sum(n_visit_with_condition):Q", - title="Number of administrative records with condition", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_condition):Q", - format=",", - ), - sort={ - "field": "n_visit_with_condition", - "op": "sum", - "order": "descending", - }, - ), - dict( - x=alt.Y( - "sum(n_visit):Q", - title="Number of administrative", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - ) - - return estimates_dashboard_config - - -def get_predictor_dashboard_config(self): - predictor_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_condition="sum(n_visit_with_condition)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict( - completeness=alt.datum.sum_visit_with_condition - / alt.datum.sum_visit - ), - ], - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "completeness:Q", - title="Completeness predictor c(t)", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={ - "field": "n_visit_with_condition", - "op": "sum", - "order": "descending", - }, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Source system", - "field": "source_system", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Condition type", - "field": "condition_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Diag type", - "field": "diag_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_visit_with_condition):Q", - title="Number of administrative records with condition", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_condition):Q", - format=",", - ), - sort={ - "field": "n_visit_with_condition", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "type": "nominal", - "sort": "-x", - }, - ], - x=[ - dict( - x=alt.Y( - "sum(n_visit_with_condition):Q", - title="Number of administrative records with condition", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_condition):Q", - format=",", - ), - sort={ - "field": "n_visit_with_condition", - "op": "sum", - "order": "descending", - }, - ), - dict( - x=alt.Y( - "sum(n_visit):Q", - title="Number of administrative", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - ) - return predictor_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/__init__.py b/edsteva/probes/condition/viz_configs/__init__.py new file mode 100644 index 00000000..db4bf310 --- /dev/null +++ b/edsteva/probes/condition/viz_configs/__init__.py @@ -0,0 +1,81 @@ +import catalogue + +from edsteva.probes.condition.viz_configs.per_condition.estimates_densities_plot import ( + get_estimates_densities_plot_config, +) +from edsteva.probes.condition.viz_configs.per_condition.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.probes.condition.viz_configs.per_condition.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.probes.condition.viz_configs.per_condition.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.probes.condition.viz_configs.per_condition.probe_plot import ( + get_probe_plot_config, +) +from edsteva.probes.condition.viz_configs.per_visit.estimates_densities_plot import ( + get_estimates_densities_plot_config, +) +from edsteva.probes.condition.viz_configs.per_visit.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.probes.condition.viz_configs.per_visit.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.probes.condition.viz_configs.per_visit.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.probes.condition.viz_configs.per_visit.probe_plot import ( + get_probe_plot_config, +) + +normalized_probe_dashboard = catalogue.create( + "edsteva.probes.condition.viz_configs", "normalized_probe_dashboard" +) +normalized_probe_dashboard.register( + "per_visit_default", func=get_normalized_probe_dashboard_config +) + +normalized_probe_dashboard.register( + "per_condition_default", func=get_normalized_probe_dashboard_config +) + +probe_dashboard = catalogue.create( + "edsteva.probes.condition.viz_configs", "probe_dashboard" +) +probe_dashboard.register("per_visit_default", func=get_probe_dashboard_config) +probe_dashboard.register("per_condition_default", func=get_probe_dashboard_config) + +estimates_densities_plot = catalogue.create( + "edsteva.probes.condition.viz_configs", "estimates_densities_plot" +) +estimates_densities_plot.register( + "per_visit_default", func=get_estimates_densities_plot_config +) +estimates_densities_plot.register( + "per_condition_default", func=get_estimates_densities_plot_config +) + +normalized_probe_plot = catalogue.create( + "edsteva.probes.condition.viz_configs", "normalized_probe_plot" +) +normalized_probe_plot.register( + "per_visit_default", func=get_normalized_probe_plot_config +) +normalized_probe_plot.register( + "per_condition_default", func=get_normalized_probe_plot_config +) + +probe_plot = catalogue.create("edsteva.probes.condition.viz_configs", "probe_plot") +probe_plot.register("per_visit_default", func=get_probe_plot_config) +probe_plot.register("per_condition_default", func=get_probe_plot_config) + +viz_configs = dict( + normalized_probe_dashboard=normalized_probe_dashboard, + probe_dashboard=probe_dashboard, + estimates_densities_plot=estimates_densities_plot, + normalized_probe_plot=normalized_probe_plot, + probe_plot=probe_plot, +) diff --git a/edsteva/probes/condition/viz_configs/per_condition/defaults.py b/edsteva/probes/condition/viz_configs/per_condition/defaults.py new file mode 100644 index 00000000..a5400659 --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/defaults.py @@ -0,0 +1,231 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Source system", + "field": "source_system", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Condition type", + "field": "condition_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Diag type", + "field": "diag_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_condition):Q", + format=",", + ), + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_condition):Q", + format=",", + ), + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_condition="sum(n_condition)", + groupby=["value", "date"], + ), + dict( + max_condition="max(sum_condition)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_condition / alt.datum.max_condition) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + aggregates=[ + dict( + sum_condition="sum(n_condition)", + groupby=["value", "date"], + ), + dict( + max_condition="max(sum_condition)", + groupby=["value"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_condition / alt.datum.max_condition), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py b/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py b/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_visit/defaults.py b/edsteva/probes/condition/viz_configs/per_visit/defaults.py new file mode 100644 index 00000000..b5587fe5 --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/defaults.py @@ -0,0 +1,247 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Source system", + "field": "source_system", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Condition type", + "field": "condition_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Diag type", + "field": "diag_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit_with_condition):Q", + title="Number of administrative records with condition", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_condition):Q", + format=",", + ), + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.Y( + "sum(n_visit_with_condition):Q", + title="Number of administrative records with condition", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_condition):Q", + format=",", + ), + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + ), + dict( + x=alt.Y( + "sum(n_visit):Q", + title="Number of administrative", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_condition="sum(n_visit_with_condition)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_visit_with_condition / alt.datum.sum_visit) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_condition="sum(n_visit_with_condition)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_visit_with_condition / alt.datum.sum_visit), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py b/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/note/completeness_predictors/__init__.py b/edsteva/probes/note/completeness_predictors/__init__.py new file mode 100644 index 00000000..a93421b9 --- /dev/null +++ b/edsteva/probes/note/completeness_predictors/__init__.py @@ -0,0 +1,15 @@ +import catalogue + +from .per_note import compute_completeness_predictor_per_note +from .per_visit import compute_completeness_predictor_per_visit + +completeness_predictors = catalogue.create( + "edsteva.probes.note", "completeness_predictors" +) + +completeness_predictors.register( + "per_visit_default", func=compute_completeness_predictor_per_visit +) +completeness_predictors.register( + "per_note_default", func=compute_completeness_predictor_per_note +) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py new file mode 100644 index 00000000..e3af8c85 --- /dev/null +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -0,0 +1,209 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.utils.filter_df import convert_uf_to_pole +from edsteva.probes.utils.prepare_df import ( + prepare_care_site, + prepare_note, + prepare_note_care_site, + prepare_visit_occurrence, +) +from edsteva.probes.utils.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + hospital_only, +) +from edsteva.utils.checks import check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness_predictor_per_note( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str], + extra_data: Data, + stay_durations: List[float], + note_types: Union[str, Dict[str, str]], +): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + extra_data : Data, optional + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + note_types : Union[str, Dict[str, str]], optional + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + """ + self._metrics = ["c", "n_note"] + check_tables(data=data, required_tables=["note"]) + + note = prepare_note( + data=data, + start_date=start_date, + end_date=end_date, + note_types=note_types, + ) + + visit_occurrence = prepare_visit_occurrence( + data=data, + stay_types=stay_types, + stay_durations=stay_durations, + ).drop(columns=["visit_occurrence_source_value", "date"]) + + care_site = prepare_care_site( + data, + care_site_ids, + care_site_short_names, + care_site_relationship, + ) + + note_hospital = get_hospital_note(note, visit_occurrence, care_site) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + note_predictor_by_level = {hospital_name: note_hospital} + + # UF selection + if not hospital_only(care_site_levels=care_site_levels): + if extra_data: + note_uf = get_uf_note( + extra_data, + note, + visit_occurrence, + care_site, + ) + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + note_predictor_by_level[uf_name] = note_uf + + note_pole = get_pole_note(note_uf, care_site, care_site_relationship) + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + note_predictor_by_level[pole_name] = note_pole + else: + logger.info("Note data are only available at hospital level") + care_site_levels = ["Hospital"] + + # Concatenate all predictors + note_predictor = concatenate_predictor_by_level( + predictor_by_level=note_predictor_by_level, + care_site_levels=care_site_levels, + ) + + if is_koalas(note_predictor): + note_predictor.spark.cache() + + return compute_completeness(self, note_predictor) + + +def compute_completeness(self, note_predictor): + partition_cols = self._index.copy() + ["date"] + + n_note = ( + note_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"note_id": "nunique"}) + .rename(columns={"note_id": "n_note"}) + ) + n_note = to("pandas", n_note) + + partition_cols = list(set(partition_cols) - {"date"}) + max_note = ( + n_note.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"n_note": "max"}) + .rename(columns={"n_note": "max_n_note"}) + ) + + note_predictor = n_note.merge( + max_note, + on=partition_cols, + ) + + note_predictor = to("pandas", note_predictor) + note_predictor["c"] = note_predictor["max_n_note"].where( + note_predictor["max_n_note"] == 0, + note_predictor["n_note"] / note_predictor["max_n_note"], + ) + note_predictor = note_predictor.drop(columns="max_n_note") + + return note_predictor + + +def get_hospital_note(note, visit_occurrence, care_site): + note_hospital = note.merge(visit_occurrence, on="visit_occurrence_id", how="left") + note_hospital = note_hospital.drop(columns="visit_occurrence_id") + note_hospital = note_hospital.merge(care_site, on="care_site_id") + if is_koalas(note_hospital): + note_hospital.spark.cache() + + return note_hospital + + +def get_uf_note( + extra_data, + note, + visit_occurrence, + care_site, +): # pragma: no cover + note_uf = prepare_note_care_site(extra_data=extra_data, note=note) + note_uf = note_uf.merge(care_site, on="care_site_id") + note_uf = note_uf.merge( + visit_occurrence.drop(columns="care_site_id"), + on="visit_occurrence_id", + how="left", + ) + note_uf = note_uf.drop(columns="visit_occurrence_id") + + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + note_uf = note_uf[note_uf["care_site_level"] == uf_name] + + if is_koalas(note_uf): + note_uf.spark.cache() + + return note_uf + + +def get_pole_note(note_uf, care_site, care_site_relationship): # pragma: no cover + note_pole = convert_uf_to_pole( + table=note_uf.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="note_uf", + care_site_relationship=care_site_relationship, + ) + + note_pole = note_pole.merge(care_site, on="care_site_id") + + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + note_pole = note_pole[note_pole["care_site_level"] == pole_name] + + if is_koalas(note_pole): + note_pole.spark.cache() + + return note_pole diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py new file mode 100644 index 00000000..689a6762 --- /dev/null +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -0,0 +1,223 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd +from loguru import logger + +from edsteva.probes.utils.filter_df import convert_uf_to_pole +from edsteva.probes.utils.prepare_df import ( + prepare_care_site, + prepare_note, + prepare_note_care_site, + prepare_visit_detail, + prepare_visit_occurrence, +) +from edsteva.probes.utils.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + hospital_only, +) +from edsteva.utils.checks import check_tables +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness_predictor_per_visit( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str], + extra_data: Data, + stay_durations: List[float], + note_types: Union[str, Dict[str, str]], +): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + extra_data : Data, optional + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + note_types : Union[str, Dict[str, str]], optional + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + """ + self._metrics = ["c", "n_visit", "n_visit_with_note"] + check_tables(data=data, required_tables=["note"]) + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + care_site = prepare_care_site( + data, + care_site_ids, + care_site_short_names, + care_site_relationship, + ) + + note = prepare_note(data, note_types) + + hospital_visit = get_hospital_visit(note, visit_occurrence, care_site) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + note_predictor_by_level = {hospital_name: hospital_visit} + + # UF selection + if not hospital_only(care_site_levels=care_site_levels): + if extra_data: + visit_detail = prepare_visit_detail(data, start_date, end_date) + + uf_visit = get_uf_visit( + extra_data, + note, + visit_occurrence, + visit_detail, + care_site, + ) + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + note_predictor_by_level[uf_name] = uf_visit + + pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + note_predictor_by_level[pole_name] = pole_visit + else: + logger.info("Note data are only available at hospital level") + care_site_levels = ["Hospital"] + + # Concatenate all predictors + note_predictor = concatenate_predictor_by_level( + predictor_by_level=note_predictor_by_level, + care_site_levels=care_site_levels, + ) + + if is_koalas(note_predictor): + note_predictor.spark.cache() + + return compute_completeness(self, note_predictor) + + +def compute_completeness(self, note_predictor): + partition_cols = self._index.copy() + ["date"] + + n_visit_with_note = ( + note_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"has_note": "count"}) + .rename(columns={"has_note": "n_visit_with_note"}) + ) + + partition_cols = list(set(partition_cols) - {"note_type"}) + n_visit = ( + note_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"visit_id": "nunique"}) + .rename(columns={"visit_id": "n_visit"}) + ) + + note_predictor = n_visit_with_note.merge( + n_visit, + on=partition_cols, + ) + + note_predictor = to("pandas", note_predictor) + + note_predictor["c"] = note_predictor["n_visit"].where( + note_predictor["n_visit"] == 0, + note_predictor["n_visit_with_note"] / note_predictor["n_visit"], + ) + + return note_predictor + + +def get_hospital_visit(note, visit_occurrence, care_site): + note_hospital = note[["visit_occurrence_id", "note_type"]].drop_duplicates() + note_hospital["has_note"] = True + hospital_visit = visit_occurrence.merge( + note_hospital, on="visit_occurrence_id", how="left" + ) + hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) + hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + if is_koalas(hospital_visit): + hospital_visit.spark.cache() + + return hospital_visit + + +def get_uf_visit( + extra_data, + note, + visit_occurrence, + visit_detail, + care_site, +): # pragma: no cover + note = prepare_note_care_site(extra_data=extra_data, note=note) + note_uf = note[ + ["visit_occurrence_id", "note_type", "care_site_id"] + ].drop_duplicates() + note_uf["has_note"] = True + + visit_detail = visit_detail.merge( + visit_occurrence[["visit_occurrence_id", "stay_type"]], + on="visit_occurrence_id", + ) + visit_detail = visit_detail.merge( + note_uf, + on=["visit_occurrence_id", "care_site_id"], + how="left", + ).drop(columns="visit_occurrence_id") + + uf_visit = visit_detail.merge(care_site, on="care_site_id") + + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] + + if is_koalas(uf_visit): + uf_visit.spark.cache() + + return uf_visit + + +def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover + pole_visit = convert_uf_to_pole( + table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="uf_visit", + care_site_relationship=care_site_relationship, + ) + + pole_visit = pole_visit.merge(care_site, on="care_site_id") + + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] + + if is_koalas(pole_visit): + pole_visit.spark.cache() + + return pole_visit diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py new file mode 100644 index 00000000..fbed13a7 --- /dev/null +++ b/edsteva/probes/note/note.py @@ -0,0 +1,112 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd + +from edsteva.probes.base import BaseProbe +from edsteva.probes.note.completeness_predictors import completeness_predictors +from edsteva.probes.note.viz_configs import viz_configs +from edsteva.utils.typing import Data + + +class NoteProbe(BaseProbe): + r""" + The ``NoteProbe`` computes $c(t)$ the availability of clinical documents linked to patients' administrative visit: + + $$ + c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. + + Attributes + ---------- + _index: List[str] + Variable from which data is grouped + + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id"]`` + """ + + def __init__( + self, + completeness_predictor: str = "per_visit_default", + _viz_config: Dict[str, str] = None, + ): + self._completeness_predictor = completeness_predictor + self._index = [ + "care_site_level", + "stay_type", + "length_of_stay", + "note_type", + "care_site_id", + ] + if _viz_config is None: + self._viz_config = {} + + def compute_process( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str] = None, + extra_data: Data = None, + stay_durations: List[float] = None, + note_types: Union[str, Dict[str, str]] = { + "Urgence": "urge", + "Ordonnance": "ordo", + "CRH": "crh", + }, + **kwargs, + ): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + extra_data : Data, optional + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + note_types : Union[str, Dict[str, str]], optional + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + """ + return completeness_predictors.get(self._completeness_predictor)( + self, + data=data, + care_site_relationship=care_site_relationship, + start_date=start_date, + end_date=end_date, + care_site_levels=care_site_levels, + stay_types=stay_types, + care_site_ids=care_site_ids, + extra_data=extra_data, + care_site_short_names=care_site_short_names, + note_types=note_types, + stay_durations=stay_durations, + **kwargs, + ) + + def get_viz_config(self, viz_type: str, **kwargs): + if viz_type in viz_configs.keys(): + _viz_config = self._viz_config.get(viz_type) + if _viz_config is None: + _viz_config = self._completeness_predictor + else: + raise ValueError(f"edsteva has no {viz_type} registry !") + return viz_configs[viz_type].get(_viz_config)(self, **kwargs) diff --git a/edsteva/probes/note/note_per_visit.py b/edsteva/probes/note/note_per_visit.py deleted file mode 100644 index 3fdf4bed..00000000 --- a/edsteva/probes/note/note_per_visit.py +++ /dev/null @@ -1,265 +0,0 @@ -from datetime import datetime -from typing import Dict, List, Union - -import pandas as pd -from loguru import logger - -from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import ( - CARE_SITE_LEVEL_NAMES, - add_note_care_site, - concatenate_predictor_by_level, - convert_table_to_pole, - convert_table_to_uf, - hospital_only, - prepare_care_site, - prepare_note, - prepare_visit_detail, - prepare_visit_occurrence, -) -from edsteva.utils.checks import check_tables -from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data - -from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config - - -class NotePerVisitProbe(BaseProbe): - r""" - The ``NoteProbe`` computes $c(t)$ the availability of clinical documents linked to patients' administrative visit: - - $$ - c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. - - Attributes - ---------- - _index: List[str] - Variable from which data is grouped - - **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id"]`` - """ - - _index = [ - "care_site_level", - "stay_type", - "length_of_stay", - "note_type", - "care_site_id", - ] - _metrics = ["c", "n_visit", "n_visit_with_note"] - get_predictor_dashboard_config = get_predictor_dashboard_config - get_estimates_dashboard_config = get_estimates_dashboard_config - - def compute_process( - self, - data: Data, - care_site_relationship: pd.DataFrame, - start_date: datetime, - end_date: datetime, - care_site_levels: List[str], - stay_types: Union[str, Dict[str, str]], - care_site_ids: List[int], - care_site_short_names: List[str] = None, - extra_data: Data = None, - stay_durations: List[float] = None, - note_types: Union[str, Dict[str, str]] = { - "Urgence": "urge", - "Ordonnance": "ordo", - "CRH": "crh", - }, - ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - extra_data : Data, optional - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - note_types : Union[str, Dict[str, str]], optional - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - """ - check_tables(data=data, required_tables=["note"]) - - visit_occurrence = prepare_visit_occurrence( - data=data, - start_date=start_date, - end_date=end_date, - stay_types=stay_types, - stay_durations=stay_durations, - ) - - care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, - ) - - note = prepare_note(data, note_types) - - hospital_visit = get_hospital_visit(note, visit_occurrence, care_site) - hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] - note_predictor_by_level = {hospital_name: hospital_visit} - - # UF selection - if not hospital_only(care_site_levels=care_site_levels): - if extra_data: - visit_detail = prepare_visit_detail(data, start_date, end_date) - - uf_visit = get_uf_visit( - extra_data, - note, - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, - ) - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - note_predictor_by_level[uf_name] = uf_visit - - pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - note_predictor_by_level[pole_name] = pole_visit - else: - logger.info("Note data are only available at hospital level") - care_site_levels = ["Hospital"] - - # Concatenate all predictors - note_predictor = concatenate_predictor_by_level( - predictor_by_level=note_predictor_by_level, - care_site_levels=care_site_levels, - ) - - if is_koalas(note_predictor): - note_predictor.spark.cache() - - return compute_completeness(self, note_predictor) - - -def compute_completeness(self, note_predictor): - partition_cols = self._index.copy() + ["date"] - - n_visit_with_note = ( - note_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"has_note": "count"}) - .rename(columns={"has_note": "n_visit_with_note"}) - ) - - partition_cols = list(set(partition_cols) - {"note_type"}) - n_visit = ( - note_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"visit_id": "nunique"}) - .rename(columns={"visit_id": "n_visit"}) - ) - - note_predictor = n_visit_with_note.merge( - n_visit, - on=partition_cols, - ) - - note_predictor = to("pandas", note_predictor) - - note_predictor["c"] = note_predictor["n_visit"].where( - note_predictor["n_visit"] == 0, - note_predictor["n_visit_with_note"] / note_predictor["n_visit"], - ) - - return note_predictor - - -def get_hospital_visit(note, visit_occurrence, care_site): - note_hospital = note[["visit_occurrence_id", "note_type"]].drop_duplicates() - note_hospital["has_note"] = True - hospital_visit = visit_occurrence.merge( - note_hospital, on="visit_occurrence_id", how="left" - ) - hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) - hospital_visit = hospital_visit.merge(care_site, on="care_site_id") - if is_koalas(hospital_visit): - hospital_visit.spark.cache() - - return hospital_visit - - -def get_uf_visit( - extra_data, - note, - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, -): # pragma: no cover - note = add_note_care_site(extra_data=extra_data, note=note) - note_uf = note[ - ["visit_occurrence_id", "note_type", "care_site_id"] - ].drop_duplicates() - note_uf["has_note"] = True - - visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "stay_type"]], - on="visit_occurrence_id", - ) - visit_detail = visit_detail.merge( - note_uf, - on=["visit_occurrence_id", "care_site_id"], - how="left", - ) - visit_detail = visit_detail.drop(columns="visit_occurrence_id") - - uf_visit = convert_table_to_uf( - table=visit_detail, - table_name="visit_detail", - care_site_relationship=care_site_relationship, - ) - uf_visit = uf_visit.merge(care_site, on="care_site_id") - - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] - - if is_koalas(uf_visit): - uf_visit.spark.cache() - - return uf_visit - - -def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover - pole_visit = convert_table_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), - table_name="uf_visit", - care_site_relationship=care_site_relationship, - ) - - pole_visit = pole_visit.merge(care_site, on="care_site_id") - - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] - - if is_koalas(pole_visit): - pole_visit.spark.cache() - - return pole_visit diff --git a/edsteva/probes/note/viz_config.py b/edsteva/probes/note/viz_config.py deleted file mode 100644 index 7e3651fd..00000000 --- a/edsteva/probes/note/viz_config.py +++ /dev/null @@ -1,327 +0,0 @@ -import altair as alt - - -def get_estimates_dashboard_config(self): - estimates_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_note="sum(n_visit_with_note)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_visit_with_note / alt.datum.sum_visit) - / alt.datum.c_0 - ) - ], - legend_title="Mean", - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "mean(normalized_c):Q", - title="c(Δt) / c₀", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={ - "field": "n_visit_with_note", - "op": "sum", - "order": "descending", - }, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - error_line=dict( - legend_title="Standard deviation", - mark_errorband=dict( - extent="stdev", - ), - encode=dict( - stroke=alt.Stroke( - "legend_error_band", - title="Error band", - legend=alt.Legend( - symbolType="square", - orient="top", - labelFontSize=12, - labelFontStyle="bold", - ), - ), - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Note type", - "field": "note_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_visit_with_note):Q", - title="Number of administrative records with discharge summary", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_note):Q", - format=",", - ), - sort={ - "field": "n_visit_with_note", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "sort": "-x", - }, - ], - x=[ - dict( - x=alt.X( - "sum(n_visit_with_note):Q", - title="Number of administrative records with discharge summary", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_note):Q", - format=",", - ), - sort={ - "field": "n_visit_with_note", - "op": "sum", - "order": "descending", - }, - ), - dict( - x=alt.X( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - ) - - return estimates_dashboard_config - - -def get_predictor_dashboard_config(self): - predictor_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_note="sum(n_visit_with_note)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict(completeness=alt.datum.sum_visit_with_note / alt.datum.sum_visit), - ], - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "completeness:Q", - title="Completeness predictor c(t)", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={ - "field": "n_visit_with_note", - "op": "sum", - "order": "descending", - }, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Note type", - "field": "note_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_visit_with_note):Q", - title="Number of administrative records with discharge summary", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_note):Q", - format=",", - ), - sort={ - "field": "n_visit_with_note", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "type": "nominal", - "sort": "-x", - }, - ], - x=[ - dict( - x=alt.X( - "sum(n_visit_with_note):Q", - title="Number of administrative records with discharge summary", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit_with_note):Q", - format=",", - ), - sort={ - "field": "n_visit_with_note", - "op": "sum", - "order": "descending", - }, - ), - dict( - x=alt.X( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - ) - return predictor_dashboard_config diff --git a/edsteva/probes/note/viz_configs/__init__.py b/edsteva/probes/note/viz_configs/__init__.py new file mode 100644 index 00000000..58ef6479 --- /dev/null +++ b/edsteva/probes/note/viz_configs/__init__.py @@ -0,0 +1,74 @@ +import catalogue + +from edsteva.probes.note.viz_configs.per_note.estimates_densities_plot import ( + get_estimates_densities_plot_config, +) +from edsteva.probes.note.viz_configs.per_note.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.probes.note.viz_configs.per_note.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.probes.note.viz_configs.per_note.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.probes.note.viz_configs.per_note.probe_plot import get_probe_plot_config +from edsteva.probes.note.viz_configs.per_visit.estimates_densities_plot import ( + get_estimates_densities_plot_config, +) +from edsteva.probes.note.viz_configs.per_visit.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.probes.note.viz_configs.per_visit.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.probes.note.viz_configs.per_visit.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.probes.note.viz_configs.per_visit.probe_plot import get_probe_plot_config + +normalized_probe_dashboard = catalogue.create( + "edsteva.probes.note.viz_configs", "normalized_probe_dashboard" +) +normalized_probe_dashboard.register( + "per_visit_default", func=get_normalized_probe_dashboard_config +) +normalized_probe_dashboard.register( + "per_note_default", func=get_normalized_probe_dashboard_config +) + +probe_dashboard = catalogue.create("edsteva.probes.note.viz_configs", "probe_dashboard") +probe_dashboard.register("per_visit_default", func=get_probe_dashboard_config) +probe_dashboard.register("per_note_default", func=get_probe_dashboard_config) + +estimates_densities_plot = catalogue.create( + "edsteva.probes.note.viz_configs", "estimates_densities_plot" +) +estimates_densities_plot.register( + "per_visit_default", func=get_estimates_densities_plot_config +) +estimates_densities_plot.register( + "per_note_default", func=get_estimates_densities_plot_config +) + +normalized_probe_plot = catalogue.create( + "edsteva.probes.note.viz_configs", "normalized_probe_plot" +) +normalized_probe_plot.register( + "per_visit_default", func=get_normalized_probe_plot_config +) +normalized_probe_plot.register( + "per_note_default", func=get_normalized_probe_plot_config +) + +probe_plot = catalogue.create("edsteva.probes.note.viz_configs", "probe_plot") +probe_plot.register("per_visit_default", func=get_probe_plot_config) +probe_plot.register("per_note_default", func=get_probe_plot_config) + +viz_configs = dict( + normalized_probe_dashboard=normalized_probe_dashboard, + probe_dashboard=probe_dashboard, + estimates_densities_plot=estimates_densities_plot, + normalized_probe_plot=normalized_probe_plot, + probe_plot=probe_plot, +) diff --git a/edsteva/probes/note/viz_configs/per_note/defaults.py b/edsteva/probes/note/viz_configs/per_note/defaults.py new file mode 100644 index 00000000..04d28214 --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/defaults.py @@ -0,0 +1,216 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Note type", + "field": "note_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_note):Q", + format=",", + ), + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_note):Q", + format=",", + ), + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_note="sum(n_note)", + groupby=["value", "date"], + ), + dict( + max_note="max(sum_note)", + groupby=["value"], + ), + ], + calculates=[ + dict(normalized_c=(alt.datum.sum_note / alt.datum.max_note) / alt.datum.c_0) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + aggregates=[ + dict( + sum_note="sum(n_note)", + groupby=["value", "date"], + ), + dict( + max_note="max(sum_note)", + groupby=["value"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_note / alt.datum.max_note), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py b/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py b/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py b/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py b/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/note/viz_configs/per_note/probe_plot.py b/edsteva/probes/note/viz_configs/per_note/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/note/viz_configs/per_visit/defaults.py b/edsteva/probes/note/viz_configs/per_visit/defaults.py new file mode 100644 index 00000000..5894bfa5 --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/defaults.py @@ -0,0 +1,235 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Note type", + "field": "note_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit_with_note):Q", + title="Number of administrative records with discharge summary", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_note):Q", + format=",", + ), + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_visit_with_note):Q", + title="Number of administrative records with discharge summary", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit_with_note):Q", + format=",", + ), + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + ), + dict( + x=alt.X( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_note="sum(n_visit_with_note)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_visit_with_note / alt.datum.sum_visit) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + sum_visit_with_note="sum(n_visit_with_note)", + groupby=["value", "date"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_visit_with_note / alt.datum.sum_visit), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_visit_with_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/note/viz_configs/per_visit/probe_plot.py b/edsteva/probes/note/viz_configs/per_visit/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/utils.py b/edsteva/probes/utils.py deleted file mode 100644 index 0e56309a..00000000 --- a/edsteva/probes/utils.py +++ /dev/null @@ -1,1251 +0,0 @@ -import os -from datetime import datetime, timedelta -from pathlib import Path -from typing import Dict, List, Tuple, Union - -import _pickle as pickle -import numpy as np -import pandas as pd -from IPython.display import display -from loguru import logger - -from edsteva.utils.checks import check_columns, check_tables -from edsteva.utils.framework import get_framework, is_koalas, to -from edsteva.utils.typing import Data, DataFrame - -CARE_SITE_LEVEL_NAMES = { - "Hospital": "Hôpital", - "Pole": "Pôle/DMU", - "UF": "Unité Fonctionnelle (UF)", -} - -UNSUPPORTED_CARE_SITE_LEVEL_NAMES = { - "UC": "Unité de consultation (UC)", -} - - -def prepare_visit_occurrence( - data: Data, - start_date: datetime, - end_date: datetime, - stay_types: Union[str, Dict[str, str]], - stay_durations: List[float], -): - required_columns = [ - "visit_occurrence_id", - "visit_source_value", - "visit_start_datetime", - "visit_end_datetime", - "care_site_id", - "row_status_source_value", - "visit_occurrence_source_value", - ] - check_columns( - data.visit_occurrence, - required_columns=required_columns, - df_name="visit_occurrence", - ) - visit_occurrence = data.visit_occurrence[required_columns] - - visit_occurrence = add_length_of_stay( - visit_occurrence=visit_occurrence, stay_durations=stay_durations - ) - - visit_occurrence = visit_occurrence.rename( - columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} - ) - - visit_occurrence = get_valid_observations( - table=visit_occurrence, - table_name="visit_occurrence", - invalid_naming="supprimé", - ) - - visit_occurrence = filter_table_by_date( - table=visit_occurrence, - table_name="visit_occurrence", - start_date=start_date, - end_date=end_date, - ) - - if stay_types: - visit_occurrence = filter_table_by_type( - table=visit_occurrence, - table_name="visit_occurrence", - type_groups=stay_types, - source_col="stay_type", - target_col="stay_type", - ) - - return visit_occurrence - - -def prepare_measurement( - data: Data, - biology_relationship: pd.DataFrame, - concepts_sets: Union[str, Dict[str, str]], - start_date: datetime, - end_date: datetime, - root_terminology: str, - standard_terminologies: List[str], - per_visit: bool, -): - measurement_columns = [ - "measurement_id", - "visit_occurrence_id", - "measurement_datetime", - "row_status_source_value", - "measurement_source_concept_id", - ] - - check_columns( - data.measurement, - required_columns=measurement_columns, - df_name="measurement", - ) - measurement = data.measurement[measurement_columns].rename( - columns={ - "measurement_source_concept_id": "{}_concept_id".format(root_terminology), - "measurement_datetime": "date", - } - ) - measurement = get_valid_observations( - table=measurement, table_name="measurement", valid_naming="Validé" - ) - - biology_relationship = biology_relationship[ - [ - "{}_{}".format(root_terminology, concept_col) - for concept_col in ["concept_id", "concept_code", "concept_name"] - ] - + [ - "{}_{}".format(terminology, concept_col) - for terminology in standard_terminologies - for concept_col in ["concept_code", "concept_name", "vocabulary"] - ] - ] - biology_relationship = to(get_framework(measurement), biology_relationship) - if is_koalas(biology_relationship): - biology_relationship = biology_relationship.spark.hint("broadcast") - measurement = measurement.merge( - biology_relationship, on="{}_concept_id".format(root_terminology) - ) - - if not per_visit: - measurement = filter_table_by_date( - table=measurement, - table_name="measurement", - start_date=start_date, - end_date=end_date, - ) - - if concepts_sets: - measurement_by_terminology = [] - for standard_terminology in standard_terminologies: - measurement_by_terminology.append( - filter_table_by_type( - table=measurement, - table_name="measurement", - type_groups=concepts_sets, - source_col="{}_concept_code".format(standard_terminology), - target_col="concepts_set", - ) - ) - measurement = get_framework(measurement).concat(measurement_by_terminology) - - return measurement - - -def prepare_condition_occurrence( - data: Data, - extra_data: Data, - visit_occurrence: DataFrame, - source_systems: List[str], - diag_types: Union[str, Dict[str, str]], - condition_types: Union[str, Dict[str, str]], -): - condition_occurrence_tables = [] - if "AREM" in source_systems: - check_tables( - data=extra_data, - required_tables=["visit_occurrence", "condition_occurrence"], - ) - # Fetch conditions from Data lake - I2B2_visit = extra_data.visit_occurrence[ - ["visit_occurrence_id", "visit_occurrence_source_value"] - ] - I2B2_condition_occurrence = extra_data.condition_occurrence[ - [ - "visit_occurrence_id", - "condition_status_source_value", - "condition_source_value", - "care_site_source_value", - "cdm_source", - ] - ] - # Add visit_occurrence_source_value - arem_condition_occurrence = I2B2_visit.merge( - I2B2_condition_occurrence, - on="visit_occurrence_id", - how="inner", - ).drop(columns="visit_occurrence_id") - - # Link with visit_occurrence_source_value - arem_condition_occurrence = arem_condition_occurrence.merge( - visit_occurrence[["visit_occurrence_source_value", "visit_occurrence_id"]], - on="visit_occurrence_source_value", - ).drop(columns="visit_occurrence_source_value") - arem_condition_occurrence = arem_condition_occurrence[ - arem_condition_occurrence.cdm_source == "AREM" - ] - arem_condition_occurrence["visit_detail_id"] = None - condition_occurrence_tables.append(arem_condition_occurrence) - - if "ORBIS" in source_systems: - orbis_condition_occurrence = data.condition_occurrence[ - [ - "visit_occurrence_id", - "visit_detail_id", - "condition_source_value", - "condition_status_source_value", - "row_status_source_value", - "cdm_source", - ] - ] - orbis_condition_occurrence = get_valid_observations( - table=orbis_condition_occurrence, - table_name="orbis_condition_occurrence", - valid_naming="Actif", - ) - orbis_condition_occurrence = orbis_condition_occurrence[ - orbis_condition_occurrence.cdm_source == "ORBIS" - ] - condition_occurrence_tables.append(orbis_condition_occurrence) - - framework = get_framework(condition_occurrence_tables[0]) - condition_occurrence = framework.concat( - condition_occurrence_tables, ignore_index=True - ) - - # Filter source system - condition_occurrence = condition_occurrence.rename( - columns={"cdm_source": "source_system"} - ) - - # Filter diagnostics - condition_occurrence = condition_occurrence.rename( - columns={"condition_status_source_value": "diag_type"} - ) - if diag_types: - condition_occurrence = filter_table_by_type( - table=condition_occurrence, - table_name="condition_occurrence", - type_groups=diag_types, - source_col="diag_type", - target_col="diag_type", - ) - - # Filter conditions - condition_occurrence = condition_occurrence.rename( - columns={"condition_source_value": "condition_type"} - ) - if condition_types: - condition_occurrence = filter_table_by_type( - table=condition_occurrence, - table_name="condition_occurrence", - type_groups=condition_types, - source_col="condition_type", - target_col="condition_type", - ) - - return condition_occurrence - - -def prepare_care_site( - data: Data, - care_site_ids: List[int], - care_site_short_names: List[str], - care_site_relationship: pd.DataFrame, -): - care_site = data.care_site[ - [ - "care_site_id", - "care_site_type_source_value", - "care_site_short_name", - ] - ] - care_site = care_site.rename( - columns={"care_site_type_source_value": "care_site_level"} - ) - if care_site_ids or care_site_short_names: - care_site = filter_table_by_care_site( - table_to_filter=care_site, - table_name="care_site", - care_site_relationship=care_site_relationship, - care_site_ids=care_site_ids, - care_site_short_names=care_site_short_names, - ) - - return care_site - - -def prepare_note( - data: Data, - note_types: Union[str, Dict[str, str]], -): - note = data.note[ - [ - "note_id", - "visit_occurrence_id", - "note_class_source_value", - "row_status_source_value", - "note_text", - ] - ] - note = note.rename(columns={"note_class_source_value": "note_type"}) - note = note[~(note["note_text"].isna())] - note = note.drop(columns=["note_text"]) - note = get_valid_observations(table=note, table_name="note", valid_naming="Actif") - - # Add note type - if note_types: - note = filter_table_by_type( - table=note, - table_name="note", - type_groups=note_types, - source_col="note_type", - target_col="note_type", - ) - - return note - - -def add_note_care_site(extra_data: Data, note: DataFrame): - check_tables( - data=extra_data, - required_tables=["note_ref", "care_site_ref"], - ) - - note_ref = extra_data.note_ref[ - [ - "note_id", - "ufr_source_value", - "us_source_value", - ] - ] - care_site_ref = extra_data.care_site_ref[ - [ - "care_site_source_value", - "care_site_id", - ] - ] - - note_ref = note_ref.melt( - id_vars="note_id", - value_name="care_site_source_value", - ) - note = note.merge(note_ref, on="note_id") - note = note.merge(care_site_ref, on="care_site_source_value") - - return note - - -def prepare_visit_detail( - data: Data, - start_date: datetime, - end_date: datetime, - visit_detail_type: str = "PASS UF", -): - visit_detail = data.visit_detail[ - [ - "visit_detail_id", - "visit_occurrence_id", - "visit_detail_start_datetime", - "visit_detail_type_source_value", - "care_site_id", - "row_status_source_value", - ] - ] - visit_detail = visit_detail.rename( - columns={ - "visit_detail_id": "visit_id", - "visit_detail_start_datetime": "date", - } - ) - visit_detail = get_valid_observations( - table=visit_detail, table_name="visit_detail", valid_naming="Actif" - ) - visit_detail = visit_detail[ - visit_detail["visit_detail_type_source_value"] == visit_detail_type - ] # Important to filter only "PASS" to remove duplicate visits - visit_detail = visit_detail.drop(columns=["visit_detail_type_source_value"]) - visit_detail = filter_table_by_date( - table=visit_detail, - table_name="visit_detail", - start_date=start_date, - end_date=end_date, - ) - - return visit_detail - - -def hospital_only(care_site_levels: List[str]): - if not isinstance(care_site_levels, list): - care_site_levels = [care_site_levels] - return len(care_site_levels) == 1 and ( - care_site_levels[0] == "Hospital" - or care_site_levels[0] == CARE_SITE_LEVEL_NAMES["Hospital"] - ) - - -def filter_table_by_care_site( - table_to_filter: DataFrame, - table_name: str, - care_site_relationship: pd.DataFrame, - care_site_short_names: Union[str, List[str]] = None, - care_site_ids: Union[int, List[int]] = None, -): - care_site = care_site_relationship[ - ["care_site_id", "care_site_short_name", "care_site_level"] - ] - care_site_filter = [] - if care_site_ids: - if not isinstance(care_site_ids, list): - care_site_ids = [care_site_ids] - care_site_filter.append( - care_site[care_site["care_site_id"].isin(care_site_ids)].copy() - ) - if care_site_short_names: - if not isinstance(care_site_short_names, list): - care_site_short_names = [care_site_short_names] - care_site_filter.append( - care_site[ - care_site["care_site_short_name"].isin(care_site_short_names) - ].copy() - ) - if care_site_filter: - care_site_filter = pd.concat( - care_site_filter, ignore_index=True - ).drop_duplicates("care_site_id") - else: - raise Exception("care_site_ids or care_site_short_names must be provided") - - # Get all UF from UC - uc_care_site = care_site_filter[ - care_site_filter.care_site_level == UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"] - ] - uc_care_site = uc_care_site[["care_site_id"]].drop_duplicates() - care_site_rel_uc_to_uf = _get_relationship_table_uc_to_uf( - care_site_relationship=care_site_relationship - ) - care_site_rel_uc_to_uf = to("pandas", care_site_rel_uc_to_uf) - related_uf_care_site = uc_care_site.merge( - care_site_rel_uc_to_uf, - on="care_site_id", - ) - uf_from_uc = related_uf_care_site[ - ["care_site_id_uf", "care_site_short_name_uf"] - ].drop_duplicates("care_site_id_uf") - - # Get all UF from Hospital - care_site_rel_uf_to_hospital = _get_relationship_table_uf_to_hospital( - care_site_relationship=care_site_relationship - ) - care_site_rel_uf_to_hospital = to("pandas", care_site_rel_uf_to_hospital) - - hospital_care_site = care_site_filter[ - care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["Hospital"] - ].rename( - columns={ - "care_site_id": "care_site_id_hospital", - "care_site_short_name": "care_site_short_name_hospital", - } - ) - hospital_care_site = hospital_care_site[ - ["care_site_id_hospital", "care_site_short_name_hospital"] - ].drop_duplicates("care_site_id_hospital") - related_hospital_care_site = hospital_care_site.merge( - care_site_rel_uf_to_hospital, - on=[ - "care_site_id_hospital", - "care_site_short_name_hospital", - ], - how="left", - ) - uf_from_hospital = related_hospital_care_site[ - [ - "care_site_id_uf", - "care_site_short_name_uf", - ] - ].drop_duplicates("care_site_id_uf") - pole_from_hospital = related_hospital_care_site[ - [ - "care_site_id_pole", - "care_site_short_name_pole", - ] - ].drop_duplicates("care_site_id_pole") - - # Get all UF from pole - pole_care_site = care_site_filter[ - care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["Pole"] - ].rename( - columns={ - "care_site_id": "care_site_id_pole", - "care_site_short_name": "care_site_short_name_pole", - } - ) - pole_care_site = pole_care_site[ - ["care_site_id_pole", "care_site_short_name_pole"] - ].drop_duplicates("care_site_id_pole") - related_pole_care_site = pole_care_site.merge( - care_site_rel_uf_to_hospital, - on=[ - "care_site_id_pole", - "care_site_short_name_pole", - ], - how="left", - ) - uf_from_pole = related_pole_care_site[ - [ - "care_site_id_uf", - "care_site_short_name_uf", - ] - ].drop_duplicates("care_site_id_uf") - - # Get all Hospital from Pole - hospital_from_pole = related_pole_care_site[ - [ - "care_site_id_hospital", - "care_site_short_name_hospital", - ] - ].drop_duplicates("care_site_id_hospital") - - # Get all Pole from UF - uf_care_site = care_site_filter[ - care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["UF"] - ].rename( - columns={ - "care_site_id": "care_site_id_uf", - "care_site_short_name": "care_site_short_name_uf", - } - ) - uf_care_site = uf_care_site[ - ["care_site_id_uf", "care_site_short_name_uf"] - ].drop_duplicates("care_site_id_uf") - uf_care_site = pd.concat([uf_care_site, uf_from_uc]) - - related_uf_care_site = uf_care_site.merge( - care_site_rel_uf_to_hospital, - on=[ - "care_site_id_uf", - "care_site_short_name_uf", - ], - how="left", - ) - pole_from_uf = related_uf_care_site[ - [ - "care_site_id_pole", - "care_site_short_name_pole", - ] - ].drop_duplicates("care_site_id_pole") - - # Get all Hospital from UF - hospital_from_uf = related_uf_care_site[ - [ - "care_site_id_hospital", - "care_site_short_name_hospital", - ] - ].drop_duplicates("care_site_id_hospital") - - extended_uf_care_site = pd.concat( - [uf_care_site, uf_from_pole, uf_from_hospital, uf_from_uc], ignore_index=True - ).drop_duplicates("care_site_id_uf") - extended_uf_care_site = extended_uf_care_site.rename( - columns={ - "care_site_id_uf": "care_site_id", - "care_site_short_name_uf": "care_site_short_name", - } - ) - - extended_pole_care_site = pd.concat( - [pole_care_site, pole_from_uf, pole_from_hospital], ignore_index=True - ).drop_duplicates("care_site_id_pole") - extended_pole_care_site = extended_pole_care_site.rename( - columns={ - "care_site_id_pole": "care_site_id", - "care_site_short_name_pole": "care_site_short_name", - } - ) - extended_hospital_care_site = pd.concat( - [hospital_care_site, hospital_from_pole, hospital_from_uf], ignore_index=True - ).drop_duplicates("care_site_id_hospital") - extended_hospital_care_site = extended_hospital_care_site.rename( - columns={ - "care_site_id_hospital": "care_site_id", - "care_site_short_name_hospital": "care_site_short_name", - } - ) - unsupported_care_site = care_site_filter[ - ~(care_site_filter.care_site_level.isin(CARE_SITE_LEVEL_NAMES.values())) - ] - if not unsupported_care_site.empty: - logger.warning( - "The following care site ids are not supported because the associated care site levels are not in {}.", - CARE_SITE_LEVEL_NAMES.values(), - ) - display(unsupported_care_site) - - if not extended_hospital_care_site.empty: - logger.debug( - "The following hospitals {} have been selected from {}.", - extended_hospital_care_site.care_site_short_name.to_list(), - table_name, - ) - if not extended_pole_care_site.empty: - logger.debug( - "The following poles {} have been selected from {}.", - extended_pole_care_site.care_site_short_name.to_list(), - table_name, - ) - if not extended_uf_care_site.empty: - logger.debug( - "The following UF {} have been selected from {}.", - extended_uf_care_site.care_site_short_name.to_list(), - table_name, - ) - - extended_care_site_id_to_filter = pd.concat( - [extended_hospital_care_site, extended_pole_care_site, extended_uf_care_site], - ignore_index=True, - ).care_site_id.to_list() - return table_to_filter[ - table_to_filter["care_site_id"].isin(extended_care_site_id_to_filter) - ] - - -def filter_table_by_type( - table: DataFrame, - table_name: str, - type_groups: Union[str, Dict], - source_col: str, - target_col: str, -): - if isinstance(type_groups, str): - type_groups = {type_groups: type_groups} - if isinstance(type_groups, dict): - table_per_types = [] - for type_name, type_value in type_groups.items(): - table_per_type_element = table[ - table[source_col].str.contains( - type_value, - case=False, - regex=True, - na=False, - ) - ].copy() - table_per_type_element[target_col] = type_name - table_per_types.append(table_per_type_element) - else: - raise TypeError( - "{} must be str or dict not {}".format(target_col, type(type_groups)) - ) - - logger.debug( - "The following {} : {} have been selected on table {}", - target_col, - type_groups, - table_name, - ) - return get_framework(table).concat(table_per_types, ignore_index=True) - - -def convert_table_to_uf( - table: DataFrame, - table_name: str, - care_site_relationship: DataFrame, -): - care_site_rel_uc_to_uf = _get_relationship_table_uc_to_uf( - care_site_relationship=care_site_relationship - ) - care_site_rel_uc_to_uf = to(get_framework(table), care_site_rel_uc_to_uf) - table = table.merge(care_site_rel_uc_to_uf, on="care_site_id", how="left") - table["care_site_id"] = table["care_site_id_uf"].mask( - table["care_site_id_uf"].isna(), table["care_site_id"] - ) - table = table.drop(columns=["care_site_id_uf"]) - logger.debug( - "For level {}, stays of the table {} located in {} have been linked to their corresponding {}", - CARE_SITE_LEVEL_NAMES["UF"], - table_name, - UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"], - CARE_SITE_LEVEL_NAMES["UF"], - ) - return table - - -def convert_table_to_pole( - table: DataFrame, - table_name: str, - care_site_relationship: DataFrame, -): - care_site_rel_uf_to_pole = _get_relationship_table_uf_to_hospital( - care_site_relationship=care_site_relationship - )[["care_site_id_uf", "care_site_id_pole"]].rename( - columns={"care_site_id_uf": "care_site_id"} - ) - care_site_rel_uf_to_pole = to(get_framework(table), care_site_rel_uf_to_pole) - table = table.merge(care_site_rel_uf_to_pole, on="care_site_id", how="left") - table["care_site_id"] = table["care_site_id_pole"].mask( - table["care_site_id_pole"].isna(), table["care_site_id"] - ) - table = table.drop(columns="care_site_id_pole") - logger.debug( - "For level {}, stays of the table {} located in {} have been linked to their corresponding {}", - CARE_SITE_LEVEL_NAMES["Pole"], - table_name, - CARE_SITE_LEVEL_NAMES["UF"], - CARE_SITE_LEVEL_NAMES["Pole"], - ) - return table - - -def get_valid_observations( - table: DataFrame, - table_name: str, - invalid_naming: str = None, - valid_naming: str = None, -): - check_columns( - df=table, - required_columns=["row_status_source_value"], - ) - - if valid_naming: - table_valid = table[table["row_status_source_value"] == valid_naming] - elif invalid_naming: - table_valid = table[~(table["row_status_source_value"] == invalid_naming)] - else: - raise Exception("valid_naming or invalid_naming must be provided.") - table_valid = table_valid.drop(columns=["row_status_source_value"]) - logger.debug("Valid observations have been selected for table {}.", table_name) - return table_valid - - -def filter_table_by_date( - table: DataFrame, - table_name: str, - start_date: Union[datetime, str] = None, - end_date: Union[datetime, str] = None, -): - check_columns(df=table, required_columns=["date"]) - - table.dropna(subset=["date"], inplace=True) - logger.debug("Droping observations with missing date in table {}.", table_name) - table["date"] = table["date"].astype("datetime64") - start_date = pd.to_datetime(start_date) - end_date = pd.to_datetime(end_date) - - if end_date and start_date: - table = table[(table["date"] >= start_date) & (table["date"] < end_date)] - logger.debug( - "Observations between {} and {} have been selected for table {}.", - start_date, - end_date, - table_name, - ) - elif start_date: - table = table[table["date"] >= start_date] - logger.debug( - "Observations after {} have been selected for table {}.", - start_date, - table_name, - ) - elif end_date: - table = table[table["date"] < end_date] - logger.debug( - "Observations before {} have been selected for table {}.", - end_date, - table_name, - ) - # Truncate - table["date"] = table["date"].dt.strftime("%Y-%m").astype("datetime64") - return table - - -def save_object(obj, filename): - if not isinstance(filename, Path): - filename = Path(filename) - os.makedirs(filename.parent, exist_ok=True) - with open(filename, "wb") as outp: # Overwrites any existing file. - pickle.dump(obj, outp, -1) - logger.info("Saved to {}", filename) - - -def load_object(filename): - if os.path.isfile(filename): - with open(filename, "rb") as obj: - logger.info("Successfully loaded from {}", filename) - return pickle.load(obj) - else: - raise FileNotFoundError( - "There is no file found in {}".format( - filename, - ) - ) - - -def delete_object(obj, filename: str): - if os.path.isfile(filename): - os.remove(filename) - logger.info( - "Removed from {}", - filename, - ) - if hasattr(obj, "path"): - del obj.path - else: - logger.warning( - "There is no file found in {}", - filename, - ) - - -def add_length_of_stay(visit_occurrence: DataFrame, stay_durations: List[float]): - if stay_durations: - visit_occurrence["length"] = ( - visit_occurrence["visit_end_datetime"] - - visit_occurrence["visit_start_datetime"] - ) / np.timedelta64(timedelta(days=1)) - - # Incomplete stays - visit_occurrence["length_of_stay"] = "Unknown" - visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - visit_occurrence["visit_end_datetime"].isna(), - "Incomplete stay", - ) - - # Complete stays - min_duration = stay_durations[0] - max_duration = stay_durations[-1] - visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - (visit_occurrence["length"] <= min_duration), - "<= {} days".format(min_duration), - ) - visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - (visit_occurrence["length"] >= max_duration), - ">= {} days".format(max_duration), - ) - n_duration = len(stay_durations) - for i in range(0, n_duration - 1): - min = stay_durations[i] - max = stay_durations[i + 1] - visit_occurrence["length_of_stay"] = visit_occurrence[ - "length_of_stay" - ].mask( - (visit_occurrence["length"] >= min) - & (visit_occurrence["length"] < max), - "{} days - {} days".format(min, max), - ) - visit_occurrence = visit_occurrence.drop(columns="length") - - else: - visit_occurrence["length_of_stay"] = "All lengths" - - return visit_occurrence.drop(columns="visit_end_datetime") - - -def get_biology_relationship( - data: Data, - standard_terminologies: List[str], - source_terminologies: Dict[str, str], - mapping: List[Tuple[str, str, str]], -) -> pd.DataFrame: - """Computes biology relationship - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - - Example - ------- - - | care_site_id | care_site_level | care_site_short_name | parent_care_site_id | parent_care_site_level | parent_care_site_short_name | - | :----------- | :------------------------- | :------------------- | :------------------ | :------------------------- | :-------------------------- | - | 8312056386 | Unité Fonctionnelle (UF) | UF A | 8312027648 | Pôle/DMU | Pole A | - | 8312022130 | Pôle/DMU | Pole B | 8312033550 | Hôpital | Hospital A | - | 8312016782 | Service/Département | Service A | 8312033550 | Hôpital | Hospital A | - | 8312010155 | Unité Fonctionnelle (UF) | UF B | 8312022130 | Pôle/DMU | Pole B | - | 8312067829 | Unité de consultation (UC) | UC A | 8312051097 | Unité de consultation (UC) | UC B | - - """ - - logger.debug( - "Create biology relationship to link ANALYSES LABORATOIRE to ANABIO to LOINC" - ) - - check_tables(data=data, required_tables=["concept", "concept_relationship"]) - concept_columns = [ - "concept_id", - "concept_name", - "concept_code", - "vocabulary_id", - ] - - concept_relationship_columns = [ - "concept_id_1", - "concept_id_2", - "relationship_id", - ] - check_columns( - data.concept, - required_columns=concept_columns, - df_name="concept", - ) - - check_columns( - data.concept_relationship, - required_columns=concept_relationship_columns, - df_name="concept_relationship", - ) - concept = to("pandas", data.concept[concept_columns]) - concept_relationship = to( - "pandas", data.concept_relationship[concept_relationship_columns] - ) - concept_by_terminology = {} - for terminology, regex in source_terminologies.items(): - concept_by_terminology[terminology] = ( - concept[concept.vocabulary_id.str.contains(regex)] - .rename( - columns={ - "concept_id": "{}_concept_id".format(terminology), - "concept_name": "{}_concept_name".format(terminology), - "concept_code": "{}_concept_code".format(terminology), - } - ) - .drop(columns="vocabulary_id") - ) - root_terminology = mapping[0][0] - biology_relationship = concept_by_terminology[root_terminology] - for source, target, relationship_id in mapping: - relationship = concept_relationship.rename( - columns={ - "concept_id_1": "{}_concept_id".format(source), - "concept_id_2": "{}_concept_id".format(target), - } - )[concept_relationship.relationship_id == relationship_id].drop( - columns="relationship_id" - ) - relationship = relationship.merge( - concept_by_terminology[target], on="{}_concept_id".format(target) - ) - biology_relationship = biology_relationship.merge( - relationship, on="{}_concept_id".format(source), how="left" - ) - - # Get ITM code in priority and if not get GLIMS code - for standard_terminology in standard_terminologies: - biology_relationship[ - "{}_concept_code".format(standard_terminology) - ] = biology_relationship[ - "{}_ITM_concept_code".format(standard_terminology) - ].mask( - biology_relationship[ - "{}_ITM_concept_code".format(standard_terminology) - ].isna(), - biology_relationship["GLIMS_{}_concept_code".format(standard_terminology)], - ) - biology_relationship[ - "{}_concept_name".format(standard_terminology) - ] = biology_relationship[ - "{}_ITM_concept_name".format(standard_terminology) - ].mask( - biology_relationship[ - "{}_ITM_concept_name".format(standard_terminology) - ].isna(), - biology_relationship["GLIMS_{}_concept_name".format(standard_terminology)], - ) - biology_relationship["{}_vocabulary".format(standard_terminology)] = "ITM" - biology_relationship[ - "{}_vocabulary".format(standard_terminology) - ] = biology_relationship["{}_vocabulary".format(standard_terminology)].mask( - biology_relationship[ - "{}_ITM_concept_code".format(standard_terminology) - ].isna(), - "GLIMS", - ) - return biology_relationship - - -def _get_relationship_table_uc_to_uf( - care_site_relationship: DataFrame, -): - check_columns( - df=care_site_relationship, - required_columns=[ - "care_site_id", - "care_site_level", - "care_site_short_name", - "parent_care_site_id", - "parent_care_site_level", - "parent_care_site_short_name", - ], - ) - - care_site_relationship = care_site_relationship[ - [ - "care_site_id", - "care_site_level", - "care_site_short_name", - "parent_care_site_id", - "parent_care_site_level", - "parent_care_site_short_name", - ] - ] - - uc_care_site = care_site_relationship[ - ( - care_site_relationship["care_site_level"] - == UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"] - ) - ] - - care_site_rel_grandparent = care_site_relationship[ - [ - "care_site_id", - "parent_care_site_id", - "parent_care_site_short_name", - "parent_care_site_level", - ] - ].rename( - columns={ - "care_site_id": "parent_care_site_id", - "parent_care_site_id": "grandparent_care_site_id", - "parent_care_site_short_name": "grandparent_care_site_short_name", - "parent_care_site_level": "grandparent_care_site_level", - } - ) - uc_care_site = uc_care_site.merge( - care_site_rel_grandparent, on="parent_care_site_id" - ) - uc_care_site["care_site_id_uf"] = None - uc_care_site["care_site_id_uf"] = uc_care_site["care_site_id_uf"].mask( - uc_care_site["grandparent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["grandparent_care_site_id"], - ) - uc_care_site["care_site_id_uf"] = uc_care_site["care_site_id_uf"].mask( - uc_care_site["parent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["parent_care_site_id"], - ) - uc_care_site["care_site_short_name_uf"] = None - uc_care_site["care_site_short_name_uf"] = uc_care_site[ - "care_site_short_name_uf" - ].mask( - uc_care_site["grandparent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["care_site_short_name"], - ) - uc_care_site["care_site_short_name_uf"] = uc_care_site[ - "care_site_short_name_uf" - ].mask( - uc_care_site["parent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["care_site_short_name"], - ) - return uc_care_site[ - [ - "care_site_id", - "care_site_id_uf", - "care_site_short_name_uf", - ] - ].drop_duplicates(["care_site_id", "care_site_id_uf"]) - - -def _get_relationship_table_uf_to_hospital( - care_site_relationship: DataFrame, -): - check_columns( - df=care_site_relationship, - required_columns=[ - "care_site_id", - "care_site_level", - "care_site_short_name", - "parent_care_site_id", - "parent_care_site_level", - "parent_care_site_short_name", - ], - ) - - care_site_rel_uf_pole = care_site_relationship.rename( - columns={ - "care_site_level": "care_site_level_uf", - "care_site_id": "care_site_id_uf", - "care_site_short_name": "care_site_short_name_uf", - "parent_care_site_level": "care_site_level_pole", - "parent_care_site_id": "care_site_id_pole", - "parent_care_site_short_name": "care_site_short_name_pole", - } - ) - - uf_to_pole_care_site = care_site_rel_uf_pole[ - (care_site_rel_uf_pole["care_site_level_uf"] == CARE_SITE_LEVEL_NAMES["UF"]) - ] - - care_site_rel_pole_hospit = care_site_relationship.rename( - columns={ - "care_site_id": "care_site_id_pole", - "parent_care_site_level": "care_site_level_hospital", - "parent_care_site_id": "care_site_id_hospital", - "parent_care_site_short_name": "care_site_short_name_hospital", - } - ).drop(columns=["care_site_level", "care_site_short_name"]) - - uf_to_hospital_care_site = uf_to_pole_care_site.merge( - care_site_rel_pole_hospit, on="care_site_id_pole" - ) - - uf_to_hospital_care_site = uf_to_hospital_care_site[ - uf_to_hospital_care_site.care_site_level_pole == CARE_SITE_LEVEL_NAMES["Pole"] - ] - uf_to_hospital_care_site = uf_to_hospital_care_site[ - uf_to_hospital_care_site.care_site_level_hospital - == CARE_SITE_LEVEL_NAMES["Hospital"] - ] - uf_to_hospital_care_site = uf_to_hospital_care_site.drop_duplicates( - [ - "care_site_id_uf", - "care_site_id_pole", - "care_site_id_hospital", - ] - ) - return uf_to_hospital_care_site[ - [ - "care_site_id_uf", - "care_site_short_name_uf", - "care_site_id_pole", - "care_site_short_name_pole", - "care_site_id_hospital", - "care_site_short_name_hospital", - ] - ] - - -def get_care_site_relationship(data: Data) -> pd.DataFrame: - """Computes hierarchical care site structure - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - - Example - ------- - - | care_site_id | care_site_level | care_site_short_name | parent_care_site_id | parent_care_site_level | parent_care_site_short_name | - | :----------- | :------------------------- | :------------------- | :------------------ | :------------------------- | :-------------------------- | - | 8312056386 | Unité Fonctionnelle (UF) | UF A | 8312027648 | Pôle/DMU | Pole A | - | 8312022130 | Pôle/DMU | Pole B | 8312033550 | Hôpital | Hospital A | - | 8312016782 | Service/Département | Service A | 8312033550 | Hôpital | Hospital A | - | 8312010155 | Unité Fonctionnelle (UF) | UF B | 8312022130 | Pôle/DMU | Pole B | - | 8312067829 | Unité de consultation (UC) | UC A | 8312051097 | Unité de consultation (UC) | UC B | - - """ - fact_relationship = data.fact_relationship[ - [ - "fact_id_1", - "fact_id_2", - "domain_concept_id_1", - "relationship_concept_id", - ] - ] - fact_relationship = to("pandas", fact_relationship) - - care_site_relationship = fact_relationship[ - (fact_relationship["domain_concept_id_1"] == 57) # Care_site domain - & (fact_relationship["relationship_concept_id"] == 46233688) # Included in - ] - care_site_relationship = care_site_relationship.drop( - columns=["domain_concept_id_1", "relationship_concept_id"] - ) - care_site_relationship = care_site_relationship.rename( - columns={"fact_id_1": "care_site_id", "fact_id_2": "parent_care_site_id"} - ) - - care_site = data.care_site[ - [ - "care_site_id", - "care_site_type_source_value", - "care_site_short_name", - ] - ] - care_site = to("pandas", care_site) - care_site = care_site.rename( - columns={ - "care_site_type_source_value": "care_site_level", - } - ) - care_site_relationship = care_site.merge( - care_site_relationship, on="care_site_id", how="left" - ) - - parent_care_site = care_site.rename( - columns={ - "care_site_level": "parent_care_site_level", - "care_site_id": "parent_care_site_id", - "care_site_short_name": "parent_care_site_short_name", - } - ) - logger.debug("Create care site relationship to link UC to UF and UF to Pole") - - return care_site_relationship.merge( - parent_care_site, on="parent_care_site_id", how="left" - ) - - -def concatenate_predictor_by_level( - predictor_by_level: Dict[str, DataFrame], - care_site_levels: List[str] = None, -) -> DataFrame: - predictors_to_concat = [] - if care_site_levels: - if not isinstance(care_site_levels, list): - care_site_levels = [care_site_levels] - unknown_levels, selected_levels = [], [] - for level in care_site_levels: - if level in predictor_by_level: - predictors_to_concat.append(predictor_by_level[level]) - selected_levels.append(level) - elif level in CARE_SITE_LEVEL_NAMES.keys(): - predictors_to_concat.append( - predictor_by_level[CARE_SITE_LEVEL_NAMES[level]] - ) - selected_levels.append(level) - else: - unknown_levels.append(level) - - logger.debug( - "The following levels {} have been selected", - selected_levels, - ) - if unknown_levels: - logger.warning( - "Unrecognized levels {}.the only supported levels are: {}", - unknown_levels, - list(CARE_SITE_LEVEL_NAMES.values()) - + list(CARE_SITE_LEVEL_NAMES.keys()), - ) - else: - predictors_to_concat = list(predictor_by_level.values()) - logger.debug( - "The following levels {} have been selected", - list(predictor_by_level.keys()), - ) - - if not predictors_to_concat: - raise AttributeError( - "care site levels must include at least one of the following levels: {}".format( - list(CARE_SITE_LEVEL_NAMES.values()) - + list(CARE_SITE_LEVEL_NAMES.keys()) - ) - ) - - framework = get_framework(predictors_to_concat[0]) - return framework.concat(predictors_to_concat) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py new file mode 100644 index 00000000..ced09b33 --- /dev/null +++ b/edsteva/probes/utils/filter_df.py @@ -0,0 +1,584 @@ +from datetime import datetime, timedelta +from typing import Dict, List, Union + +import numpy as np +import pandas as pd +from IPython.display import display +from loguru import logger + +from edsteva.utils.checks import check_columns +from edsteva.utils.framework import get_framework, to +from edsteva.utils.typing import DataFrame + +from .utils import CARE_SITE_LEVEL_NAMES, UNSUPPORTED_CARE_SITE_LEVEL_NAMES + + +def filter_table_by_type( + table: DataFrame, + table_name: str, + type_groups: Union[str, Dict], + source_col: str, + target_col: str, +): + if isinstance(type_groups, str): + type_groups = {type_groups: type_groups} + if isinstance(type_groups, dict): + table_per_types = [] + for type_name, type_value in type_groups.items(): + table_per_type_element = table[ + table[source_col].str.contains( + type_value, + case=False, + regex=True, + na=False, + ) + ].copy() + table_per_type_element[target_col] = type_name + table_per_types.append(table_per_type_element) + else: + raise TypeError( + "{} must be str or dict not {}".format(target_col, type(type_groups)) + ) + + logger.debug( + "The following {} : {} have been selected on table {}", + target_col, + type_groups, + table_name, + ) + return get_framework(table).concat(table_per_types, ignore_index=True) + + +def filter_valid_observations( + table: DataFrame, + table_name: str, + invalid_naming: str = None, + valid_naming: str = None, +): + check_columns( + df=table, + required_columns=["row_status_source_value"], + ) + + if valid_naming: + table_valid = table[table["row_status_source_value"] == valid_naming] + elif invalid_naming: + table_valid = table[~(table["row_status_source_value"] == invalid_naming)] + else: + raise Exception("valid_naming or invalid_naming must be provided.") + table_valid = table_valid.drop(columns=["row_status_source_value"]) + logger.debug("Valid observations have been selected for table {}.", table_name) + return table_valid + + +def filter_table_by_date( + table: DataFrame, + table_name: str, + start_date: Union[datetime, str] = None, + end_date: Union[datetime, str] = None, +): + check_columns(df=table, required_columns=["date"]) + + table.dropna(subset=["date"], inplace=True) + logger.debug("Droping observations with missing date in table {}.", table_name) + table["date"] = table["date"].astype("datetime64") + start_date = pd.to_datetime(start_date) + end_date = pd.to_datetime(end_date) + + if end_date and start_date: + table = table[(table["date"] >= start_date) & (table["date"] < end_date)] + logger.debug( + "Observations between {} and {} have been selected for table {}.", + start_date, + end_date, + table_name, + ) + elif start_date: + table = table[table["date"] >= start_date] + logger.debug( + "Observations after {} have been selected for table {}.", + start_date, + table_name, + ) + elif end_date: + table = table[table["date"] < end_date] + logger.debug( + "Observations before {} have been selected for table {}.", + end_date, + table_name, + ) + # Truncate + table["date"] = table["date"].dt.strftime("%Y-%m").astype("datetime64") + return table + + +def filter_table_by_stay_duration( + visit_occurrence: DataFrame, stay_durations: List[float] +): + if stay_durations: + visit_occurrence["length"] = ( + visit_occurrence["visit_end_datetime"] + - visit_occurrence["visit_start_datetime"] + ) / np.timedelta64(timedelta(days=1)) + + # Incomplete stays + visit_occurrence["length_of_stay"] = "Unknown" + visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + visit_occurrence["visit_end_datetime"].isna(), + "Incomplete stay", + ) + + # Complete stays + min_duration = stay_durations[0] + max_duration = stay_durations[-1] + visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + (visit_occurrence["length"] <= min_duration), + "<= {} days".format(min_duration), + ) + visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + (visit_occurrence["length"] >= max_duration), + ">= {} days".format(max_duration), + ) + n_duration = len(stay_durations) + for i in range(0, n_duration - 1): + min = stay_durations[i] + max = stay_durations[i + 1] + visit_occurrence["length_of_stay"] = visit_occurrence[ + "length_of_stay" + ].mask( + (visit_occurrence["length"] >= min) + & (visit_occurrence["length"] < max), + "{} days - {} days".format(min, max), + ) + visit_occurrence = visit_occurrence.drop(columns="length") + + else: + visit_occurrence["length_of_stay"] = "All lengths" + + return visit_occurrence.drop(columns="visit_end_datetime") + + +def filter_table_by_care_site( + table_to_filter: DataFrame, + table_name: str, + care_site_relationship: pd.DataFrame, + care_site_short_names: Union[str, List[str]] = None, + care_site_ids: Union[int, List[int]] = None, +): + care_site = care_site_relationship[ + ["care_site_id", "care_site_short_name", "care_site_level"] + ] + care_site_filter = [] + if care_site_ids: + if not isinstance(care_site_ids, list): + care_site_ids = [care_site_ids] + care_site_filter.append( + care_site[care_site["care_site_id"].isin(care_site_ids)].copy() + ) + if care_site_short_names: + if not isinstance(care_site_short_names, list): + care_site_short_names = [care_site_short_names] + care_site_filter.append( + care_site[ + care_site["care_site_short_name"].isin(care_site_short_names) + ].copy() + ) + if care_site_filter: + care_site_filter = pd.concat( + care_site_filter, ignore_index=True + ).drop_duplicates("care_site_id") + else: + raise Exception("care_site_ids or care_site_short_names must be provided") + + # Get all UF from UC + uc_care_site = care_site_filter[ + care_site_filter.care_site_level == UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"] + ] + uc_care_site = uc_care_site[["care_site_id"]].drop_duplicates() + care_site_rel_uc_to_uf = _get_relationship_table_uc_to_uf( + care_site_relationship=care_site_relationship + ) + care_site_rel_uc_to_uf = to("pandas", care_site_rel_uc_to_uf) + related_uf_care_site = uc_care_site.merge( + care_site_rel_uc_to_uf, + on="care_site_id", + ) + uf_from_uc = related_uf_care_site[ + ["care_site_id_uf", "care_site_short_name_uf"] + ].drop_duplicates("care_site_id_uf") + + # Get all UF from Hospital + care_site_rel_uf_to_hospital = _get_relationship_table_uf_to_hospital( + care_site_relationship=care_site_relationship + ) + care_site_rel_uf_to_hospital = to("pandas", care_site_rel_uf_to_hospital) + + hospital_care_site = care_site_filter[ + care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["Hospital"] + ].rename( + columns={ + "care_site_id": "care_site_id_hospital", + "care_site_short_name": "care_site_short_name_hospital", + } + ) + hospital_care_site = hospital_care_site[ + ["care_site_id_hospital", "care_site_short_name_hospital"] + ].drop_duplicates("care_site_id_hospital") + related_hospital_care_site = hospital_care_site.merge( + care_site_rel_uf_to_hospital, + on=[ + "care_site_id_hospital", + "care_site_short_name_hospital", + ], + how="left", + ) + uf_from_hospital = related_hospital_care_site[ + [ + "care_site_id_uf", + "care_site_short_name_uf", + ] + ].drop_duplicates("care_site_id_uf") + pole_from_hospital = related_hospital_care_site[ + [ + "care_site_id_pole", + "care_site_short_name_pole", + ] + ].drop_duplicates("care_site_id_pole") + + # Get all UF from pole + pole_care_site = care_site_filter[ + care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["Pole"] + ].rename( + columns={ + "care_site_id": "care_site_id_pole", + "care_site_short_name": "care_site_short_name_pole", + } + ) + pole_care_site = pole_care_site[ + ["care_site_id_pole", "care_site_short_name_pole"] + ].drop_duplicates("care_site_id_pole") + related_pole_care_site = pole_care_site.merge( + care_site_rel_uf_to_hospital, + on=[ + "care_site_id_pole", + "care_site_short_name_pole", + ], + how="left", + ) + uf_from_pole = related_pole_care_site[ + [ + "care_site_id_uf", + "care_site_short_name_uf", + ] + ].drop_duplicates("care_site_id_uf") + + # Get all Hospital from Pole + hospital_from_pole = related_pole_care_site[ + [ + "care_site_id_hospital", + "care_site_short_name_hospital", + ] + ].drop_duplicates("care_site_id_hospital") + + # Get all Pole from UF + uf_care_site = care_site_filter[ + care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["UF"] + ].rename( + columns={ + "care_site_id": "care_site_id_uf", + "care_site_short_name": "care_site_short_name_uf", + } + ) + uf_care_site = uf_care_site[ + ["care_site_id_uf", "care_site_short_name_uf"] + ].drop_duplicates("care_site_id_uf") + uf_care_site = pd.concat([uf_care_site, uf_from_uc]) + + related_uf_care_site = uf_care_site.merge( + care_site_rel_uf_to_hospital, + on=[ + "care_site_id_uf", + "care_site_short_name_uf", + ], + how="left", + ) + pole_from_uf = related_uf_care_site[ + [ + "care_site_id_pole", + "care_site_short_name_pole", + ] + ].drop_duplicates("care_site_id_pole") + + # Get all Hospital from UF + hospital_from_uf = related_uf_care_site[ + [ + "care_site_id_hospital", + "care_site_short_name_hospital", + ] + ].drop_duplicates("care_site_id_hospital") + + extended_uf_care_site = pd.concat( + [uf_care_site, uf_from_pole, uf_from_hospital, uf_from_uc], ignore_index=True + ).drop_duplicates("care_site_id_uf") + extended_uf_care_site = extended_uf_care_site.rename( + columns={ + "care_site_id_uf": "care_site_id", + "care_site_short_name_uf": "care_site_short_name", + } + ) + + extended_pole_care_site = pd.concat( + [pole_care_site, pole_from_uf, pole_from_hospital], ignore_index=True + ).drop_duplicates("care_site_id_pole") + extended_pole_care_site = extended_pole_care_site.rename( + columns={ + "care_site_id_pole": "care_site_id", + "care_site_short_name_pole": "care_site_short_name", + } + ) + extended_hospital_care_site = pd.concat( + [hospital_care_site, hospital_from_pole, hospital_from_uf], ignore_index=True + ).drop_duplicates("care_site_id_hospital") + extended_hospital_care_site = extended_hospital_care_site.rename( + columns={ + "care_site_id_hospital": "care_site_id", + "care_site_short_name_hospital": "care_site_short_name", + } + ) + unsupported_care_site = care_site_filter[ + ~(care_site_filter.care_site_level.isin(CARE_SITE_LEVEL_NAMES.values())) + ] + if not unsupported_care_site.empty: + logger.warning( + "The following care site ids are not supported because the associated care site levels are not in {}.", + CARE_SITE_LEVEL_NAMES.values(), + ) + display(unsupported_care_site) + + if not extended_hospital_care_site.empty: + logger.debug( + "The following hospitals {} have been selected from {}.", + extended_hospital_care_site.care_site_short_name.to_list(), + table_name, + ) + if not extended_pole_care_site.empty: + logger.debug( + "The following poles {} have been selected from {}.", + extended_pole_care_site.care_site_short_name.to_list(), + table_name, + ) + if not extended_uf_care_site.empty: + logger.debug( + "The following UF {} have been selected from {}.", + extended_uf_care_site.care_site_short_name.to_list(), + table_name, + ) + + extended_care_site_id_to_filter = pd.concat( + [extended_hospital_care_site, extended_pole_care_site, extended_uf_care_site], + ignore_index=True, + ).care_site_id.to_list() + return table_to_filter[ + table_to_filter["care_site_id"].isin(extended_care_site_id_to_filter) + ] + + +def convert_uc_to_uf( + table: DataFrame, + table_name: str, + care_site_relationship: DataFrame, +): + care_site_rel_uc_to_uf = _get_relationship_table_uc_to_uf( + care_site_relationship=care_site_relationship + ) + care_site_rel_uc_to_uf = to(get_framework(table), care_site_rel_uc_to_uf) + table = table.merge(care_site_rel_uc_to_uf, on="care_site_id", how="left") + table["care_site_id"] = table["care_site_id_uf"].mask( + table["care_site_id_uf"].isna(), table["care_site_id"] + ) + table = table.drop(columns=["care_site_id_uf"]) + logger.debug( + "For level {}, stays of the table {} located in {} have been linked to their corresponding {}", + CARE_SITE_LEVEL_NAMES["UF"], + table_name, + UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"], + CARE_SITE_LEVEL_NAMES["UF"], + ) + return table + + +def convert_uf_to_pole( + table: DataFrame, + table_name: str, + care_site_relationship: DataFrame, +): + care_site_rel_uf_to_pole = _get_relationship_table_uf_to_hospital( + care_site_relationship=care_site_relationship + )[["care_site_id_uf", "care_site_id_pole"]].rename( + columns={"care_site_id_uf": "care_site_id"} + ) + care_site_rel_uf_to_pole = to(get_framework(table), care_site_rel_uf_to_pole) + table = table.merge(care_site_rel_uf_to_pole, on="care_site_id", how="left") + table["care_site_id"] = table["care_site_id_pole"].mask( + table["care_site_id_pole"].isna(), table["care_site_id"] + ) + table = table.drop(columns="care_site_id_pole") + logger.debug( + "For level {}, stays of the table {} located in {} have been linked to their corresponding {}", + CARE_SITE_LEVEL_NAMES["Pole"], + table_name, + CARE_SITE_LEVEL_NAMES["UF"], + CARE_SITE_LEVEL_NAMES["Pole"], + ) + return table + + +def _get_relationship_table_uc_to_uf( + care_site_relationship: DataFrame, +): + check_columns( + df=care_site_relationship, + required_columns=[ + "care_site_id", + "care_site_level", + "care_site_short_name", + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_short_name", + ], + ) + + care_site_relationship = care_site_relationship[ + [ + "care_site_id", + "care_site_level", + "care_site_short_name", + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_short_name", + ] + ] + + uc_care_site = care_site_relationship[ + ( + care_site_relationship["care_site_level"] + == UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"] + ) + ] + + care_site_rel_grandparent = care_site_relationship[ + [ + "care_site_id", + "parent_care_site_id", + "parent_care_site_short_name", + "parent_care_site_level", + ] + ].rename( + columns={ + "care_site_id": "parent_care_site_id", + "parent_care_site_id": "grandparent_care_site_id", + "parent_care_site_short_name": "grandparent_care_site_short_name", + "parent_care_site_level": "grandparent_care_site_level", + } + ) + uc_care_site = uc_care_site.merge( + care_site_rel_grandparent, on="parent_care_site_id" + ) + uc_care_site["care_site_id_uf"] = None + uc_care_site["care_site_id_uf"] = uc_care_site["care_site_id_uf"].mask( + uc_care_site["grandparent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], + uc_care_site["grandparent_care_site_id"], + ) + uc_care_site["care_site_id_uf"] = uc_care_site["care_site_id_uf"].mask( + uc_care_site["parent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], + uc_care_site["parent_care_site_id"], + ) + uc_care_site["care_site_short_name_uf"] = None + uc_care_site["care_site_short_name_uf"] = uc_care_site[ + "care_site_short_name_uf" + ].mask( + uc_care_site["grandparent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], + uc_care_site["care_site_short_name"], + ) + uc_care_site["care_site_short_name_uf"] = uc_care_site[ + "care_site_short_name_uf" + ].mask( + uc_care_site["parent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], + uc_care_site["care_site_short_name"], + ) + return uc_care_site[ + [ + "care_site_id", + "care_site_id_uf", + "care_site_short_name_uf", + ] + ].drop_duplicates(["care_site_id", "care_site_id_uf"]) + + +def _get_relationship_table_uf_to_hospital( + care_site_relationship: DataFrame, +): + check_columns( + df=care_site_relationship, + required_columns=[ + "care_site_id", + "care_site_level", + "care_site_short_name", + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_short_name", + ], + ) + + care_site_rel_uf_pole = care_site_relationship.rename( + columns={ + "care_site_level": "care_site_level_uf", + "care_site_id": "care_site_id_uf", + "care_site_short_name": "care_site_short_name_uf", + "parent_care_site_level": "care_site_level_pole", + "parent_care_site_id": "care_site_id_pole", + "parent_care_site_short_name": "care_site_short_name_pole", + } + ) + + uf_to_pole_care_site = care_site_rel_uf_pole[ + (care_site_rel_uf_pole["care_site_level_uf"] == CARE_SITE_LEVEL_NAMES["UF"]) + ] + + care_site_rel_pole_hospit = care_site_relationship.rename( + columns={ + "care_site_id": "care_site_id_pole", + "parent_care_site_level": "care_site_level_hospital", + "parent_care_site_id": "care_site_id_hospital", + "parent_care_site_short_name": "care_site_short_name_hospital", + } + ).drop(columns=["care_site_level", "care_site_short_name"]) + + uf_to_hospital_care_site = uf_to_pole_care_site.merge( + care_site_rel_pole_hospit, on="care_site_id_pole" + ) + + uf_to_hospital_care_site = uf_to_hospital_care_site[ + uf_to_hospital_care_site.care_site_level_pole == CARE_SITE_LEVEL_NAMES["Pole"] + ] + uf_to_hospital_care_site = uf_to_hospital_care_site[ + uf_to_hospital_care_site.care_site_level_hospital + == CARE_SITE_LEVEL_NAMES["Hospital"] + ] + uf_to_hospital_care_site = uf_to_hospital_care_site.drop_duplicates( + [ + "care_site_id_uf", + "care_site_id_pole", + "care_site_id_hospital", + ] + ) + return uf_to_hospital_care_site[ + [ + "care_site_id_uf", + "care_site_short_name_uf", + "care_site_id_pole", + "care_site_short_name_pole", + "care_site_id_hospital", + "care_site_short_name_hospital", + ] + ] diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py new file mode 100644 index 00000000..d0856412 --- /dev/null +++ b/edsteva/probes/utils/prepare_df.py @@ -0,0 +1,609 @@ +from datetime import datetime +from typing import Dict, List, Tuple, Union + +import pandas as pd +from loguru import logger + +from edsteva.utils.checks import check_columns, check_tables +from edsteva.utils.framework import get_framework, is_koalas, to +from edsteva.utils.typing import Data, DataFrame + +from .filter_df import ( + filter_table_by_care_site, + filter_table_by_date, + filter_table_by_stay_duration, + filter_table_by_type, + filter_valid_observations, +) + + +def prepare_visit_occurrence( + data: Data, + stay_types: Union[str, Dict[str, str]], + stay_durations: List[float], + start_date: datetime = None, + end_date: datetime = None, +): + required_columns = [ + "visit_occurrence_id", + "visit_source_value", + "visit_start_datetime", + "visit_end_datetime", + "care_site_id", + "row_status_source_value", + "visit_occurrence_source_value", + ] + check_columns( + data.visit_occurrence, + required_columns=required_columns, + df_name="visit_occurrence", + ) + visit_occurrence = data.visit_occurrence[required_columns] + + visit_occurrence = filter_table_by_stay_duration( + visit_occurrence=visit_occurrence, stay_durations=stay_durations + ) + + visit_occurrence = visit_occurrence.rename( + columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} + ) + + visit_occurrence = filter_valid_observations( + table=visit_occurrence, + table_name="visit_occurrence", + invalid_naming="supprimé", + ) + + visit_occurrence = filter_table_by_date( + table=visit_occurrence, + table_name="visit_occurrence", + start_date=start_date, + end_date=end_date, + ) + + if stay_types: + visit_occurrence = filter_table_by_type( + table=visit_occurrence, + table_name="visit_occurrence", + type_groups=stay_types, + source_col="stay_type", + target_col="stay_type", + ) + + return visit_occurrence + + +def prepare_measurement( + data: Data, + biology_relationship: pd.DataFrame, + concepts_sets: Union[str, Dict[str, str]], + root_terminology: str, + standard_terminologies: List[str], + per_visit: bool, + start_date: datetime = None, + end_date: datetime = None, +): + measurement_columns = [ + "measurement_id", + "visit_occurrence_id", + "measurement_datetime", + "row_status_source_value", + "measurement_source_concept_id", + ] + + check_columns( + data.measurement, + required_columns=measurement_columns, + df_name="measurement", + ) + measurement = data.measurement[measurement_columns].rename( + columns={ + "measurement_source_concept_id": "{}_concept_id".format(root_terminology), + "measurement_datetime": "date", + } + ) + measurement = filter_valid_observations( + table=measurement, table_name="measurement", valid_naming="Validé" + ) + + biology_relationship = biology_relationship[ + [ + "{}_{}".format(root_terminology, concept_col) + for concept_col in ["concept_id", "concept_code", "concept_name"] + ] + + [ + "{}_{}".format(terminology, concept_col) + for terminology in standard_terminologies + for concept_col in ["concept_code", "concept_name", "vocabulary"] + ] + ] + biology_relationship = to(get_framework(measurement), biology_relationship) + if is_koalas(biology_relationship): + biology_relationship = biology_relationship.spark.hint("broadcast") + measurement = measurement.merge( + biology_relationship, on="{}_concept_id".format(root_terminology) + ) + + if not per_visit: + measurement = filter_table_by_date( + table=measurement, + table_name="measurement", + start_date=start_date, + end_date=end_date, + ) + + if concepts_sets: + measurement_by_terminology = [] + for standard_terminology in standard_terminologies: + measurement_by_terminology.append( + filter_table_by_type( + table=measurement, + table_name="measurement", + type_groups=concepts_sets, + source_col="{}_concept_code".format(standard_terminology), + target_col="concepts_set", + ) + ) + measurement = get_framework(measurement).concat(measurement_by_terminology) + + return measurement + + +def prepare_condition_occurrence( + data: Data, + extra_data: Data, + visit_occurrence: DataFrame, + source_systems: List[str], + diag_types: Union[str, Dict[str, str]], + condition_types: Union[str, Dict[str, str]], + start_date: datetime = None, + end_date: datetime = None, +): + condition_occurrence_tables = [] + if "AREM" in source_systems: + check_tables( + data=extra_data, + required_tables=["visit_occurrence", "condition_occurrence"], + ) + # Fetch conditions from Data lake + I2B2_visit = extra_data.visit_occurrence[ + ["visit_occurrence_id", "visit_occurrence_source_value"] + ] + I2B2_condition_occurrence = extra_data.condition_occurrence[ + [ + "visit_occurrence_id", + "condition_occurrence_id", + "condition_status_source_value", + "condition_start_datetime", + "condition_source_value", + "care_site_source_value", + "cdm_source", + ] + ] + # Add visit_occurrence_source_value + arem_condition_occurrence = I2B2_visit.merge( + I2B2_condition_occurrence, + on="visit_occurrence_id", + how="inner", + ).drop(columns="visit_occurrence_id") + + # Link with visit_occurrence_source_value + arem_condition_occurrence = arem_condition_occurrence.merge( + visit_occurrence[["visit_occurrence_source_value", "visit_occurrence_id"]], + on="visit_occurrence_source_value", + ).drop(columns="visit_occurrence_source_value") + arem_condition_occurrence = arem_condition_occurrence[ + arem_condition_occurrence.cdm_source == "AREM" + ] + arem_condition_occurrence["visit_detail_id"] = None + condition_occurrence_tables.append(arem_condition_occurrence) + + if "ORBIS" in source_systems: + orbis_condition_occurrence = data.condition_occurrence[ + [ + "visit_occurrence_id", + "condition_occurrence_id", + "visit_detail_id", + "condition_source_value", + "condition_start_datetime", + "condition_status_source_value", + "row_status_source_value", + "cdm_source", + ] + ] + orbis_condition_occurrence = filter_valid_observations( + table=orbis_condition_occurrence, + table_name="orbis_condition_occurrence", + valid_naming="Actif", + ) + orbis_condition_occurrence = orbis_condition_occurrence[ + orbis_condition_occurrence.cdm_source == "ORBIS" + ] + condition_occurrence_tables.append(orbis_condition_occurrence) + + framework = get_framework(condition_occurrence_tables[0]) + condition_occurrence = framework.concat( + condition_occurrence_tables, ignore_index=True + ) + + # Filter date + condition_occurrence = condition_occurrence.rename( + columns={"condition_start_datetime": "date"} + ) + condition_occurrence = filter_table_by_date( + table=condition_occurrence, + table_name="condition_occurrence", + start_date=start_date, + end_date=end_date, + ) + + # Filter source system + condition_occurrence = condition_occurrence.rename( + columns={"cdm_source": "source_system"} + ) + + # Filter diagnostics + condition_occurrence = condition_occurrence.rename( + columns={"condition_status_source_value": "diag_type"} + ) + if diag_types: + condition_occurrence = filter_table_by_type( + table=condition_occurrence, + table_name="condition_occurrence", + type_groups=diag_types, + source_col="diag_type", + target_col="diag_type", + ) + + # Filter conditions + condition_occurrence = condition_occurrence.rename( + columns={"condition_source_value": "condition_type"} + ) + if condition_types: + condition_occurrence = filter_table_by_type( + table=condition_occurrence, + table_name="condition_occurrence", + type_groups=condition_types, + source_col="condition_type", + target_col="condition_type", + ) + + return condition_occurrence + + +def prepare_care_site( + data: Data, + care_site_ids: List[int], + care_site_short_names: List[str], + care_site_relationship: pd.DataFrame, +): + care_site = data.care_site[ + [ + "care_site_id", + "care_site_type_source_value", + "care_site_short_name", + ] + ] + care_site = care_site.rename( + columns={"care_site_type_source_value": "care_site_level"} + ) + if care_site_ids or care_site_short_names: + care_site = filter_table_by_care_site( + table_to_filter=care_site, + table_name="care_site", + care_site_relationship=care_site_relationship, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + ) + + return care_site + + +def prepare_note( + data: Data, + note_types: Union[str, Dict[str, str]], + start_date: datetime = None, + end_date: datetime = None, +): + note = data.note[ + [ + "note_id", + "visit_occurrence_id", + "note_datetime", + "note_class_source_value", + "row_status_source_value", + "note_text", + ] + ] + note = note.rename( + columns={"note_class_source_value": "note_type", "note_datetime": "date"} + ) + note = note[~(note["note_text"].isna())] + note = note.drop(columns=["note_text"]) + + note = filter_table_by_date( + table=note, + table_name="note", + start_date=start_date, + end_date=end_date, + ) + + note = filter_valid_observations( + table=note, table_name="note", valid_naming="Actif" + ) + + # Add note type + if note_types: + note = filter_table_by_type( + table=note, + table_name="note", + type_groups=note_types, + source_col="note_type", + target_col="note_type", + ) + + return note + + +def prepare_note_care_site(extra_data: Data, note: DataFrame): + check_tables( + data=extra_data, + required_tables=["note_ref", "care_site_ref"], + ) + + note_ref = extra_data.note_ref[ + [ + "note_id", + "ufr_source_value", + "us_source_value", + ] + ] + care_site_ref = extra_data.care_site_ref[ + [ + "care_site_source_value", + "care_site_id", + ] + ] + + note_ref = note_ref.melt( + id_vars="note_id", + value_name="care_site_source_value", + ) + note = note.merge(note_ref, on="note_id") + note = note.merge(care_site_ref, on="care_site_source_value") + + return note + + +def prepare_visit_detail( + data: Data, + start_date: datetime, + end_date: datetime, + visit_detail_type: str = "PASS UF", +): + visit_detail = data.visit_detail[ + [ + "visit_detail_id", + "visit_occurrence_id", + "visit_detail_start_datetime", + "visit_detail_type_source_value", + "care_site_id", + "row_status_source_value", + ] + ] + visit_detail = visit_detail.rename( + columns={ + "visit_detail_id": "visit_id", + "visit_detail_start_datetime": "date", + } + ) + visit_detail = filter_valid_observations( + table=visit_detail, table_name="visit_detail", valid_naming="Actif" + ) + visit_detail = visit_detail[ + visit_detail["visit_detail_type_source_value"] == visit_detail_type + ] # Important to filter only "PASS" to remove duplicate visits + visit_detail = visit_detail.drop(columns=["visit_detail_type_source_value"]) + visit_detail = filter_table_by_date( + table=visit_detail, + table_name="visit_detail", + start_date=start_date, + end_date=end_date, + ) + + return visit_detail + + +def prepare_care_site_relationship(data: Data) -> pd.DataFrame: + """Computes hierarchical care site structure + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + + Example + ------- + + | care_site_id | care_site_level | care_site_short_name | parent_care_site_id | parent_care_site_level | parent_care_site_short_name | + | :----------- | :------------------------- | :------------------- | :------------------ | :------------------------- | :-------------------------- | + | 8312056386 | Unité Fonctionnelle (UF) | UF A | 8312027648 | Pôle/DMU | Pole A | + | 8312022130 | Pôle/DMU | Pole B | 8312033550 | Hôpital | Hospital A | + | 8312016782 | Service/Département | Service A | 8312033550 | Hôpital | Hospital A | + | 8312010155 | Unité Fonctionnelle (UF) | UF B | 8312022130 | Pôle/DMU | Pole B | + | 8312067829 | Unité de consultation (UC) | UC A | 8312051097 | Unité de consultation (UC) | UC B | + + """ + fact_relationship = data.fact_relationship[ + [ + "fact_id_1", + "fact_id_2", + "domain_concept_id_1", + "relationship_concept_id", + ] + ] + fact_relationship = to("pandas", fact_relationship) + + care_site_relationship = fact_relationship[ + (fact_relationship["domain_concept_id_1"] == 57) # Care_site domain + & (fact_relationship["relationship_concept_id"] == 46233688) # Included in + ] + care_site_relationship = care_site_relationship.drop( + columns=["domain_concept_id_1", "relationship_concept_id"] + ) + care_site_relationship = care_site_relationship.rename( + columns={"fact_id_1": "care_site_id", "fact_id_2": "parent_care_site_id"} + ) + + care_site = data.care_site[ + [ + "care_site_id", + "care_site_type_source_value", + "care_site_short_name", + ] + ] + care_site = to("pandas", care_site) + care_site = care_site.rename( + columns={ + "care_site_type_source_value": "care_site_level", + } + ) + care_site_relationship = care_site.merge( + care_site_relationship, on="care_site_id", how="left" + ) + + parent_care_site = care_site.rename( + columns={ + "care_site_level": "parent_care_site_level", + "care_site_id": "parent_care_site_id", + "care_site_short_name": "parent_care_site_short_name", + } + ) + logger.debug("Create care site relationship to link UC to UF and UF to Pole") + + return care_site_relationship.merge( + parent_care_site, on="parent_care_site_id", how="left" + ) + + +def prepare_biology_relationship( + data: Data, + standard_terminologies: List[str], + source_terminologies: Dict[str, str], + mapping: List[Tuple[str, str, str]], +) -> pd.DataFrame: + """Computes biology relationship + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + + Example + ------- + + | care_site_id | care_site_level | care_site_short_name | parent_care_site_id | parent_care_site_level | parent_care_site_short_name | + | :----------- | :------------------------- | :------------------- | :------------------ | :------------------------- | :-------------------------- | + | 8312056386 | Unité Fonctionnelle (UF) | UF A | 8312027648 | Pôle/DMU | Pole A | + | 8312022130 | Pôle/DMU | Pole B | 8312033550 | Hôpital | Hospital A | + | 8312016782 | Service/Département | Service A | 8312033550 | Hôpital | Hospital A | + | 8312010155 | Unité Fonctionnelle (UF) | UF B | 8312022130 | Pôle/DMU | Pole B | + | 8312067829 | Unité de consultation (UC) | UC A | 8312051097 | Unité de consultation (UC) | UC B | + + """ + + logger.debug( + "Create biology relationship to link ANALYSES LABORATOIRE to ANABIO to LOINC" + ) + + check_tables(data=data, required_tables=["concept", "concept_relationship"]) + concept_columns = [ + "concept_id", + "concept_name", + "concept_code", + "vocabulary_id", + ] + + concept_relationship_columns = [ + "concept_id_1", + "concept_id_2", + "relationship_id", + ] + check_columns( + data.concept, + required_columns=concept_columns, + df_name="concept", + ) + + check_columns( + data.concept_relationship, + required_columns=concept_relationship_columns, + df_name="concept_relationship", + ) + concept = to("pandas", data.concept[concept_columns]) + concept_relationship = to( + "pandas", data.concept_relationship[concept_relationship_columns] + ) + concept_by_terminology = {} + for terminology, regex in source_terminologies.items(): + concept_by_terminology[terminology] = ( + concept[concept.vocabulary_id.str.contains(regex)] + .rename( + columns={ + "concept_id": "{}_concept_id".format(terminology), + "concept_name": "{}_concept_name".format(terminology), + "concept_code": "{}_concept_code".format(terminology), + } + ) + .drop(columns="vocabulary_id") + ) + root_terminology = mapping[0][0] + biology_relationship = concept_by_terminology[root_terminology] + for source, target, relationship_id in mapping: + relationship = concept_relationship.rename( + columns={ + "concept_id_1": "{}_concept_id".format(source), + "concept_id_2": "{}_concept_id".format(target), + } + )[concept_relationship.relationship_id == relationship_id].drop( + columns="relationship_id" + ) + relationship = relationship.merge( + concept_by_terminology[target], on="{}_concept_id".format(target) + ) + biology_relationship = biology_relationship.merge( + relationship, on="{}_concept_id".format(source), how="left" + ) + + # Get ITM code in priority and if not get GLIMS code + for standard_terminology in standard_terminologies: + biology_relationship[ + "{}_concept_code".format(standard_terminology) + ] = biology_relationship[ + "{}_ITM_concept_code".format(standard_terminology) + ].mask( + biology_relationship[ + "{}_ITM_concept_code".format(standard_terminology) + ].isna(), + biology_relationship["GLIMS_{}_concept_code".format(standard_terminology)], + ) + biology_relationship[ + "{}_concept_name".format(standard_terminology) + ] = biology_relationship[ + "{}_ITM_concept_name".format(standard_terminology) + ].mask( + biology_relationship[ + "{}_ITM_concept_name".format(standard_terminology) + ].isna(), + biology_relationship["GLIMS_{}_concept_name".format(standard_terminology)], + ) + biology_relationship["{}_vocabulary".format(standard_terminology)] = "ITM" + biology_relationship[ + "{}_vocabulary".format(standard_terminology) + ] = biology_relationship["{}_vocabulary".format(standard_terminology)].mask( + biology_relationship[ + "{}_ITM_concept_code".format(standard_terminology) + ].isna(), + "GLIMS", + ) + return biology_relationship diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py new file mode 100644 index 00000000..3751d403 --- /dev/null +++ b/edsteva/probes/utils/utils.py @@ -0,0 +1,76 @@ +from typing import Dict, List + +from loguru import logger + +from edsteva.utils.framework import get_framework +from edsteva.utils.typing import DataFrame + +CARE_SITE_LEVEL_NAMES = { + "Hospital": "Hôpital", + "Pole": "Pôle/DMU", + "UF": "Unité Fonctionnelle (UF)", +} + +UNSUPPORTED_CARE_SITE_LEVEL_NAMES = { + "UC": "Unité de consultation (UC)", +} + + +def hospital_only(care_site_levels: List[str]): + if not isinstance(care_site_levels, list): + care_site_levels = [care_site_levels] + return len(care_site_levels) == 1 and ( + care_site_levels[0] == "Hospital" + or care_site_levels[0] == CARE_SITE_LEVEL_NAMES["Hospital"] + ) + + +def concatenate_predictor_by_level( + predictor_by_level: Dict[str, DataFrame], + care_site_levels: List[str] = None, +) -> DataFrame: + predictors_to_concat = [] + if care_site_levels: + if not isinstance(care_site_levels, list): + care_site_levels = [care_site_levels] + unknown_levels, selected_levels = [], [] + for level in care_site_levels: + if level in predictor_by_level: + predictors_to_concat.append(predictor_by_level[level]) + selected_levels.append(level) + elif level in CARE_SITE_LEVEL_NAMES.keys(): + predictors_to_concat.append( + predictor_by_level[CARE_SITE_LEVEL_NAMES[level]] + ) + selected_levels.append(level) + else: + unknown_levels.append(level) + + logger.debug( + "The following levels {} have been selected", + selected_levels, + ) + if unknown_levels: + logger.warning( + "Unrecognized levels {}.the only supported levels are: {}", + unknown_levels, + list(CARE_SITE_LEVEL_NAMES.values()) + + list(CARE_SITE_LEVEL_NAMES.keys()), + ) + else: + predictors_to_concat = list(predictor_by_level.values()) + logger.debug( + "The following levels {} have been selected", + list(predictor_by_level.keys()), + ) + + if not predictors_to_concat: + raise AttributeError( + "care site levels must include at least one of the following levels: {}".format( + list(CARE_SITE_LEVEL_NAMES.values()) + + list(CARE_SITE_LEVEL_NAMES.keys()) + ) + ) + + framework = get_framework(predictors_to_concat[0]) + return framework.concat(predictors_to_concat) diff --git a/edsteva/probes/visit/completeness_predictors/__init__.py b/edsteva/probes/visit/completeness_predictors/__init__.py new file mode 100644 index 00000000..9c056a68 --- /dev/null +++ b/edsteva/probes/visit/completeness_predictors/__init__.py @@ -0,0 +1,11 @@ +import catalogue + +from .per_visit import compute_completeness_predictor_per_visit + +completeness_predictors = catalogue.create( + "edsteva.probes.visit", "completeness_predictors" +) + +completeness_predictors.register( + "per_visit_default", func=compute_completeness_predictor_per_visit +) diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py new file mode 100644 index 00000000..59abfc25 --- /dev/null +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -0,0 +1,187 @@ +from datetime import datetime +from typing import Dict, List, Union + +import pandas as pd + +from edsteva.probes.utils.filter_df import convert_uf_to_pole +from edsteva.probes.utils.prepare_df import ( + prepare_care_site, + prepare_visit_detail, + prepare_visit_occurrence, +) +from edsteva.probes.utils.utils import ( + CARE_SITE_LEVEL_NAMES, + concatenate_predictor_by_level, + hospital_only, +) +from edsteva.utils.framework import is_koalas, to +from edsteva.utils.typing import Data + + +def compute_completeness_predictor_per_visit( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str] = None, + stay_durations: List[float] = None, +): + """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + Parameters + ---------- + data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + care_site_relationship : pd.DataFrame + DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_levels : List[str], optional + **EXAMPLE**: `["Hospital", "Pole", "UF"]` + stay_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + """ + self._metrics = ["c", "n_visit"] + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, + ) + + care_site = prepare_care_site( + data, + care_site_ids, + care_site_short_names, + care_site_relationship, + ) + + hospital_visit = get_hospital_visit( + visit_occurrence, + care_site, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + visit_predictor_by_level = {hospital_name: hospital_visit} + + if not hospital_only(care_site_levels=care_site_levels): + visit_detail = prepare_visit_detail(data, start_date, end_date) + + uf_name = CARE_SITE_LEVEL_NAMES["UF"] + uf_visit = get_uf_visit( + visit_occurrence, + visit_detail, + care_site, + ) + visit_predictor_by_level[uf_name] = uf_visit + + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + pole_visit = get_pole_visit( + uf_visit, + care_site, + care_site_relationship, + ) + visit_predictor_by_level[pole_name] = pole_visit + + visit_predictor = concatenate_predictor_by_level( + predictor_by_level=visit_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(self, visit_predictor) + + +def compute_completeness(self, visit_predictor): + partition_cols = self._index.copy() + ["date"] + + n_visit = ( + visit_predictor.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"visit_id": "nunique"}) + .rename(columns={"visit_id": "n_visit"}) + ) + + n_visit = to("pandas", n_visit) + + partition_cols = list(set(partition_cols) - {"date"}) + q_99_visit = ( + n_visit.groupby( + partition_cols, + as_index=False, + dropna=False, + ) + .agg({"n_visit": "max"}) + .rename(columns={"n_visit": "max_n_visit"}) + ) + + visit_predictor = n_visit.merge( + q_99_visit, + on=partition_cols, + ) + + visit_predictor["c"] = visit_predictor["max_n_visit"].where( + visit_predictor["max_n_visit"] == 0, + visit_predictor["n_visit"] / visit_predictor["max_n_visit"], + ) + visit_predictor = visit_predictor.drop(columns="max_n_visit") + + return visit_predictor + + +def get_hospital_visit(visit_occurrence, care_site): + hospital_visit = visit_occurrence.rename( + columns={"visit_occurrence_id": "visit_id"} + ) + + hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + hospital_visit = hospital_visit[ + hospital_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Hospital"] + ] + if is_koalas(hospital_visit): + hospital_visit.spark.cache() + + return hospital_visit + + +def get_uf_visit(visit_occurrence, visit_detail, care_site): + visit_detail = visit_detail.merge( + visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], + on="visit_occurrence_id", + ).drop(columns="visit_occurrence_id") + + uf_visit = visit_detail.merge(care_site, on="care_site_id") + uf_visit = uf_visit[uf_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"]] + if is_koalas(uf_visit): + uf_visit.spark.cache() + + return uf_visit + + +def get_pole_visit(uf_visit, care_site, care_site_relationship): + pole_visit = convert_uf_to_pole( + table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table_name="uf_visit", + care_site_relationship=care_site_relationship, + ) + + pole_visit = pole_visit.merge(care_site, on="care_site_id") + pole_visit = pole_visit[ + pole_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Pole"] + ] + if is_koalas(pole_visit): + pole_visit.spark.cache() + + return pole_visit diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 0e5ccfa3..a49df437 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -4,20 +4,10 @@ import pandas as pd from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import ( - CARE_SITE_LEVEL_NAMES, - concatenate_predictor_by_level, - convert_table_to_pole, - hospital_only, - prepare_care_site, - prepare_visit_detail, - prepare_visit_occurrence, -) -from edsteva.utils.framework import is_koalas, to +from edsteva.probes.visit.completeness_predictors import completeness_predictors +from edsteva.probes.visit.viz_configs import viz_configs from edsteva.utils.typing import Data -from .viz_config import get_estimates_dashboard_config, get_predictor_dashboard_config - class VisitProbe(BaseProbe): r""" @@ -37,10 +27,15 @@ class VisitProbe(BaseProbe): **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "care_site_id"]`` """ - _index = ["care_site_level", "stay_type", "length_of_stay", "care_site_id"] - _metrics = ["c", "n_visit"] - get_predictor_dashboard_config = get_predictor_dashboard_config - get_estimates_dashboard_config = get_estimates_dashboard_config + def __init__( + self, + completeness_predictor: str = "per_visit_default", + _viz_config: Dict[str, str] = None, + ): + self._completeness_predictor = completeness_predictor + self._index = ["care_site_level", "stay_type", "length_of_stay", "care_site_id"] + if _viz_config is None: + self._viz_config = {} def compute_process( self, @@ -53,6 +48,7 @@ def compute_process( care_site_ids: List[int], care_site_short_names: List[str] = None, stay_durations: List[float] = None, + **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -75,138 +71,25 @@ def compute_process( care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` """ - - visit_occurrence = prepare_visit_occurrence( + return completeness_predictors.get(self._completeness_predictor)( + self, data=data, + care_site_relationship=care_site_relationship, start_date=start_date, end_date=end_date, + care_site_levels=care_site_levels, stay_types=stay_types, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, stay_durations=stay_durations, + **kwargs, ) - care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, - ) - - hospital_visit = get_hospital_visit( - visit_occurrence, - care_site, - ) - hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] - visit_predictor_by_level = {hospital_name: hospital_visit} - - if not hospital_only(care_site_levels=care_site_levels): - visit_detail = prepare_visit_detail(data, start_date, end_date) - - uf_name = CARE_SITE_LEVEL_NAMES["UF"] - uf_visit = get_uf_visit( - visit_occurrence, - visit_detail, - care_site, - care_site_relationship, - ) - visit_predictor_by_level[uf_name] = uf_visit - - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] - pole_visit = get_pole_visit( - uf_visit, - care_site, - care_site_relationship, - ) - visit_predictor_by_level[pole_name] = pole_visit - - visit_predictor = concatenate_predictor_by_level( - predictor_by_level=visit_predictor_by_level, - care_site_levels=care_site_levels, - ) - - return compute_completeness(self, visit_predictor) - - -def compute_completeness(self, visit_predictor): - partition_cols = self._index.copy() + ["date"] - - n_visit = ( - visit_predictor.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"visit_id": "nunique"}) - .rename(columns={"visit_id": "n_visit"}) - ) - - n_visit = to("pandas", n_visit) - - partition_cols = list(set(partition_cols) - {"date"}) - q_99_visit = ( - n_visit.groupby( - partition_cols, - as_index=False, - dropna=False, - ) - .agg({"n_visit": "max"}) - .rename(columns={"n_visit": "max_n_visit"}) - ) - - visit_predictor = n_visit.merge( - q_99_visit, - on=partition_cols, - ) - - visit_predictor["c"] = visit_predictor["max_n_visit"].where( - visit_predictor["max_n_visit"] == 0, - visit_predictor["n_visit"] / visit_predictor["max_n_visit"], - ) - visit_predictor = visit_predictor.drop(columns="max_n_visit") - - return visit_predictor - - -def get_hospital_visit(visit_occurrence, care_site): - hospital_visit = visit_occurrence.rename( - columns={"visit_occurrence_id": "visit_id"} - ) - - hospital_visit = hospital_visit.merge(care_site, on="care_site_id") - hospital_visit = hospital_visit[ - hospital_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Hospital"] - ] - if is_koalas(hospital_visit): - hospital_visit.spark.cache() - - return hospital_visit - - -def get_uf_visit(visit_occurrence, visit_detail, care_site, care_site_relationship): - visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], - on="visit_occurrence_id", - ).drop(columns="visit_occurrence_id") - - uf_visit = visit_detail.merge(care_site, on="care_site_id") - uf_visit = uf_visit[uf_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"]] - if is_koalas(uf_visit): - uf_visit.spark.cache() - - return uf_visit - - -def get_pole_visit(uf_visit, care_site, care_site_relationship): - pole_visit = convert_table_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), - table_name="uf_visit", - care_site_relationship=care_site_relationship, - ) - - pole_visit = pole_visit.merge(care_site, on="care_site_id") - pole_visit = pole_visit[ - pole_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Pole"] - ] - if is_koalas(pole_visit): - pole_visit.spark.cache() - - return pole_visit + def get_viz_config(self, viz_type: str, **kwargs): + if viz_type in viz_configs.keys(): + _viz_config = self._viz_config.get(viz_type) + if _viz_config is None: + _viz_config = self._completeness_predictor + else: + raise ValueError(f"edsteva has no {viz_type} registry !") + return viz_configs[viz_type].get(_viz_config)(self, **kwargs) diff --git a/edsteva/probes/visit/viz_configs/__init__.py b/edsteva/probes/visit/viz_configs/__init__.py new file mode 100644 index 00000000..89612ad4 --- /dev/null +++ b/edsteva/probes/visit/viz_configs/__init__.py @@ -0,0 +1,53 @@ +import catalogue + +from edsteva.probes.visit.viz_configs.per_visit.estimates_densities_plot import ( + get_estimates_densities_plot_config, +) +from edsteva.probes.visit.viz_configs.per_visit.normalized_probe_dashboard import ( + get_normalized_probe_dashboard_config, +) +from edsteva.probes.visit.viz_configs.per_visit.normalized_probe_plot import ( + get_normalized_probe_plot_config, +) +from edsteva.probes.visit.viz_configs.per_visit.probe_dashboard import ( + get_probe_dashboard_config, +) +from edsteva.probes.visit.viz_configs.per_visit.probe_plot import get_probe_plot_config + +normalized_probe_dashboard = catalogue.create( + "edsteva.probes.visit.viz_configs", "normalized_probe_dashboard" +) +normalized_probe_dashboard.register( + "per_visit_default", func=get_normalized_probe_dashboard_config +) + + +probe_dashboard = catalogue.create( + "edsteva.probes.visit.viz_configs", "probe_dashboard" +) +probe_dashboard.register("per_visit_default", func=get_probe_dashboard_config) + +estimates_densities_plot = catalogue.create( + "edsteva.probes.visit.viz_configs", "estimates_densities_plot" +) +estimates_densities_plot.register( + "per_visit_default", func=get_estimates_densities_plot_config +) + +normalized_probe_plot = catalogue.create( + "edsteva.probes.visit.viz_configs", "normalized_probe_plot" +) +normalized_probe_plot.register( + "per_visit_default", func=get_normalized_probe_plot_config +) + +probe_plot = catalogue.create("edsteva.probes.visit.viz_configs", "probe_plot") +probe_plot.register("per_visit_default", func=get_probe_plot_config) + +viz_configs = dict( + normalized_probe_dashboard=normalized_probe_dashboard, + probe_dashboard=probe_dashboard, + estimates_densities_plot=estimates_densities_plot, + normalized_probe_plot=normalized_probe_plot, + probe_plot=probe_plot, +) diff --git a/edsteva/probes/visit/viz_configs/per_visit/defaults.py b/edsteva/probes/visit/viz_configs/per_visit/defaults.py new file mode 100644 index 00000000..65424a98 --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/defaults.py @@ -0,0 +1,202 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + max_visit="max(sum_visit)", + groupby=["value"], + ), + ], + calculates=[ + dict(normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) / alt.datum.c_0) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_visit", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + max_visit="max(sum_visit)", + groupby=["value"], + ), + ], + calculates=[ + dict(completeness=alt.datum.sum_visit / alt.datum.max_visit), + ], + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "completeness:Q", + title="Completeness predictor c(t)", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_visit", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py b/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/utils/file_management.py b/edsteva/utils/file_management.py new file mode 100644 index 00000000..d5552d88 --- /dev/null +++ b/edsteva/utils/file_management.py @@ -0,0 +1,43 @@ +import os +from pathlib import Path + +import _pickle as pickle +from loguru import logger + + +def save_object(obj, filename: Path): + if not isinstance(filename, Path): + filename = Path(filename) + os.makedirs(filename.parent, exist_ok=True) + with open(filename, "wb") as outp: # Overwrites any existing file. + pickle.dump(obj, outp, -1) + logger.info("Saved to {}", filename) + + +def load_object(filename: str): + if os.path.isfile(filename): + with open(filename, "rb") as obj: + logger.info("Successfully loaded from {}", filename) + return pickle.load(obj) + else: + raise FileNotFoundError( + "There is no file found in {}".format( + filename, + ) + ) + + +def delete_object(obj, filename: str): + if os.path.isfile(filename): + os.remove(filename) + logger.info( + "Removed from {}", + filename, + ) + if hasattr(obj, "path"): + del obj.path + else: + logger.warning( + "There is no file found in {}", + filename, + ) diff --git a/edsteva/utils/registry.py b/edsteva/utils/registry.py new file mode 100644 index 00000000..9451c2e4 --- /dev/null +++ b/edsteva/utils/registry.py @@ -0,0 +1,82 @@ +import catalogue + +bio_c = catalogue.create("edsteva.probes.biology", "completeness_predictor") +note_c = catalogue.create("edsteva.probes.note", "completeness_predictor") + + +class Registry: + probes = catalogue.create( + "edsteva", + "probes", + entry_points=True, + ) + + models = catalogue.create( + "edsteva", + "models", + entry_points=True, + ) + + def get( + self, + key: str, + function_name: str, + ): + """ + Get a function from one of the registry + Parameters + ---------- + key : str + The registry's name. The function will be retrieved from self. + function_name : str + The function's name, The function will be retrieved via self..get(function_name). + Can be of the form "function_name.version" + Returns + ------- + Callable + The registered function + """ + + if not hasattr(self, key): + raise ValueError(f"eds-scikit's registry has no {key} key !") + r = getattr(self, key) + candidates = r.get_all().keys() + + if function_name in candidates: + # Exact match + func = r.get(function_name) + + else: + # Looking for a match excluding version string + candidates = [ + func for func in candidates if function_name == func.split(".")[0] + ] + if len(candidates) > 1: + # Multiple versions available, a specific one should be specified + raise ValueError( + ( + f"Multiple functions are available under the name {function_name} :\n" + f"{candidates}\n" + "Please choose one of the implementation listed above." + ) + ) + if not candidates: + # No registered function + raise ValueError( + ( + f"No function registered under the name {function_name} " + f"was found in eds-scikit's {key} registry.\n" + "If you work in AP-HP's ecosystem, you should install " + 'extra resources via `pip install "eds-scikit[aphp]"' + "You can define your own and decorate it as follow:\n" + "from eds_scikit.resources import registry\n" + f"@registry.{key}('{function_name}')" + f"def your_custom_func(args, **kwargs):", + " ...", + ) + ) + func = r.get(candidates[0]) + return func + + +registry = Registry() diff --git a/edsteva/viz/dashboards/__init__.py b/edsteva/viz/dashboards/__init__.py index 6e356aea..a26c47fd 100644 --- a/edsteva/viz/dashboards/__init__.py +++ b/edsteva/viz/dashboards/__init__.py @@ -1,9 +1,9 @@ -from edsteva.viz.dashboards.estimates_dashboard.estimates_dashboard import ( - estimates_dashboard, +from edsteva.viz.dashboards.normalized_probe.normalized_probe import ( + normalized_probe_dashboard, ) -from edsteva.viz.dashboards.predictor_dashboard.wrapper import predictor_dashboard +from edsteva.viz.dashboards.probe.wrapper import probe_dashboard __all__ = [ - "predictor_dashboard", - "estimates_dashboard", + "probe_dashboard", + "normalized_probe_dashboard", ] diff --git a/edsteva/viz/dashboards/estimates_dashboard/__init__.py b/edsteva/viz/dashboards/normalized_probe/__init__.py similarity index 100% rename from edsteva/viz/dashboards/estimates_dashboard/__init__.py rename to edsteva/viz/dashboards/normalized_probe/__init__.py diff --git a/edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py similarity index 96% rename from edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py rename to edsteva/viz/dashboards/normalized_probe/normalized_probe.py index e31d8038..7d0a259f 100644 --- a/edsteva/viz/dashboards/estimates_dashboard/estimates_dashboard.py +++ b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py @@ -7,7 +7,7 @@ from edsteva.models.base import BaseModel from edsteva.probes.base import BaseProbe -from edsteva.probes.utils import CARE_SITE_LEVEL_NAMES +from edsteva.probes.utils.utils import CARE_SITE_LEVEL_NAMES from edsteva.viz.utils import ( add_estimates_filters, add_interactive_selection, @@ -27,7 +27,7 @@ ) -def estimates_dashboard( +def normalized_probe_dashboard( probe: BaseProbe, fitted_model: BaseModel, care_site_level: str = CARE_SITE_LEVEL_NAMES["Hospital"], @@ -75,7 +75,7 @@ def estimates_dashboard( predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) predictor.t_0 = predictor.t_0.dt.strftime("%Y-%m") - probe_config = deepcopy(probe.get_estimates_dashboard_config()) + probe_config = deepcopy(probe.get_viz_config("normalized_probe_dashboard")) main_chart_config = probe_config["main_chart"] time_line_config = probe_config["time_line"] error_line_config = probe_config["error_line"] @@ -95,7 +95,11 @@ def estimates_dashboard( if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") model_config = deepcopy( - fitted_model.get_estimates_dashboard_config(predictor=predictor) + deepcopy( + fitted_model.get_viz_config( + "normalized_probe_dashboard", predictor=predictor + ) + ) ) probe_line_config = model_config["probe_line"] model_line_config = model_config["model_line"] diff --git a/edsteva/viz/dashboards/predictor_dashboard/__init__.py b/edsteva/viz/dashboards/probe/__init__.py similarity index 100% rename from edsteva/viz/dashboards/predictor_dashboard/__init__.py rename to edsteva/viz/dashboards/probe/__init__.py diff --git a/edsteva/viz/dashboards/predictor_dashboard/fitted_probe.py b/edsteva/viz/dashboards/probe/fitted_probe.py similarity index 100% rename from edsteva/viz/dashboards/predictor_dashboard/fitted_probe.py rename to edsteva/viz/dashboards/probe/fitted_probe.py diff --git a/edsteva/viz/dashboards/predictor_dashboard/probe.py b/edsteva/viz/dashboards/probe/probe.py similarity index 99% rename from edsteva/viz/dashboards/predictor_dashboard/probe.py rename to edsteva/viz/dashboards/probe/probe.py index 80922b7c..182394ad 100644 --- a/edsteva/viz/dashboards/predictor_dashboard/probe.py +++ b/edsteva/viz/dashboards/probe/probe.py @@ -15,7 +15,7 @@ ) -def probe_dashboard( +def probe_only_dashboard( predictor: pd.DataFrame, probe_config: Dict[str, str], ): diff --git a/edsteva/viz/dashboards/predictor_dashboard/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py similarity index 92% rename from edsteva/viz/dashboards/predictor_dashboard/wrapper.py rename to edsteva/viz/dashboards/probe/wrapper.py index 1fb6263f..5f648a20 100644 --- a/edsteva/viz/dashboards/predictor_dashboard/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -6,14 +6,12 @@ from edsteva.models.base import BaseModel from edsteva.probes.base import BaseProbe -from edsteva.viz.dashboards.predictor_dashboard.fitted_probe import ( - fitted_probe_dashboard, -) -from edsteva.viz.dashboards.predictor_dashboard.probe import probe_dashboard +from edsteva.viz.dashboards.probe.fitted_probe import fitted_probe_dashboard +from edsteva.viz.dashboards.probe.probe import probe_only_dashboard from edsteva.viz.utils import filter_predictor, json_dir, save_html -def predictor_dashboard( +def probe_dashboard( probe: BaseProbe, fitted_model: BaseModel = None, care_site_level: str = None, @@ -66,8 +64,7 @@ def predictor_dashboard( alt.data_transformers.register("json_dir", json_dir) alt.data_transformers.enable("json_dir") - probe_config = deepcopy(probe.get_predictor_dashboard_config()) - + probe_config = deepcopy(probe.get_viz_config("probe_dashboard")) if fitted_model: predictor = fitted_model.predict(probe) else: @@ -80,7 +77,7 @@ def predictor_dashboard( ) if fitted_model: - model_config = deepcopy(fitted_model.get_predictor_dashboard_config()) + model_config = deepcopy(fitted_model.get_viz_config("probe_dashboard")) chart = fitted_probe_dashboard( predictor=predictor, probe_config=probe_config, @@ -89,7 +86,7 @@ def predictor_dashboard( legend_model=legend_model, ) else: - chart = probe_dashboard( + chart = probe_only_dashboard( predictor=predictor, probe_config=probe_config, ) diff --git a/edsteva/viz/plots/__init__.py b/edsteva/viz/plots/__init__.py index ba68dfa7..ac088dfd 100644 --- a/edsteva/viz/plots/__init__.py +++ b/edsteva/viz/plots/__init__.py @@ -1,11 +1,11 @@ from edsteva.viz.plots.estimates_densities.estimates_densities import ( - plot_estimates_densities, + estimates_densities_plot, ) -from edsteva.viz.plots.normalized_probe.normalized_probe import plot_normalized_probe -from edsteva.viz.plots.plot_probe.wrapper import plot_probe +from edsteva.viz.plots.normalized_probe.normalized_probe import normalized_probe_plot +from edsteva.viz.plots.probe.wrapper import probe_plot __all__ = [ - "plot_probe", - "plot_estimates_densities", - "plot_normalized_probe", + "probe_plot", + "estimates_densities_plot", + "normalized_probe_plot", ] diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py index 8e764c6a..333f3175 100644 --- a/edsteva/viz/plots/estimates_densities/estimates_densities.py +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -16,7 +16,7 @@ ) -def plot_estimates_densities( +def estimates_densities_plot( probe: BaseProbe, fitted_model: BaseModel, save_path: str = None, @@ -45,7 +45,7 @@ def plot_estimates_densities( estimates = fitted_model.estimates.copy() predictor = probe.add_names_columns(predictor) estimates = probe.add_names_columns(estimates) - probe_config = deepcopy(probe.get_predictor_dashboard_config()) + probe_config = deepcopy(probe.get_viz_config("estimates_densities_plot")) vertical_bar_charts_config = probe_config["vertical_bar_charts"] horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] chart_style = probe_config["chart_style"] diff --git a/edsteva/viz/plots/normalized_probe/normalized_probe.py b/edsteva/viz/plots/normalized_probe/normalized_probe.py index e8476fca..51f8caf9 100644 --- a/edsteva/viz/plots/normalized_probe/normalized_probe.py +++ b/edsteva/viz/plots/normalized_probe/normalized_probe.py @@ -20,7 +20,7 @@ ) -def plot_normalized_probe( +def normalized_probe_plot( probe: BaseProbe, fitted_model: BaseModel, care_site_level: str = None, @@ -97,7 +97,7 @@ def plot_normalized_probe( indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) predictor = predictor.merge(estimates, on=probe._index) - probe_config = deepcopy(probe.get_estimates_dashboard_config()) + probe_config = deepcopy(probe.get_viz_config("normalized_probe_plot")) main_chart_config = probe_config["main_chart"] error_line_config = probe_config["error_line"] @@ -125,7 +125,11 @@ def plot_normalized_probe( if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") model_config = deepcopy( - fitted_model.get_estimates_dashboard_config(predictor=predictor) + deepcopy( + fitted_model.get_viz_config( + "normalized_probe_dashboard", predictor=predictor + ) + ) ) probe_line_config = model_config["probe_line"] model_line_config = model_config["model_line"] diff --git a/edsteva/viz/plots/plot_probe/__init__.py b/edsteva/viz/plots/probe/__init__.py similarity index 100% rename from edsteva/viz/plots/plot_probe/__init__.py rename to edsteva/viz/plots/probe/__init__.py diff --git a/edsteva/viz/plots/plot_probe/fitted_probe.py b/edsteva/viz/plots/probe/fitted_probe.py similarity index 100% rename from edsteva/viz/plots/plot_probe/fitted_probe.py rename to edsteva/viz/plots/probe/fitted_probe.py diff --git a/edsteva/viz/plots/plot_probe/probe.py b/edsteva/viz/plots/probe/probe.py similarity index 100% rename from edsteva/viz/plots/plot_probe/probe.py rename to edsteva/viz/plots/probe/probe.py diff --git a/edsteva/viz/plots/plot_probe/wrapper.py b/edsteva/viz/plots/probe/wrapper.py similarity index 93% rename from edsteva/viz/plots/plot_probe/wrapper.py rename to edsteva/viz/plots/probe/wrapper.py index baa39ef0..ce7bcdba 100644 --- a/edsteva/viz/plots/plot_probe/wrapper.py +++ b/edsteva/viz/plots/probe/wrapper.py @@ -6,12 +6,12 @@ from edsteva.models.base import BaseModel from edsteva.probes.base import BaseProbe -from edsteva.viz.plots.plot_probe.fitted_probe import fitted_probe_line -from edsteva.viz.plots.plot_probe.probe import probe_line +from edsteva.viz.plots.probe.fitted_probe import fitted_probe_line +from edsteva.viz.plots.probe.probe import probe_line from edsteva.viz.utils import configure_style, filter_predictor, json_dir, save_html -def plot_probe( +def probe_plot( probe: BaseProbe, fitted_model: BaseModel = None, care_site_level: str = None, @@ -78,7 +78,7 @@ def plot_probe( alt.data_transformers.register("json_dir", json_dir) alt.data_transformers.enable("json_dir") - probe_config = deepcopy(probe.get_predictor_dashboard_config()) + probe_config = deepcopy(probe.get_viz_config("probe_plot")) chart_style = probe_config["chart_style"] predictor = probe.predictor.copy() predictor = probe.add_names_columns(predictor) @@ -109,7 +109,7 @@ def plot_probe( ] if fitted_model: - model_config = deepcopy(fitted_model.get_predictor_dashboard_config()) + model_config = deepcopy(fitted_model.get_viz_config("probe_plot")) chart = fitted_probe_line( predictor=predictor, probe_config=probe_config, diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index 276737ca..9765f88b 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -11,7 +11,8 @@ from toolz.curried import pipe from edsteva import CACHE_DIR -from edsteva.probes.utils import CARE_SITE_LEVEL_NAMES, filter_table_by_date +from edsteva.probes.utils.filter_df import filter_table_by_date +from edsteva.probes.utils.utils import CARE_SITE_LEVEL_NAMES def generate_main_chart( @@ -181,8 +182,10 @@ def generate_vertical_bar_charts( def add_interactive_selection( base: alt.Chart, selections: Dict[str, alt.Selection], - selection_charts: Dict[str, List[alt.Chart]] = {}, + selection_charts: Dict[str, List[alt.Chart]] = None, ): + if selection_charts is None: + selection_charts = {} for selection_variable, selection in selections.items(): base = base.transform_filter(selection) for chart_variable in selection_charts.keys(): @@ -197,8 +200,10 @@ def add_interactive_selection( def add_estimates_filters( base: alt.Chart, estimates_filters: Dict[str, alt.Selection], - selection_charts: Dict[str, List[alt.Chart]] = {}, + selection_charts: Dict[str, List[alt.Chart]] = None, ): + if selection_charts is None: + selection_charts = {} for estimate_filter in estimates_filters: base = base.transform_filter(estimate_filter) for chart_variable in selection_charts.keys(): diff --git a/poetry.lock b/poetry.lock index 1f8563a9..70629985 100644 --- a/poetry.lock +++ b/poetry.lock @@ -306,6 +306,22 @@ files = [ {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, ] +[[package]] +name = "catalogue" +version = "2.0.8" +description = "Super lightweight function registries for your library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, + {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} + [[package]] name = "certifi" version = "2022.12.7" @@ -3634,4 +3650,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "~3.7.1" -content-hash = "e4299c2b3113aca43905aab818accc02b2e2964a920527c33994acf56d6103cb" +content-hash = "daf24e7e76cbd9f71fd77e801b570bed0c74102d915e38a0385ffe0645048ff4" diff --git a/pyproject.toml b/pyproject.toml index b08e749f..ad099fa1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ koalas = "^1.8.2" pgpasslib = "^1.1.0" psycopg2-binary = "^2.9.3" pyarrow = ">=0.15, <0.17.0" +catalogue = "^2.0.8" [tool.poetry.group.dev.dependencies] black = "^23.1.0" From 9cbe726b85f9751ffd598b22e5f76a4fc8e41b70 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 23 Mar 2023 19:12:56 +0100 Subject: [PATCH 014/127] Parquet connector to convert pandas via pyarrow --- edsteva/probes/biology/biology.py | 2 ++ .../per_measurement.py | 7 +++-- .../completeness_predictors/per_condition.py | 9 ++++-- .../completeness_predictors/per_visit.py | 11 +++++-- edsteva/probes/condition/condition.py | 2 ++ .../note/completeness_predictors/per_note.py | 7 +++-- .../note/completeness_predictors/per_visit.py | 7 +++-- edsteva/probes/note/note.py | 2 ++ .../completeness_predictors/per_visit.py | 11 +++---- edsteva/probes/visit/visit.py | 2 ++ edsteva/utils/framework.py | 29 +++++++++++++++---- 11 files changed, 63 insertions(+), 26 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index ac9e503b..6c68dc7c 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -94,6 +94,7 @@ def compute_process( ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], + hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -131,6 +132,7 @@ def compute_process( stay_durations=stay_durations, source_terminologies=source_terminologies, mapping=mapping, + hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 603033e4..9e57f038 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -34,6 +34,7 @@ def compute_completeness_predictor_per_measurement( stay_durations: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], + hdfs_user_path: str, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute]""" self._metrics = ["c", "n_measurement"] @@ -97,10 +98,10 @@ def compute_completeness_predictor_per_measurement( care_site_levels=care_site_levels, ) - return compute_completeness(self, biology_predictor) + return compute_completeness(self, biology_predictor, hdfs_user_path) -def compute_completeness(self, biology_predictor): +def compute_completeness(self, biology_predictor, hdfs_user_path: str = None): partition_cols = self._index.copy() + ["date"] n_measurement = ( biology_predictor.groupby( @@ -112,7 +113,7 @@ def compute_completeness(self, biology_predictor): .rename(columns={"measurement_id": "n_measurement"}) ) - n_measurement = to("pandas", n_measurement) + n_measurement = to("pandas", n_measurement, hdfs_user_path=hdfs_user_path) partition_cols = list(set(partition_cols) - {"date"}) q_99_measurement = ( n_measurement.groupby( diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 63ecbfbf..82308b16 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -36,6 +36,7 @@ def compute_completeness_predictor_per_condition( condition_types: Union[str, Dict[str, str]], source_systems: List[str], stay_durations: List[float], + hdfs_user_path: str, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -134,10 +135,12 @@ def compute_completeness_predictor_per_condition( care_site_levels=care_site_levels, ) - return compute_completeness(self, condition_predictor) + return compute_completeness( + self, condition_predictor, hdfs_user_path=hdfs_user_path + ) -def compute_completeness(self, condition_predictor): +def compute_completeness(self, condition_predictor, hdfs_user_path: str): partition_cols = self._index.copy() + ["date"] n_condition = ( @@ -149,7 +152,7 @@ def compute_completeness(self, condition_predictor): .agg({"condition_occurrence_id": "nunique"}) .rename(columns={"condition_occurrence_id": "n_condition"}) ) - n_condition = to("pandas", n_condition) + n_condition = to("pandas", n_condition, hdfs_user_path=hdfs_user_path) partition_cols = list(set(partition_cols) - {"date"}) max_n_condition = ( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 186e804b..6265838e 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -36,6 +36,7 @@ def compute_completeness_predictor_per_visit( condition_types: Union[str, Dict[str, str]], source_systems: List[str], stay_durations: List[float], + hdfs_user_path: str, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -129,10 +130,12 @@ def compute_completeness_predictor_per_visit( care_site_levels=care_site_levels, ) - return compute_completeness(self, condition_predictor) + return compute_completeness( + self, condition_predictor, hdfs_user_path=hdfs_user_path + ) -def compute_completeness(self, condition_predictor): +def compute_completeness(self, condition_predictor, hdfs_user_path: str = None): partition_cols = self._index.copy() + ["date"] n_visit_with_condition = ( condition_predictor.groupby( @@ -162,7 +165,9 @@ def compute_completeness(self, condition_predictor): on=partition_cols, ) - condition_predictor = to("pandas", condition_predictor) + condition_predictor = to( + "pandas", condition_predictor, hdfs_user_path=hdfs_user_path + ) condition_predictor["c"] = condition_predictor["n_visit"].where( condition_predictor["n_visit"] == 0, diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index 23d4ee6e..993b73d8 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -60,6 +60,7 @@ def compute_process( condition_types: Union[str, Dict[str, str]] = {"All": ".*"}, source_systems: List[str] = ["ORBIS"], stay_durations: List[float] = None, + hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -105,6 +106,7 @@ def compute_process( stay_durations=stay_durations, condition_types=condition_types, source_systems=source_systems, + hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index e3af8c85..da6e7634 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -34,6 +34,7 @@ def compute_completeness_predictor_per_note( extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], + hdfs_user_path: str, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -114,10 +115,10 @@ def compute_completeness_predictor_per_note( if is_koalas(note_predictor): note_predictor.spark.cache() - return compute_completeness(self, note_predictor) + return compute_completeness(self, note_predictor, hdfs_user_path=hdfs_user_path) -def compute_completeness(self, note_predictor): +def compute_completeness(self, note_predictor, hdfs_user_path: str = None): partition_cols = self._index.copy() + ["date"] n_note = ( @@ -129,7 +130,7 @@ def compute_completeness(self, note_predictor): .agg({"note_id": "nunique"}) .rename(columns={"note_id": "n_note"}) ) - n_note = to("pandas", n_note) + n_note = to("pandas", n_note, hdfs_user_path=hdfs_user_path) partition_cols = list(set(partition_cols) - {"date"}) max_note = ( diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 689a6762..02494d91 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -35,6 +35,7 @@ def compute_completeness_predictor_per_visit( extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], + hdfs_user_path: str, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -115,10 +116,10 @@ def compute_completeness_predictor_per_visit( if is_koalas(note_predictor): note_predictor.spark.cache() - return compute_completeness(self, note_predictor) + return compute_completeness(self, note_predictor, hdfs_user_path=hdfs_user_path) -def compute_completeness(self, note_predictor): +def compute_completeness(self, note_predictor, hdfs_user_path: str = None): partition_cols = self._index.copy() + ["date"] n_visit_with_note = ( @@ -147,7 +148,7 @@ def compute_completeness(self, note_predictor): on=partition_cols, ) - note_predictor = to("pandas", note_predictor) + note_predictor = to("pandas", note_predictor, hdfs_user_path=hdfs_user_path) note_predictor["c"] = note_predictor["n_visit"].where( note_predictor["n_visit"] == 0, diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index fbed13a7..22a3b38c 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -60,6 +60,7 @@ def compute_process( "Ordonnance": "ordo", "CRH": "crh", }, + hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -99,6 +100,7 @@ def compute_process( care_site_short_names=care_site_short_names, note_types=note_types, stay_durations=stay_durations, + hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 59abfc25..3a6e88a8 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -29,6 +29,7 @@ def compute_completeness_predictor_per_visit( care_site_ids: List[int], care_site_short_names: List[str] = None, stay_durations: List[float] = None, + hdfs_user_path: str = None, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -98,10 +99,10 @@ def compute_completeness_predictor_per_visit( care_site_levels=care_site_levels, ) - return compute_completeness(self, visit_predictor) + return compute_completeness(self, visit_predictor, hdfs_user_path) -def compute_completeness(self, visit_predictor): +def compute_completeness(self, visit_predictor, hdfs_user_path): partition_cols = self._index.copy() + ["date"] n_visit = ( @@ -114,10 +115,10 @@ def compute_completeness(self, visit_predictor): .rename(columns={"visit_id": "n_visit"}) ) - n_visit = to("pandas", n_visit) + n_visit = to("pandas", n_visit, hdfs_user_path=hdfs_user_path) partition_cols = list(set(partition_cols) - {"date"}) - q_99_visit = ( + max_n_visit = ( n_visit.groupby( partition_cols, as_index=False, @@ -128,7 +129,7 @@ def compute_completeness(self, visit_predictor): ) visit_predictor = n_visit.merge( - q_99_visit, + max_n_visit, on=partition_cols, ) diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index a49df437..25127894 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -48,6 +48,7 @@ def compute_process( care_site_ids: List[int], care_site_short_names: List[str] = None, stay_durations: List[float] = None, + hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -82,6 +83,7 @@ def compute_process( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, stay_durations=stay_durations, + hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index ccb6df2a..b6dca77c 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -1,8 +1,11 @@ +import os from types import ModuleType from typing import Optional import pandas as _pandas +import pyarrow as pa from databricks import koalas as _koalas +from loguru import logger from edsteva.utils.typing import DataObject @@ -28,23 +31,37 @@ def is_koalas(obj: DataObject) -> bool: return get_framework(obj) == _koalas -def to(framework: str, obj: DataObject) -> DataObject: +def to(framework: str, obj: DataObject, hdfs_user_path: str = None) -> DataObject: if framework == "koalas" or framework is _koalas: return koalas(obj) elif framework == "pandas" or framework is _pandas: - return pandas(obj) + return pandas(obj, hdfs_user_path) else: raise ValueError(f"Unknown framework: {framework}") -def pandas(obj: DataObject) -> DataObject: +def pandas(obj: DataObject, hdfs_user_path: str = None) -> DataObject: if get_framework(obj) is _pandas: return obj + elif hdfs_user_path: + parquet_path = hdfs_user_path + "/object.parquet" + try: + obj.to_parquet(parquet_path) + obj = pa.parquet.read_table(parquet_path) + except AttributeError: + pass + logger.warning( + "Could not convert object to parquet. It will skip this step and convert directly to pandas if possible" + ) try: - return obj.to_pandas() + pandas_obj = obj.to_pandas() except AttributeError: - pass - raise ValueError("Could not convert object to pandas.") + error = True + if error: + raise ValueError("Could not convert object to pandas.") + elif hdfs_user_path and os.path.exists(parquet_path): + os.remove(parquet_path) + return pandas_obj def koalas(obj: DataObject) -> DataObject: From 9370dc3d45969a30ddcc93bc7f0a7bd788b024ec Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 23 Mar 2023 19:16:37 +0100 Subject: [PATCH 015/127] Hot fix --- edsteva/utils/framework.py | 1 + 1 file changed, 1 insertion(+) diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index b6dca77c..e6d1e435 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -55,6 +55,7 @@ def pandas(obj: DataObject, hdfs_user_path: str = None) -> DataObject: ) try: pandas_obj = obj.to_pandas() + error = False except AttributeError: error = True if error: From 8553f1a395b6a5a3126ed2846aff09c1e7655ead Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 24 Mar 2023 09:49:40 +0100 Subject: [PATCH 016/127] Hot fix --- edsteva/utils/framework.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index e6d1e435..5f47861f 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -48,20 +48,22 @@ def pandas(obj: DataObject, hdfs_user_path: str = None) -> DataObject: try: obj.to_parquet(parquet_path) obj = pa.parquet.read_table(parquet_path) - except AttributeError: - pass - logger.warning( - "Could not convert object to parquet. It will skip this step and convert directly to pandas if possible" - ) + except Exception as e: + logger.warning( + "Cannot convert object to parquet. It will skip this step and convert directly to pandas if possible. /n Following error: {}", + e, + ) + try: - pandas_obj = obj.to_pandas() error = False + pandas_obj = obj.to_pandas() except AttributeError: error = True + if hdfs_user_path and os.path.exists(parquet_path): + os.remove(parquet_path) if error: raise ValueError("Could not convert object to pandas.") - elif hdfs_user_path and os.path.exists(parquet_path): - os.remove(parquet_path) + return pandas_obj From 8a6c30b1e2107c0af25b16b0ac721569a276533c Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 24 Mar 2023 10:09:40 +0100 Subject: [PATCH 017/127] Hot fix --- .../probes/biology/viz_configs/__init__.py | 31 ++++------- .../probes/condition/viz_configs/__init__.py | 53 +++++-------------- edsteva/probes/note/viz_configs/__init__.py | 47 ++++------------ edsteva/probes/visit/viz_configs/__init__.py | 24 +++------ 4 files changed, 41 insertions(+), 114 deletions(-) diff --git a/edsteva/probes/biology/viz_configs/__init__.py b/edsteva/probes/biology/viz_configs/__init__.py index ae824418..f8e1e6be 100644 --- a/edsteva/probes/biology/viz_configs/__init__.py +++ b/edsteva/probes/biology/viz_configs/__init__.py @@ -1,50 +1,41 @@ import catalogue -from edsteva.probes.biology.viz_configs.per_measurement.estimates_densities_plot import ( - get_estimates_densities_plot_config, -) -from edsteva.probes.biology.viz_configs.per_measurement.normalized_probe_dashboard import ( - get_normalized_probe_dashboard_config, -) -from edsteva.probes.biology.viz_configs.per_measurement.normalized_probe_plot import ( - get_normalized_probe_plot_config, -) -from edsteva.probes.biology.viz_configs.per_measurement.probe_dashboard import ( - get_probe_dashboard_config, -) -from edsteva.probes.biology.viz_configs.per_measurement.probe_plot import ( - get_probe_plot_config, -) +from edsteva.probes.biology.viz_configs import per_measurement normalized_probe_dashboard = catalogue.create( "edsteva.probes.biology.viz_configs", "normalized_probe_dashboard" ) normalized_probe_dashboard.register( - "per_measurement_default", func=get_normalized_probe_dashboard_config + "per_measurement_default", + func=per_measurement.get_normalized_probe_dashboard_config, ) probe_dashboard = catalogue.create( "edsteva.probes.biology.viz_configs", "probe_dashboard" ) -probe_dashboard.register("per_measurement_default", func=get_probe_dashboard_config) +probe_dashboard.register( + "per_measurement_default", func=per_measurement.get_probe_dashboard_config +) estimates_densities_plot = catalogue.create( "edsteva.probes.biology.viz_configs", "estimates_densities_plot" ) estimates_densities_plot.register( - "per_measurement_default", func=get_estimates_densities_plot_config + "per_measurement_default", func=per_measurement.get_estimates_densities_plot_config ) normalized_probe_plot = catalogue.create( "edsteva.probes.biology.viz_configs", "normalized_probe_plot" ) normalized_probe_plot.register( - "per_measurement_default", func=get_normalized_probe_plot_config + "per_measurement_default", func=per_measurement.get_normalized_probe_plot_config ) probe_plot = catalogue.create("edsteva.probes.biology.viz_configs", "probe_plot") -probe_plot.register("per_measurement_default", func=get_probe_plot_config) +probe_plot.register( + "per_measurement_default", func=per_measurement.get_probe_plot_config +) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, diff --git a/edsteva/probes/condition/viz_configs/__init__.py b/edsteva/probes/condition/viz_configs/__init__.py index db4bf310..f929136e 100644 --- a/edsteva/probes/condition/viz_configs/__init__.py +++ b/edsteva/probes/condition/viz_configs/__init__.py @@ -1,76 +1,49 @@ import catalogue -from edsteva.probes.condition.viz_configs.per_condition.estimates_densities_plot import ( - get_estimates_densities_plot_config, -) -from edsteva.probes.condition.viz_configs.per_condition.normalized_probe_dashboard import ( - get_normalized_probe_dashboard_config, -) -from edsteva.probes.condition.viz_configs.per_condition.normalized_probe_plot import ( - get_normalized_probe_plot_config, -) -from edsteva.probes.condition.viz_configs.per_condition.probe_dashboard import ( - get_probe_dashboard_config, -) -from edsteva.probes.condition.viz_configs.per_condition.probe_plot import ( - get_probe_plot_config, -) -from edsteva.probes.condition.viz_configs.per_visit.estimates_densities_plot import ( - get_estimates_densities_plot_config, -) -from edsteva.probes.condition.viz_configs.per_visit.normalized_probe_dashboard import ( - get_normalized_probe_dashboard_config, -) -from edsteva.probes.condition.viz_configs.per_visit.normalized_probe_plot import ( - get_normalized_probe_plot_config, -) -from edsteva.probes.condition.viz_configs.per_visit.probe_dashboard import ( - get_probe_dashboard_config, -) -from edsteva.probes.condition.viz_configs.per_visit.probe_plot import ( - get_probe_plot_config, -) +from edsteva.probes.condition.viz_configs import per_condition, per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.condition.viz_configs", "normalized_probe_dashboard" ) normalized_probe_dashboard.register( - "per_visit_default", func=get_normalized_probe_dashboard_config + "per_visit_default", func=per_visit.get_normalized_probe_dashboard_config ) normalized_probe_dashboard.register( - "per_condition_default", func=get_normalized_probe_dashboard_config + "per_condition_default", func=per_condition.get_normalized_probe_dashboard_config ) probe_dashboard = catalogue.create( "edsteva.probes.condition.viz_configs", "probe_dashboard" ) -probe_dashboard.register("per_visit_default", func=get_probe_dashboard_config) -probe_dashboard.register("per_condition_default", func=get_probe_dashboard_config) +probe_dashboard.register("per_visit_default", func=per_visit.get_probe_dashboard_config) +probe_dashboard.register( + "per_condition_default", func=per_condition.get_probe_dashboard_config +) estimates_densities_plot = catalogue.create( "edsteva.probes.condition.viz_configs", "estimates_densities_plot" ) estimates_densities_plot.register( - "per_visit_default", func=get_estimates_densities_plot_config + "per_visit_default", func=per_visit.get_estimates_densities_plot_config ) estimates_densities_plot.register( - "per_condition_default", func=get_estimates_densities_plot_config + "per_condition_default", func=per_condition.get_estimates_densities_plot_config ) normalized_probe_plot = catalogue.create( "edsteva.probes.condition.viz_configs", "normalized_probe_plot" ) normalized_probe_plot.register( - "per_visit_default", func=get_normalized_probe_plot_config + "per_visit_default", func=per_visit.get_normalized_probe_plot_config ) normalized_probe_plot.register( - "per_condition_default", func=get_normalized_probe_plot_config + "per_condition_default", func=per_condition.get_normalized_probe_plot_config ) probe_plot = catalogue.create("edsteva.probes.condition.viz_configs", "probe_plot") -probe_plot.register("per_visit_default", func=get_probe_plot_config) -probe_plot.register("per_condition_default", func=get_probe_plot_config) +probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) +probe_plot.register("per_condition_default", func=per_condition.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, diff --git a/edsteva/probes/note/viz_configs/__init__.py b/edsteva/probes/note/viz_configs/__init__.py index 58ef6479..3999e677 100644 --- a/edsteva/probes/note/viz_configs/__init__.py +++ b/edsteva/probes/note/viz_configs/__init__.py @@ -1,69 +1,44 @@ import catalogue -from edsteva.probes.note.viz_configs.per_note.estimates_densities_plot import ( - get_estimates_densities_plot_config, -) -from edsteva.probes.note.viz_configs.per_note.normalized_probe_dashboard import ( - get_normalized_probe_dashboard_config, -) -from edsteva.probes.note.viz_configs.per_note.normalized_probe_plot import ( - get_normalized_probe_plot_config, -) -from edsteva.probes.note.viz_configs.per_note.probe_dashboard import ( - get_probe_dashboard_config, -) -from edsteva.probes.note.viz_configs.per_note.probe_plot import get_probe_plot_config -from edsteva.probes.note.viz_configs.per_visit.estimates_densities_plot import ( - get_estimates_densities_plot_config, -) -from edsteva.probes.note.viz_configs.per_visit.normalized_probe_dashboard import ( - get_normalized_probe_dashboard_config, -) -from edsteva.probes.note.viz_configs.per_visit.normalized_probe_plot import ( - get_normalized_probe_plot_config, -) -from edsteva.probes.note.viz_configs.per_visit.probe_dashboard import ( - get_probe_dashboard_config, -) -from edsteva.probes.note.viz_configs.per_visit.probe_plot import get_probe_plot_config +from edsteva.probes.note.viz_configs import per_note, per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.note.viz_configs", "normalized_probe_dashboard" ) normalized_probe_dashboard.register( - "per_visit_default", func=get_normalized_probe_dashboard_config + "per_visit_default", func=per_visit.get_normalized_probe_dashboard_config ) normalized_probe_dashboard.register( - "per_note_default", func=get_normalized_probe_dashboard_config + "per_note_default", func=per_note.get_normalized_probe_dashboard_config ) probe_dashboard = catalogue.create("edsteva.probes.note.viz_configs", "probe_dashboard") -probe_dashboard.register("per_visit_default", func=get_probe_dashboard_config) -probe_dashboard.register("per_note_default", func=get_probe_dashboard_config) +probe_dashboard.register("per_visit_default", func=per_visit.get_probe_dashboard_config) +probe_dashboard.register("per_note_default", func=per_note.get_probe_dashboard_config) estimates_densities_plot = catalogue.create( "edsteva.probes.note.viz_configs", "estimates_densities_plot" ) estimates_densities_plot.register( - "per_visit_default", func=get_estimates_densities_plot_config + "per_visit_default", func=per_visit.get_estimates_densities_plot_config ) estimates_densities_plot.register( - "per_note_default", func=get_estimates_densities_plot_config + "per_note_default", func=per_note.get_estimates_densities_plot_config ) normalized_probe_plot = catalogue.create( "edsteva.probes.note.viz_configs", "normalized_probe_plot" ) normalized_probe_plot.register( - "per_visit_default", func=get_normalized_probe_plot_config + "per_visit_default", func=per_visit.get_normalized_probe_plot_config ) normalized_probe_plot.register( - "per_note_default", func=get_normalized_probe_plot_config + "per_note_default", func=per_note.get_normalized_probe_plot_config ) probe_plot = catalogue.create("edsteva.probes.note.viz_configs", "probe_plot") -probe_plot.register("per_visit_default", func=get_probe_plot_config) -probe_plot.register("per_note_default", func=get_probe_plot_config) +probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) +probe_plot.register("per_note_default", func=per_note.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, diff --git a/edsteva/probes/visit/viz_configs/__init__.py b/edsteva/probes/visit/viz_configs/__init__.py index 89612ad4..894fc3a7 100644 --- a/edsteva/probes/visit/viz_configs/__init__.py +++ b/edsteva/probes/visit/viz_configs/__init__.py @@ -1,48 +1,36 @@ import catalogue -from edsteva.probes.visit.viz_configs.per_visit.estimates_densities_plot import ( - get_estimates_densities_plot_config, -) -from edsteva.probes.visit.viz_configs.per_visit.normalized_probe_dashboard import ( - get_normalized_probe_dashboard_config, -) -from edsteva.probes.visit.viz_configs.per_visit.normalized_probe_plot import ( - get_normalized_probe_plot_config, -) -from edsteva.probes.visit.viz_configs.per_visit.probe_dashboard import ( - get_probe_dashboard_config, -) -from edsteva.probes.visit.viz_configs.per_visit.probe_plot import get_probe_plot_config +from edsteva.probes.visit.viz_configs import per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.visit.viz_configs", "normalized_probe_dashboard" ) normalized_probe_dashboard.register( - "per_visit_default", func=get_normalized_probe_dashboard_config + "per_visit_default", func=per_visit.get_normalized_probe_dashboard_config ) probe_dashboard = catalogue.create( "edsteva.probes.visit.viz_configs", "probe_dashboard" ) -probe_dashboard.register("per_visit_default", func=get_probe_dashboard_config) +probe_dashboard.register("per_visit_default", func=per_visit.get_probe_dashboard_config) estimates_densities_plot = catalogue.create( "edsteva.probes.visit.viz_configs", "estimates_densities_plot" ) estimates_densities_plot.register( - "per_visit_default", func=get_estimates_densities_plot_config + "per_visit_default", func=per_visit.get_estimates_densities_plot_config ) normalized_probe_plot = catalogue.create( "edsteva.probes.visit.viz_configs", "normalized_probe_plot" ) normalized_probe_plot.register( - "per_visit_default", func=get_normalized_probe_plot_config + "per_visit_default", func=per_visit.get_normalized_probe_plot_config ) probe_plot = catalogue.create("edsteva.probes.visit.viz_configs", "probe_plot") -probe_plot.register("per_visit_default", func=get_probe_plot_config) +probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, From 5e498bb2e0e993b7c0f7c182df972cfd67906cd2 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 24 Mar 2023 10:17:24 +0100 Subject: [PATCH 018/127] Hot fix --- .../probes/biology/viz_configs/per_measurement/__init__.py | 5 +++++ .../probes/condition/viz_configs/per_condition/__init__.py | 5 +++++ edsteva/probes/condition/viz_configs/per_visit/__init__.py | 5 +++++ edsteva/probes/note/viz_configs/per_note/__init__.py | 5 +++++ edsteva/probes/note/viz_configs/per_visit/__init__.py | 5 +++++ edsteva/probes/visit/viz_configs/per_visit/__init__.py | 5 +++++ 6 files changed, 30 insertions(+) create mode 100644 edsteva/probes/biology/viz_configs/per_measurement/__init__.py create mode 100644 edsteva/probes/condition/viz_configs/per_condition/__init__.py create mode 100644 edsteva/probes/condition/viz_configs/per_visit/__init__.py create mode 100644 edsteva/probes/note/viz_configs/per_note/__init__.py create mode 100644 edsteva/probes/note/viz_configs/per_visit/__init__.py create mode 100644 edsteva/probes/visit/viz_configs/per_visit/__init__.py diff --git a/edsteva/probes/biology/viz_configs/per_measurement/__init__.py b/edsteva/probes/biology/viz_configs/per_measurement/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_measurement/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_condition/__init__.py b/edsteva/probes/condition/viz_configs/per_condition/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_condition/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/per_visit/__init__.py b/edsteva/probes/condition/viz_configs/per_visit/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/condition/viz_configs/per_visit/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/note/viz_configs/per_note/__init__.py b/edsteva/probes/note/viz_configs/per_note/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_note/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/note/viz_configs/per_visit/__init__.py b/edsteva/probes/note/viz_configs/per_visit/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/note/viz_configs/per_visit/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/visit/viz_configs/per_visit/__init__.py b/edsteva/probes/visit/viz_configs/per_visit/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/visit/viz_configs/per_visit/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config From bec8c7b4b03ff54ca95a0b633acf4f63ed2b49be Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 27 Mar 2023 10:33:45 +0200 Subject: [PATCH 019/127] Hot fix --- edsteva/viz/utils.py | 61 ++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index 9765f88b..55f97e0e 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -250,6 +250,7 @@ def concatenate_charts( time_line: alt.Chart = None, spacing: float = 10, ): + # Horizontal histograms bar_charts_rows = [] for bar_charts_row in horizontal_bar_charts.values(): bar_charts_row = reduce( @@ -259,13 +260,15 @@ def concatenate_charts( bar_charts_row, ) bar_charts_rows.append(bar_charts_row) - horizontal_bar_charts = reduce( - lambda bar_chart_1, bar_chart_2: (bar_chart_1 & bar_chart_2).resolve_scale( - color="independent" - ), - bar_charts_rows, - ) + if bar_charts_rows: + horizontal_bar_charts = reduce( + lambda bar_chart_1, bar_chart_2: (bar_chart_1 & bar_chart_2).resolve_scale( + color="independent" + ), + bar_charts_rows, + ) + # Vertical histograms bar_charts_columns = [] for bar_charts_column in vertical_bar_charts.values(): bar_charts_column = reduce( @@ -275,23 +278,47 @@ def concatenate_charts( bar_charts_column, ) bar_charts_columns.append(bar_charts_column) - vertical_bar_charts = reduce( - lambda bar_chart_1, bar_chart_2: (bar_chart_1 & bar_chart_2).resolve_scale( - color="independent" - ), - bar_charts_columns, - ) + if bar_charts_columns: + if bar_charts_rows: + vertical_bar_charts = reduce( + lambda bar_chart_1, bar_chart_2: ( + bar_chart_1 & bar_chart_2 + ).resolve_scale(color="independent"), + bar_charts_columns, + ) + else: + vertical_bar_charts = reduce( + lambda bar_chart_1, bar_chart_2: ( + bar_chart_1 | bar_chart_2 + ).resolve_scale(color="independent"), + bar_charts_columns, + ) + + if bar_charts_rows: + if bar_charts_columns: + bottom_chart = vertical_bar_charts | horizontal_bar_charts + else: + bottom_chart = horizontal_bar_charts + elif bar_charts_columns: + bottom_chart = vertical_bar_charts + else: + bottom_chart = None + if time_line: top_chart = alt.vconcat(main_chart, time_line, spacing=100).resolve_scale( color="independent" ) else: top_chart = main_chart - concat_chart = alt.vconcat( - top_chart, - (vertical_bar_charts | horizontal_bar_charts), - spacing=spacing, - ) + + if bottom_chart: + concat_chart = alt.vconcat( + top_chart, + bottom_chart, + spacing=spacing, + ) + else: + concat_chart = top_chart return concat_chart From 8ed4ded62dc8f228fb7eff2808716181948a70ba Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 31 Mar 2023 11:51:37 +0200 Subject: [PATCH 020/127] Add Specialties_sets in Probe index --- edsteva/io/settings.py | 2 +- edsteva/io/synthetic/synthetic.py | 82 +++- edsteva/probes/base.py | 3 +- edsteva/probes/biology/biology.py | 10 + .../per_measurement.py | 6 +- .../viz_configs/per_measurement/defaults.py | 10 + .../biology/viz_configs/per_visit/defaults.py | 10 + .../completeness_predictors/per_condition.py | 16 +- .../completeness_predictors/per_visit.py | 19 +- edsteva/probes/condition/condition.py | 13 +- .../viz_configs/per_condition/defaults.py | 10 + .../viz_configs/per_visit/defaults.py | 10 + .../note/completeness_predictors/per_note.py | 52 ++- .../note/completeness_predictors/per_visit.py | 62 +-- edsteva/probes/note/note.py | 10 + .../note/viz_configs/per_note/defaults.py | 10 + .../note/viz_configs/per_visit/defaults.py | 10 + edsteva/probes/utils/filter_df.py | 391 ++++-------------- edsteva/probes/utils/prepare_df.py | 36 +- edsteva/probes/utils/utils.py | 27 +- .../completeness_predictors/per_visit.py | 79 +++- edsteva/probes/visit/visit.py | 15 +- .../visit/viz_configs/per_visit/defaults.py | 10 + .../normalized_probe/normalized_probe.py | 5 + edsteva/viz/dashboards/probe/fitted_probe.py | 9 +- edsteva/viz/dashboards/probe/probe.py | 5 + edsteva/viz/dashboards/probe/wrapper.py | 3 + .../estimates_densities.py | 35 +- edsteva/viz/utils.py | 12 + 29 files changed, 553 insertions(+), 409 deletions(-) diff --git a/edsteva/io/settings.py b/edsteva/io/settings.py index be11489d..0b499819 100644 --- a/edsteva/io/settings.py +++ b/edsteva/io/settings.py @@ -377,6 +377,6 @@ 35: "Unité de consultation (UC)", 45: "Pôle/DMU", 50: "Unité Fonctionnelle (UF)", - 70: "Unité d'hébergement (UH)", + 70: "Unité d’hébergement (UH)", 100: "Unité de consultation (UC)", } diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 462203e4..db6531ff 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -27,7 +27,7 @@ "Unité Fonctionnelle (UF)-113": {"Unité de consultation (UC)-1131": None}, }, "Pôle/DMU-12": { - "Unité Fonctionnelle (UF)-121": None, + "Unité Fonctionnelle (UF)-121": {"Unité d’hébergement (UH)-1211": None}, "Unité Fonctionnelle (UF)-122": {"Unité de consultation (UC)-1221": None}, }, }, @@ -42,7 +42,10 @@ }, "Pôle/DMU-22": { "Unité Fonctionnelle (UF)-221": None, - "Unité Fonctionnelle (UF)-222": None, + "Unité Fonctionnelle (UF)-222": { + "Unité d’hébergement (UH)-2221": None, + "Unité d’hébergement (UH)-2222": None, + }, }, }, "Hôpital-3": { @@ -92,11 +95,6 @@ ) OTHER_DETAIL_COLUMNS = dict( - visit_detail_type_source_value=[ - ("PASS UF", 0.4), - ("SSR", 0.1), - ("RUM", 0.5), - ], row_status_source_value=[ ("Actif", 0.999), ("supprimé", 0.001), @@ -451,8 +449,10 @@ def generate(self): care_site, fact_relationship, hospital_ids = self._generate_care_site_tables() visit_occurrence = self._generate_visit_occurrence(hospital_ids) - visit_detail = self._generate_visit_detail(visit_occurrence) - condition_occurrence = self._generate_condition_occurrence(visit_detail) + visit_detail = self._generate_visit_detail(visit_occurrence, care_site) + condition_occurrence = self._generate_condition_occurrence( + visit_detail, + ) note = self._generate_note(hospital_ids, visit_occurrence) concept, concept_relationship, src_concept_name = self._generate_concept() measurement = self._generate_measurement( @@ -479,6 +479,35 @@ def generate(self): def _generate_care_site_tables(self): care_site, fact_relationship = generate_care_site_tables(CARE_SITE_STRUCTURE) + uc_care_site = care_site[ + care_site.care_site_type_source_value == "Unité de consultation (UC)" + ][["care_site_id"]].reset_index(drop=True) + uc_care_site = add_other_columns( + uc_care_site, + other_columns=dict( + place_of_service_source_value=[ + ("CARDIO", 0.2), + ("PEDIATRIE", 0.4), + ("PSYCHIATRIE", 0.4), + ] + ), + ) + uh_care_site = care_site[ + care_site.care_site_type_source_value == "Unité d’hébergement (UH)" + ][["care_site_id"]].reset_index(drop=True) + uh_care_site = add_other_columns( + uh_care_site, + other_columns=dict( + place_of_service_source_value=[ + ("REA ADULTE", 0.5), + ("USI ADULTE", 0.5), + ] + ), + ) + care_site = care_site.merge( + pd.concat([uc_care_site, uh_care_site]), on="care_site_id", how="left" + ) + care_site.fillna("Non Renseigné", inplace=True) hospital_ids = list( care_site[care_site.care_site_type_source_value == "Hôpital"].care_site_id ) @@ -530,7 +559,7 @@ def _generate_visit_occurrence(self, hospital_ids): return visit_occurrence - def _generate_visit_detail(self, visit_occurrence): + def _generate_visit_detail(self, visit_occurrence, care_site): t_min = self.t_min.timestamp() t_max = self.t_max.timestamp() visit_detail = [] @@ -570,7 +599,38 @@ def _generate_visit_detail(self, visit_occurrence): visit_detail, self.other_detail_columns, ) - + visit_detail = visit_detail.merge(care_site, on="care_site_id") + uc_detail = ( + visit_detail[ + visit_detail.care_site_type_source_value == "Unité de consultation (UC)" + ] + .copy() + .reset_index(drop=True) + ) + uc_detail["visit_detail_type_source_value"] = "PASS UC" + uh_detail = ( + visit_detail[ + visit_detail.care_site_type_source_value == "Unité d’hébergement (UH)" + ] + .copy() + .reset_index(drop=True) + ) + uh_detail["visit_detail_type_source_value"] = "PASS UH" + uf_detail = ( + visit_detail[ + visit_detail.care_site_type_source_value == "Unité Fonctionnelle (UF)" + ] + .copy() + .reset_index(drop=True) + ) + uf_detail["visit_detail_type_source_value"] = "PASS UF" + rum_detail = uf_detail.copy() + rum_detail["visit_detail_type_source_value"] = "RUM" + care_site_col = list(care_site.columns) + care_site_col.remove("care_site_id") + visit_detail = pd.concat([uc_detail, uh_detail, uf_detail, rum_detail]).drop( + columns=care_site_col + ) return visit_detail def _generate_condition_occurrence(self, visit_detail): diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index 521df36e..ef58d87a 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -289,6 +289,7 @@ def filter_care_site( self, care_site_ids: Union[int, List[int]] = None, care_site_short_names: Union[str, List[str]] = None, + care_site_specialties: Union[str, List[str]] = None, ) -> None: """Filters all the care sites related to the selected care sites. @@ -301,10 +302,10 @@ def filter_care_site( """ self.predictor = filter_table_by_care_site( table_to_filter=self.predictor, - table_name="{} predictor".format(type(self).__name__.lower()), care_site_relationship=self.care_site_relationship, care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, ) logger.info("Use probe.reset_predictor() to get back the initial predictor") diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 6c68dc7c..634e33d9 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -53,6 +53,8 @@ def __init__( "stay_type", "length_of_stay", "care_site_id", + "care_site_specialty", + "specialties_set", ] + [ "{}_concept_code".format(terminology) for terminology in standard_terminologies @@ -70,6 +72,8 @@ def compute_process( stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], care_site_short_names: List[str] = None, + care_site_specialties: List[str] = None, + specialties_sets: Union[str, Dict[str, str]] = None, concepts_sets: Union[str, Dict[str, str]] = { "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", "Plaquettes": "E4812|C0326|A1636|A0230|H6751|A1598|G7728|G7727|G7833|A2538|A2539|J4463", @@ -118,6 +122,10 @@ def compute_process( care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` """ + if specialties_sets is None: + self._index.remove("specialties_set") + if concepts_sets is None: + self._index.remove("concepts_set") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -128,6 +136,8 @@ def compute_process( stay_types=stay_types, care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, concepts_sets=concepts_sets, stay_durations=stay_durations, source_terminologies=source_terminologies, diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 9e57f038..63c7436b 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -30,6 +30,8 @@ def compute_completeness_predictor_per_measurement( stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], stay_durations: List[float], source_terminologies: Dict[str, str], @@ -76,6 +78,8 @@ def compute_completeness_predictor_per_measurement( data=data, care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, care_site_relationship=care_site_relationship, ) @@ -146,6 +150,6 @@ def get_hospital_measurements(measurement, visit_occurrence, care_site): hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") if is_koalas(hospital_measurement): - hospital_measurement.spark.cache() + hospital_measurement = hospital_measurement.spark.cache() return hospital_measurement diff --git a/edsteva/probes/biology/viz_configs/per_measurement/defaults.py b/edsteva/probes/biology/viz_configs/per_measurement/defaults.py index c95e2476..2dc20179 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/defaults.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/defaults.py @@ -46,6 +46,16 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, ] + [ diff --git a/edsteva/probes/biology/viz_configs/per_visit/defaults.py b/edsteva/probes/biology/viz_configs/per_visit/defaults.py index c95e2476..2dc20179 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/biology/viz_configs/per_visit/defaults.py @@ -46,6 +46,16 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, ] + [ diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 82308b16..95884a71 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -32,6 +32,8 @@ def compute_completeness_predictor_per_condition( care_site_ids: List[int], extra_data: Data, care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], diag_types: Union[str, Dict[str, str]], condition_types: Union[str, Dict[str, str]], source_systems: List[str], @@ -96,6 +98,8 @@ def compute_completeness_predictor_per_condition( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, care_site_relationship=care_site_relationship, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, ) hospital_visit = get_hospital_condition( @@ -112,7 +116,6 @@ def compute_completeness_predictor_per_condition( data=data, start_date=start_date, end_date=end_date, - visit_detail_type="RUM", ) uf_condition = get_uf_condition( @@ -190,7 +193,7 @@ def get_hospital_condition(condition_occurrence, visit_occurrence, care_site): hospital_condition = hospital_condition.merge(care_site, on="care_site_id") if is_koalas(hospital_condition): - hospital_condition.spark.cache() + hospital_condition = hospital_condition.spark.cache() return hospital_condition @@ -202,6 +205,7 @@ def get_uf_condition( care_site, ): # pragma: no cover # Add visit information + visit_detail = visit_detail[visit_detail.visit_detail_type == "RUM"] uf_condition = condition_occurrence.merge( visit_occurrence.drop(columns="care_site_id"), on="visit_occurrence_id", @@ -220,7 +224,7 @@ def get_uf_condition( uf_condition = uf_condition[uf_condition["care_site_level"] == uf_name] if is_koalas(uf_condition): - uf_condition.spark.cache() + uf_condition = uf_condition.spark.cache() return uf_condition @@ -229,7 +233,9 @@ def get_pole_condition( uf_condition, care_site, care_site_relationship ): # pragma: no cover pole_condition = convert_uf_to_pole( - table=uf_condition.drop(columns=["care_site_short_name", "care_site_level"]), + table=uf_condition.drop( + columns=["care_site_short_name", "care_site_level", "care_site_specialty"] + ), table_name="uf_condition", care_site_relationship=care_site_relationship, ) @@ -240,6 +246,6 @@ def get_pole_condition( pole_condition = pole_condition[pole_condition["care_site_level"] == pole_name] if is_koalas(pole_condition): - pole_condition.spark.cache() + pole_condition = pole_condition.spark.cache() return pole_condition diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 6265838e..c51be0be 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -32,6 +32,8 @@ def compute_completeness_predictor_per_visit( care_site_ids: List[int], extra_data: Data, care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], diag_types: Union[str, Dict[str, str]], condition_types: Union[str, Dict[str, str]], source_systems: List[str], @@ -96,6 +98,8 @@ def compute_completeness_predictor_per_visit( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, care_site_relationship=care_site_relationship, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, ) hospital_visit = get_hospital_visit( @@ -108,9 +112,7 @@ def compute_completeness_predictor_per_visit( # UF selection if not hospital_only(care_site_levels=care_site_levels): - visit_detail = prepare_visit_detail( - data, start_date, end_date, visit_detail_type="RUM" - ) + visit_detail = prepare_visit_detail(data, start_date, end_date) uf_visit = get_uf_visit( condition_occurrence, @@ -191,7 +193,7 @@ def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): hospital_visit = hospital_visit.merge(care_site, on="care_site_id") if is_koalas(hospital_visit): - hospital_visit.spark.cache() + hospital_visit = hospital_visit.spark.cache() return hospital_visit @@ -202,6 +204,7 @@ def get_uf_visit( visit_detail, care_site, ): # pragma: no cover + visit_detail = visit_detail[visit_detail.visit_detail_type == "RUM"] condition_uf = ( condition_occurrence[ [ @@ -233,14 +236,16 @@ def get_uf_visit( uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] if is_koalas(uf_visit): - uf_visit.spark.cache() + uf_visit = uf_visit.spark.cache() return uf_visit def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover pole_visit = convert_uf_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table=uf_visit.drop( + columns=["care_site_short_name", "care_site_level", "care_site_specialty"] + ), table_name="uf_visit", care_site_relationship=care_site_relationship, ) @@ -251,6 +256,6 @@ def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no c pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] if is_koalas(pole_visit): - pole_visit.spark.cache() + pole_visit = pole_visit.spark.cache() return pole_visit diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index 993b73d8..cf4f3879 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -41,6 +41,8 @@ def __init__( "condition_type", "source_system", "care_site_id", + "care_site_specialty", + "specialties_set", ] if _viz_config is None: self._viz_config = {} @@ -56,8 +58,10 @@ def compute_process( care_site_ids: List[int], extra_data: Data = None, care_site_short_names: List[str] = None, + care_site_specialties: List[str] = None, diag_types: Union[str, Dict[str, str]] = None, - condition_types: Union[str, Dict[str, str]] = {"All": ".*"}, + specialties_sets: Union[str, Dict[str, str]] = None, + condition_types: Union[str, Dict[str, str]] = None, source_systems: List[str] = ["ORBIS"], stay_durations: List[float] = None, hdfs_user_path: str = None, @@ -90,7 +94,10 @@ def compute_process( care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` """ - + if specialties_sets is None: + self._index.remove("specialties_set") + if condition_types is None: + self._index.remove("condition_type") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -102,6 +109,8 @@ def compute_process( care_site_ids=care_site_ids, extra_data=extra_data, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, diag_types=diag_types, stay_durations=stay_durations, condition_types=condition_types, diff --git a/edsteva/probes/condition/viz_configs/per_condition/defaults.py b/edsteva/probes/condition/viz_configs/per_condition/defaults.py index a5400659..abbf5d17 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/defaults.py +++ b/edsteva/probes/condition/viz_configs/per_condition/defaults.py @@ -61,6 +61,16 @@ "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, ], x=[ dict( diff --git a/edsteva/probes/condition/viz_configs/per_visit/defaults.py b/edsteva/probes/condition/viz_configs/per_visit/defaults.py index b5587fe5..dd3d71ac 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/condition/viz_configs/per_visit/defaults.py @@ -61,6 +61,16 @@ "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, ], x=[ dict( diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index da6e7634..b464ddf9 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -31,6 +31,8 @@ def compute_completeness_predictor_per_note( stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], @@ -77,10 +79,12 @@ def compute_completeness_predictor_per_note( ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_relationship=care_site_relationship, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, ) note_hospital = get_hospital_note(note, visit_occurrence, care_site) @@ -90,7 +94,7 @@ def compute_completeness_predictor_per_note( # UF selection if not hospital_only(care_site_levels=care_site_levels): if extra_data: - note_uf = get_uf_note( + note_uf, note_uc, note_uh = get_note_detail( extra_data, note, visit_occurrence, @@ -98,6 +102,10 @@ def compute_completeness_predictor_per_note( ) uf_name = CARE_SITE_LEVEL_NAMES["UF"] note_predictor_by_level[uf_name] = note_uf + uc_name = CARE_SITE_LEVEL_NAMES["UC"] + note_predictor_by_level[uc_name] = note_uc + uh_name = CARE_SITE_LEVEL_NAMES["UH"] + note_predictor_by_level[uh_name] = note_uh note_pole = get_pole_note(note_uf, care_site, care_site_relationship) pole_name = CARE_SITE_LEVEL_NAMES["Pole"] @@ -163,38 +171,44 @@ def get_hospital_note(note, visit_occurrence, care_site): note_hospital = note_hospital.drop(columns="visit_occurrence_id") note_hospital = note_hospital.merge(care_site, on="care_site_id") if is_koalas(note_hospital): - note_hospital.spark.cache() + note_hospital = note_hospital.spark.cache() return note_hospital -def get_uf_note( +def get_note_detail( extra_data, note, visit_occurrence, care_site, ): # pragma: no cover - note_uf = prepare_note_care_site(extra_data=extra_data, note=note) - note_uf = note_uf.merge(care_site, on="care_site_id") - note_uf = note_uf.merge( + note_detail = prepare_note_care_site(extra_data=extra_data, note=note) + note_detail = note_detail.merge(care_site, on="care_site_id") + note_detail = note_detail.merge( visit_occurrence.drop(columns="care_site_id"), on="visit_occurrence_id", how="left", - ) - note_uf = note_uf.drop(columns="visit_occurrence_id") + ).drop(columns="visit_occurrence_id") uf_name = CARE_SITE_LEVEL_NAMES["UF"] - note_uf = note_uf[note_uf["care_site_level"] == uf_name] - - if is_koalas(note_uf): - note_uf.spark.cache() + note_uf = note_detail[note_detail["care_site_level"] == uf_name] + uc_name = CARE_SITE_LEVEL_NAMES["UC"] + note_uc = note_detail[note_detail["care_site_level"] == uc_name] + uh_name = CARE_SITE_LEVEL_NAMES["UH"] + note_uh = note_detail[note_detail["care_site_level"] == uh_name] + if is_koalas(note_detail): + note_uf = note_uf.spark.cache() + note_uc = note_uc.spark.cache() + note_uh = note_uh.spark.cache() - return note_uf + return note_uf, note_uc, note_uh def get_pole_note(note_uf, care_site, care_site_relationship): # pragma: no cover note_pole = convert_uf_to_pole( - table=note_uf.drop(columns=["care_site_short_name", "care_site_level"]), + table=note_uf.drop( + columns=["care_site_short_name", "care_site_level", "care_site_specialty"] + ), table_name="note_uf", care_site_relationship=care_site_relationship, ) @@ -205,6 +219,6 @@ def get_pole_note(note_uf, care_site, care_site_relationship): # pragma: no cov note_pole = note_pole[note_pole["care_site_level"] == pole_name] if is_koalas(note_pole): - note_pole.spark.cache() + note_pole = note_pole.spark.cache() return note_pole diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 02494d91..aa89971e 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -32,6 +32,8 @@ def compute_completeness_predictor_per_visit( stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], @@ -73,10 +75,12 @@ def compute_completeness_predictor_per_visit( ) care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_relationship=care_site_relationship, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, ) note = prepare_note(data, note_types) @@ -90,7 +94,7 @@ def compute_completeness_predictor_per_visit( if extra_data: visit_detail = prepare_visit_detail(data, start_date, end_date) - uf_visit = get_uf_visit( + uf_visit, uc_visit, uh_visit = get_visit_detail( extra_data, note, visit_occurrence, @@ -99,6 +103,10 @@ def compute_completeness_predictor_per_visit( ) uf_name = CARE_SITE_LEVEL_NAMES["UF"] note_predictor_by_level[uf_name] = uf_visit + uc_name = CARE_SITE_LEVEL_NAMES["UC"] + note_predictor_by_level[uc_name] = uc_visit + uh_name = CARE_SITE_LEVEL_NAMES["UH"] + note_predictor_by_level[uh_name] = uh_visit pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) pole_name = CARE_SITE_LEVEL_NAMES["Pole"] @@ -167,48 +175,56 @@ def get_hospital_visit(note, visit_occurrence, care_site): hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) hospital_visit = hospital_visit.merge(care_site, on="care_site_id") if is_koalas(hospital_visit): - hospital_visit.spark.cache() + hospital_visit = hospital_visit.spark.cache() return hospital_visit -def get_uf_visit( +def get_visit_detail( extra_data, note, visit_occurrence, visit_detail, care_site, ): # pragma: no cover - note = prepare_note_care_site(extra_data=extra_data, note=note) - note_uf = note[ - ["visit_occurrence_id", "note_type", "care_site_id"] - ].drop_duplicates() - note_uf["has_note"] = True - visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "stay_type"]], + visit_occurrence[["visit_occurrence_id", "stay_type", "length_of_stay"]], on="visit_occurrence_id", ) - visit_detail = visit_detail.merge( - note_uf, + + note_detail = prepare_note_care_site(extra_data=extra_data, note=note) + note_detail = note_detail[ + ["visit_occurrence_id", "note_type", "care_site_id"] + ].drop_duplicates() + note_detail["has_note"] = True + note_detail = visit_detail.merge( + note_detail, on=["visit_occurrence_id", "care_site_id"], how="left", ).drop(columns="visit_occurrence_id") - uf_visit = visit_detail.merge(care_site, on="care_site_id") + note_detail = visit_detail.merge(care_site, on="care_site_id") uf_name = CARE_SITE_LEVEL_NAMES["UF"] - uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] + uf_visit = note_detail[note_detail["care_site_level"] == uf_name] + uc_name = CARE_SITE_LEVEL_NAMES["UC"] + uc_visit = note_detail[note_detail["care_site_level"] == uc_name] + uh_name = CARE_SITE_LEVEL_NAMES["UH"] + uh_visit = note_detail[note_detail["care_site_level"] == uh_name] - if is_koalas(uf_visit): - uf_visit.spark.cache() + if is_koalas(note_detail): + uf_visit = uf_visit.spark.cache() + uc_visit = uc_visit.spark.cache() + uh_visit = uh_visit.spark.cache() - return uf_visit + return uf_visit, uc_visit, uh_visit def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover pole_visit = convert_uf_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table=uf_visit.drop( + columns=["care_site_short_name", "care_site_level", "care_site_specialty"] + ), table_name="uf_visit", care_site_relationship=care_site_relationship, ) @@ -219,6 +235,6 @@ def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no c pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] if is_koalas(pole_visit): - pole_visit.spark.cache() + pole_visit = pole_visit.spark.cache() return pole_visit diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 22a3b38c..95b8ebd9 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -39,6 +39,8 @@ def __init__( "length_of_stay", "note_type", "care_site_id", + "care_site_specialty", + "specialties_set", ] if _viz_config is None: self._viz_config = {} @@ -53,6 +55,8 @@ def compute_process( stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], care_site_short_names: List[str] = None, + care_site_specialties: List[str] = None, + specialties_sets: Union[str, Dict[str, str]] = None, extra_data: Data = None, stay_durations: List[float] = None, note_types: Union[str, Dict[str, str]] = { @@ -87,6 +91,10 @@ def compute_process( care_site_ids : List[int], optional **EXAMPLE**: `[8312056386, 8312027648]` """ + if specialties_sets is None: + self._index.remove("specialties_set") + if note_types is None: + self._index.remove("note_type") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -98,6 +106,8 @@ def compute_process( care_site_ids=care_site_ids, extra_data=extra_data, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, note_types=note_types, stay_durations=stay_durations, hdfs_user_path=hdfs_user_path, diff --git a/edsteva/probes/note/viz_configs/per_note/defaults.py b/edsteva/probes/note/viz_configs/per_note/defaults.py index 04d28214..f1ce76c2 100644 --- a/edsteva/probes/note/viz_configs/per_note/defaults.py +++ b/edsteva/probes/note/viz_configs/per_note/defaults.py @@ -49,6 +49,16 @@ "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, ], x=[ dict( diff --git a/edsteva/probes/note/viz_configs/per_visit/defaults.py b/edsteva/probes/note/viz_configs/per_visit/defaults.py index 5894bfa5..e54dcfae 100644 --- a/edsteva/probes/note/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/note/viz_configs/per_visit/defaults.py @@ -49,6 +49,16 @@ "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, ], x=[ dict( diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index ced09b33..e973ac10 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -10,7 +10,7 @@ from edsteva.utils.framework import get_framework, to from edsteva.utils.typing import DataFrame -from .utils import CARE_SITE_LEVEL_NAMES, UNSUPPORTED_CARE_SITE_LEVEL_NAMES +from .utils import CARE_SITE_LEVEL_NAMES def filter_table_by_type( @@ -116,14 +116,17 @@ def filter_table_by_stay_duration( visit_occurrence: DataFrame, stay_durations: List[float] ): if stay_durations: - visit_occurrence["length"] = ( - visit_occurrence["visit_end_datetime"] - - visit_occurrence["visit_start_datetime"] - ) / np.timedelta64(timedelta(days=1)) + visit_occurrence = visit_occurrence.assign( + length=( + visit_occurrence.visit_end_datetime + - visit_occurrence.visit_start_datetime + ) + / np.timedelta64(timedelta(days=1)) + ) # Incomplete stays - visit_occurrence["length_of_stay"] = "Unknown" - visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( + visit_occurrence = visit_occurrence.assign(length_of_stay="Unknown") + visit_occurrence["length_of_stay"] = visit_occurrence.length_of_stay.mask( visit_occurrence["visit_end_datetime"].isna(), "Incomplete stay", ) @@ -153,200 +156,104 @@ def filter_table_by_stay_duration( visit_occurrence = visit_occurrence.drop(columns="length") else: - visit_occurrence["length_of_stay"] = "All lengths" + visit_occurrence = visit_occurrence.assign(length_of_stay="All lengths") return visit_occurrence.drop(columns="visit_end_datetime") def filter_table_by_care_site( table_to_filter: DataFrame, - table_name: str, care_site_relationship: pd.DataFrame, - care_site_short_names: Union[str, List[str]] = None, care_site_ids: Union[int, List[int]] = None, + care_site_short_names: Union[str, List[str]] = None, + care_site_specialties: Union[str, List[str]] = None, ): care_site = care_site_relationship[ - ["care_site_id", "care_site_short_name", "care_site_level"] + [ + "care_site_id", + "care_site_short_name", + "care_site_level", + "care_site_specialty", + ] ] care_site_filter = [] if care_site_ids: if not isinstance(care_site_ids, list): care_site_ids = [care_site_ids] care_site_filter.append( - care_site[care_site["care_site_id"].isin(care_site_ids)].copy() + care_site[care_site["care_site_id"].isin(care_site_ids)][ + ["care_site_id", "care_site_level", "care_site_short_name"] + ] ) if care_site_short_names: if not isinstance(care_site_short_names, list): care_site_short_names = [care_site_short_names] care_site_filter.append( - care_site[ - care_site["care_site_short_name"].isin(care_site_short_names) - ].copy() + care_site[care_site["care_site_short_name"].isin(care_site_short_names)][ + ["care_site_id", "care_site_level", "care_site_short_name"] + ] + ) + if care_site_specialties: + if not isinstance(care_site_specialties, list): + care_site_specialties = [care_site_specialties] + care_site_filter.append( + care_site[care_site["care_site_specialty"].isin(care_site_specialties)][ + ["care_site_id", "care_site_level", "care_site_short_name"] + ] ) if care_site_filter: care_site_filter = pd.concat( care_site_filter, ignore_index=True - ).drop_duplicates("care_site_id") + ).drop_duplicates() else: - raise Exception("care_site_ids or care_site_short_names must be provided") - - # Get all UF from UC - uc_care_site = care_site_filter[ - care_site_filter.care_site_level == UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"] - ] - uc_care_site = uc_care_site[["care_site_id"]].drop_duplicates() - care_site_rel_uc_to_uf = _get_relationship_table_uc_to_uf( - care_site_relationship=care_site_relationship - ) - care_site_rel_uc_to_uf = to("pandas", care_site_rel_uc_to_uf) - related_uf_care_site = uc_care_site.merge( - care_site_rel_uc_to_uf, - on="care_site_id", - ) - uf_from_uc = related_uf_care_site[ - ["care_site_id_uf", "care_site_short_name_uf"] - ].drop_duplicates("care_site_id_uf") - - # Get all UF from Hospital - care_site_rel_uf_to_hospital = _get_relationship_table_uf_to_hospital( - care_site_relationship=care_site_relationship - ) - care_site_rel_uf_to_hospital = to("pandas", care_site_rel_uf_to_hospital) - - hospital_care_site = care_site_filter[ - care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["Hospital"] - ].rename( - columns={ - "care_site_id": "care_site_id_hospital", - "care_site_short_name": "care_site_short_name_hospital", - } - ) - hospital_care_site = hospital_care_site[ - ["care_site_id_hospital", "care_site_short_name_hospital"] - ].drop_duplicates("care_site_id_hospital") - related_hospital_care_site = hospital_care_site.merge( - care_site_rel_uf_to_hospital, - on=[ - "care_site_id_hospital", - "care_site_short_name_hospital", - ], - how="left", - ) - uf_from_hospital = related_hospital_care_site[ - [ - "care_site_id_uf", - "care_site_short_name_uf", - ] - ].drop_duplicates("care_site_id_uf") - pole_from_hospital = related_hospital_care_site[ - [ - "care_site_id_pole", - "care_site_short_name_pole", - ] - ].drop_duplicates("care_site_id_pole") - - # Get all UF from pole - pole_care_site = care_site_filter[ - care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["Pole"] - ].rename( - columns={ - "care_site_id": "care_site_id_pole", - "care_site_short_name": "care_site_short_name_pole", - } - ) - pole_care_site = pole_care_site[ - ["care_site_id_pole", "care_site_short_name_pole"] - ].drop_duplicates("care_site_id_pole") - related_pole_care_site = pole_care_site.merge( - care_site_rel_uf_to_hospital, - on=[ - "care_site_id_pole", - "care_site_short_name_pole", - ], - how="left", - ) - uf_from_pole = related_pole_care_site[ - [ - "care_site_id_uf", - "care_site_short_name_uf", - ] - ].drop_duplicates("care_site_id_uf") - - # Get all Hospital from Pole - hospital_from_pole = related_pole_care_site[ - [ - "care_site_id_hospital", - "care_site_short_name_hospital", - ] - ].drop_duplicates("care_site_id_hospital") - - # Get all Pole from UF - uf_care_site = care_site_filter[ - care_site_filter.care_site_level == CARE_SITE_LEVEL_NAMES["UF"] - ].rename( - columns={ - "care_site_id": "care_site_id_uf", - "care_site_short_name": "care_site_short_name_uf", - } - ) - uf_care_site = uf_care_site[ - ["care_site_id_uf", "care_site_short_name_uf"] - ].drop_duplicates("care_site_id_uf") - uf_care_site = pd.concat([uf_care_site, uf_from_uc]) - - related_uf_care_site = uf_care_site.merge( - care_site_rel_uf_to_hospital, - on=[ - "care_site_id_uf", - "care_site_short_name_uf", - ], - how="left", - ) - pole_from_uf = related_uf_care_site[ - [ - "care_site_id_pole", - "care_site_short_name_pole", - ] - ].drop_duplicates("care_site_id_pole") - - # Get all Hospital from UF - hospital_from_uf = related_uf_care_site[ + raise Exception( + "care_site_ids or care_site_short_names or care_site_specialties must be provided" + ) + extended_care_site_id_to_filter = [] + parent_rel = care_site_relationship[ + ~care_site_relationship.parent_care_site_id.isna() + ][ [ - "care_site_id_hospital", - "care_site_short_name_hospital", + "care_site_id", + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_short_name", ] - ].drop_duplicates("care_site_id_hospital") - - extended_uf_care_site = pd.concat( - [uf_care_site, uf_from_pole, uf_from_hospital, uf_from_uc], ignore_index=True - ).drop_duplicates("care_site_id_uf") - extended_uf_care_site = extended_uf_care_site.rename( - columns={ - "care_site_id_uf": "care_site_id", - "care_site_short_name_uf": "care_site_short_name", - } - ) + ] + while set(care_site_filter.care_site_level.unique()).intersection( + CARE_SITE_LEVEL_NAMES.values() + ): + extended_care_site_id_to_filter.append( + care_site_filter[ + ["care_site_id", "care_site_level", "care_site_short_name"] + ] + ) + care_site_filter = care_site_filter.merge( + parent_rel, + on="care_site_id", + )[ + [ + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_short_name", + ] + ].rename( + columns={ + "parent_care_site_id": "care_site_id", + "parent_care_site_level": "care_site_level", + "parent_care_site_short_name": "care_site_short_name", + } + ) - extended_pole_care_site = pd.concat( - [pole_care_site, pole_from_uf, pole_from_hospital], ignore_index=True - ).drop_duplicates("care_site_id_pole") - extended_pole_care_site = extended_pole_care_site.rename( - columns={ - "care_site_id_pole": "care_site_id", - "care_site_short_name_pole": "care_site_short_name", - } - ) - extended_hospital_care_site = pd.concat( - [hospital_care_site, hospital_from_pole, hospital_from_uf], ignore_index=True - ).drop_duplicates("care_site_id_hospital") - extended_hospital_care_site = extended_hospital_care_site.rename( - columns={ - "care_site_id_hospital": "care_site_id", - "care_site_short_name_hospital": "care_site_short_name", - } - ) - unsupported_care_site = care_site_filter[ - ~(care_site_filter.care_site_level.isin(CARE_SITE_LEVEL_NAMES.values())) + extended_care_site_id_to_filter = pd.concat( + extended_care_site_id_to_filter + ).drop_duplicates() + unsupported_care_site = extended_care_site_id_to_filter[ + ~( + extended_care_site_id_to_filter.care_site_level.isin( + CARE_SITE_LEVEL_NAMES.values() + ) + ) ] if not unsupported_care_site.empty: logger.warning( @@ -354,59 +261,21 @@ def filter_table_by_care_site( CARE_SITE_LEVEL_NAMES.values(), ) display(unsupported_care_site) + extended_care_site_id_to_filter = list( + extended_care_site_id_to_filter[ + ( + extended_care_site_id_to_filter.care_site_level.isin( + CARE_SITE_LEVEL_NAMES.values() + ) + ) + ].care_site_id.unique() + ) - if not extended_hospital_care_site.empty: - logger.debug( - "The following hospitals {} have been selected from {}.", - extended_hospital_care_site.care_site_short_name.to_list(), - table_name, - ) - if not extended_pole_care_site.empty: - logger.debug( - "The following poles {} have been selected from {}.", - extended_pole_care_site.care_site_short_name.to_list(), - table_name, - ) - if not extended_uf_care_site.empty: - logger.debug( - "The following UF {} have been selected from {}.", - extended_uf_care_site.care_site_short_name.to_list(), - table_name, - ) - - extended_care_site_id_to_filter = pd.concat( - [extended_hospital_care_site, extended_pole_care_site, extended_uf_care_site], - ignore_index=True, - ).care_site_id.to_list() return table_to_filter[ - table_to_filter["care_site_id"].isin(extended_care_site_id_to_filter) + table_to_filter.care_site_id.isin(extended_care_site_id_to_filter) ] -def convert_uc_to_uf( - table: DataFrame, - table_name: str, - care_site_relationship: DataFrame, -): - care_site_rel_uc_to_uf = _get_relationship_table_uc_to_uf( - care_site_relationship=care_site_relationship - ) - care_site_rel_uc_to_uf = to(get_framework(table), care_site_rel_uc_to_uf) - table = table.merge(care_site_rel_uc_to_uf, on="care_site_id", how="left") - table["care_site_id"] = table["care_site_id_uf"].mask( - table["care_site_id_uf"].isna(), table["care_site_id"] - ) - table = table.drop(columns=["care_site_id_uf"]) - logger.debug( - "For level {}, stays of the table {} located in {} have been linked to their corresponding {}", - CARE_SITE_LEVEL_NAMES["UF"], - table_name, - UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"], - CARE_SITE_LEVEL_NAMES["UF"], - ) - return table - - def convert_uf_to_pole( table: DataFrame, table_name: str, @@ -433,88 +302,6 @@ def convert_uf_to_pole( return table -def _get_relationship_table_uc_to_uf( - care_site_relationship: DataFrame, -): - check_columns( - df=care_site_relationship, - required_columns=[ - "care_site_id", - "care_site_level", - "care_site_short_name", - "parent_care_site_id", - "parent_care_site_level", - "parent_care_site_short_name", - ], - ) - - care_site_relationship = care_site_relationship[ - [ - "care_site_id", - "care_site_level", - "care_site_short_name", - "parent_care_site_id", - "parent_care_site_level", - "parent_care_site_short_name", - ] - ] - - uc_care_site = care_site_relationship[ - ( - care_site_relationship["care_site_level"] - == UNSUPPORTED_CARE_SITE_LEVEL_NAMES["UC"] - ) - ] - - care_site_rel_grandparent = care_site_relationship[ - [ - "care_site_id", - "parent_care_site_id", - "parent_care_site_short_name", - "parent_care_site_level", - ] - ].rename( - columns={ - "care_site_id": "parent_care_site_id", - "parent_care_site_id": "grandparent_care_site_id", - "parent_care_site_short_name": "grandparent_care_site_short_name", - "parent_care_site_level": "grandparent_care_site_level", - } - ) - uc_care_site = uc_care_site.merge( - care_site_rel_grandparent, on="parent_care_site_id" - ) - uc_care_site["care_site_id_uf"] = None - uc_care_site["care_site_id_uf"] = uc_care_site["care_site_id_uf"].mask( - uc_care_site["grandparent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["grandparent_care_site_id"], - ) - uc_care_site["care_site_id_uf"] = uc_care_site["care_site_id_uf"].mask( - uc_care_site["parent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["parent_care_site_id"], - ) - uc_care_site["care_site_short_name_uf"] = None - uc_care_site["care_site_short_name_uf"] = uc_care_site[ - "care_site_short_name_uf" - ].mask( - uc_care_site["grandparent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["care_site_short_name"], - ) - uc_care_site["care_site_short_name_uf"] = uc_care_site[ - "care_site_short_name_uf" - ].mask( - uc_care_site["parent_care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"], - uc_care_site["care_site_short_name"], - ) - return uc_care_site[ - [ - "care_site_id", - "care_site_id_uf", - "care_site_short_name_uf", - ] - ].drop_duplicates(["care_site_id", "care_site_id_uf"]) - - def _get_relationship_table_uf_to_hospital( care_site_relationship: DataFrame, ): diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index d0856412..fdf8c5a6 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -145,7 +145,6 @@ def prepare_measurement( ) ) measurement = get_framework(measurement).concat(measurement_by_terminology) - return measurement @@ -273,8 +272,10 @@ def prepare_condition_occurrence( def prepare_care_site( data: Data, - care_site_ids: List[int], - care_site_short_names: List[str], + care_site_ids: Union[int, List[int]], + care_site_short_names: Union[str, List[str]], + care_site_specialties: Union[str, List[str]], + specialties_sets: Union[str, Dict[str, str]], care_site_relationship: pd.DataFrame, ): care_site = data.care_site[ @@ -282,20 +283,33 @@ def prepare_care_site( "care_site_id", "care_site_type_source_value", "care_site_short_name", + "place_of_service_source_value", ] ] care_site = care_site.rename( - columns={"care_site_type_source_value": "care_site_level"} + columns={ + "care_site_type_source_value": "care_site_level", + "place_of_service_source_value": "care_site_specialty", + } ) - if care_site_ids or care_site_short_names: + if care_site_ids or care_site_short_names or care_site_specialties: care_site = filter_table_by_care_site( table_to_filter=care_site, - table_name="care_site", care_site_relationship=care_site_relationship, care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, ) + # Add specialties_set + if specialties_sets: + care_site = filter_table_by_type( + table=care_site, + table_name="care_site", + type_groups=specialties_sets, + source_col="care_site_specialty", + target_col="specialties_set", + ) return care_site @@ -379,7 +393,6 @@ def prepare_visit_detail( data: Data, start_date: datetime, end_date: datetime, - visit_detail_type: str = "PASS UF", ): visit_detail = data.visit_detail[ [ @@ -395,15 +408,13 @@ def prepare_visit_detail( columns={ "visit_detail_id": "visit_id", "visit_detail_start_datetime": "date", + "visit_detail_type_source_value": "visit_detail_type", } ) visit_detail = filter_valid_observations( table=visit_detail, table_name="visit_detail", valid_naming="Actif" ) - visit_detail = visit_detail[ - visit_detail["visit_detail_type_source_value"] == visit_detail_type - ] # Important to filter only "PASS" to remove duplicate visits - visit_detail = visit_detail.drop(columns=["visit_detail_type_source_value"]) + visit_detail = filter_table_by_date( table=visit_detail, table_name="visit_detail", @@ -460,12 +471,14 @@ def prepare_care_site_relationship(data: Data) -> pd.DataFrame: "care_site_id", "care_site_type_source_value", "care_site_short_name", + "place_of_service_source_value", ] ] care_site = to("pandas", care_site) care_site = care_site.rename( columns={ "care_site_type_source_value": "care_site_level", + "place_of_service_source_value": "care_site_specialty", } ) care_site_relationship = care_site.merge( @@ -477,6 +490,7 @@ def prepare_care_site_relationship(data: Data) -> pd.DataFrame: "care_site_level": "parent_care_site_level", "care_site_id": "parent_care_site_id", "care_site_short_name": "parent_care_site_short_name", + "care_site_specialty": "parent_care_site_specialty", } ) logger.debug("Create care site relationship to link UC to UF and UF to Pole") diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index 3751d403..06a938e6 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -9,10 +9,14 @@ "Hospital": "Hôpital", "Pole": "Pôle/DMU", "UF": "Unité Fonctionnelle (UF)", + "UC": "Unité de consultation (UC)", + "UH": "Unité d’hébergement (UH)", } -UNSUPPORTED_CARE_SITE_LEVEL_NAMES = { - "UC": "Unité de consultation (UC)", +VISIT_DETAIL_TYPE = { + "UF": "PASS UF", + "UC": "PASS UC", + "UH": "PASS UH", } @@ -33,16 +37,18 @@ def concatenate_predictor_by_level( if care_site_levels: if not isinstance(care_site_levels, list): care_site_levels = [care_site_levels] - unknown_levels, selected_levels = [], [] + unknown_levels, unavailable_levels, selected_levels = [], [], [] for level in care_site_levels: - if level in predictor_by_level: + if level in predictor_by_level.keys(): predictors_to_concat.append(predictor_by_level[level]) selected_levels.append(level) elif level in CARE_SITE_LEVEL_NAMES.keys(): - predictors_to_concat.append( - predictor_by_level[CARE_SITE_LEVEL_NAMES[level]] - ) - selected_levels.append(level) + raw_level = CARE_SITE_LEVEL_NAMES[level] + if raw_level in predictor_by_level.keys(): + predictors_to_concat.append(predictor_by_level[raw_level]) + selected_levels.append(level) + else: + unavailable_levels.append(level) else: unknown_levels.append(level) @@ -57,6 +63,11 @@ def concatenate_predictor_by_level( list(CARE_SITE_LEVEL_NAMES.values()) + list(CARE_SITE_LEVEL_NAMES.keys()), ) + if unavailable_levels: + logger.warning( + "The following levels: {} are not available for this probe.", + unavailable_levels, + ) else: predictors_to_concat = list(predictor_by_level.values()) logger.debug( diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 3a6e88a8..5f85d4e1 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -11,6 +11,7 @@ ) from edsteva.probes.utils.utils import ( CARE_SITE_LEVEL_NAMES, + VISIT_DETAIL_TYPE, concatenate_predictor_by_level, hospital_only, ) @@ -27,9 +28,11 @@ def compute_completeness_predictor_per_visit( care_site_levels: List[str], stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], - care_site_short_names: List[str] = None, - stay_durations: List[float] = None, - hdfs_user_path: str = None, + care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], + stay_durations: List[float], + hdfs_user_path: str, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -62,10 +65,12 @@ def compute_completeness_predictor_per_visit( ) care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + care_site_relationship=care_site_relationship, + specialties_sets=specialties_sets, ) hospital_visit = get_hospital_visit( @@ -86,6 +91,22 @@ def compute_completeness_predictor_per_visit( ) visit_predictor_by_level[uf_name] = uf_visit + uc_name = CARE_SITE_LEVEL_NAMES["UC"] + uc_visit = get_uc_visit( + visit_occurrence, + visit_detail, + care_site, + ) + visit_predictor_by_level[uc_name] = uc_visit + + uh_name = CARE_SITE_LEVEL_NAMES["UH"] + uh_visit = get_uh_visit( + visit_occurrence, + visit_detail, + care_site, + ) + visit_predictor_by_level[uh_name] = uh_visit + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] pole_visit = get_pole_visit( uf_visit, @@ -152,28 +173,58 @@ def get_hospital_visit(visit_occurrence, care_site): hospital_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Hospital"] ] if is_koalas(hospital_visit): - hospital_visit.spark.cache() + hospital_visit = hospital_visit.spark.cache() return hospital_visit def get_uf_visit(visit_occurrence, visit_detail, care_site): - visit_detail = visit_detail.merge( + uf_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UF"]] + uf_visit = uf_visit.merge( visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], on="visit_occurrence_id", ).drop(columns="visit_occurrence_id") - - uf_visit = visit_detail.merge(care_site, on="care_site_id") + uf_visit = uf_visit.merge(care_site, on="care_site_id") uf_visit = uf_visit[uf_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UF"]] if is_koalas(uf_visit): - uf_visit.spark.cache() + uf_visit = uf_visit.spark.cache() return uf_visit +def get_uc_visit(visit_occurrence, visit_detail, care_site): + uc_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UC"]] + uc_visit = uc_visit.merge( + visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], + on="visit_occurrence_id", + ).drop(columns="visit_occurrence_id") + uc_visit = uc_visit.merge(care_site, on="care_site_id") + uc_visit = uc_visit[uc_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UC"]] + if is_koalas(uc_visit): + uc_visit = uc_visit.spark.cache() + + return uc_visit + + +def get_uh_visit(visit_occurrence, visit_detail, care_site): + uh_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UH"]] + uh_visit = uh_visit.merge( + visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], + on="visit_occurrence_id", + ).drop(columns="visit_occurrence_id") + uh_visit = uh_visit.merge(care_site, on="care_site_id") + uh_visit = uh_visit[uh_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["UH"]] + if is_koalas(uh_visit): + uh_visit = uh_visit.spark.cache() + + return uh_visit + + def get_pole_visit(uf_visit, care_site, care_site_relationship): pole_visit = convert_uf_to_pole( - table=uf_visit.drop(columns=["care_site_short_name", "care_site_level"]), + table=uf_visit.drop( + columns=["care_site_short_name", "care_site_level", "care_site_specialty"] + ), table_name="uf_visit", care_site_relationship=care_site_relationship, ) @@ -183,6 +234,6 @@ def get_pole_visit(uf_visit, care_site, care_site_relationship): pole_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Pole"] ] if is_koalas(pole_visit): - pole_visit.spark.cache() + pole_visit = pole_visit.spark.cache() return pole_visit diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 25127894..a6339207 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -33,7 +33,14 @@ def __init__( _viz_config: Dict[str, str] = None, ): self._completeness_predictor = completeness_predictor - self._index = ["care_site_level", "stay_type", "length_of_stay", "care_site_id"] + self._index = [ + "care_site_level", + "stay_type", + "length_of_stay", + "care_site_id", + "care_site_specialty", + "specialties_set", + ] if _viz_config is None: self._viz_config = {} @@ -47,6 +54,8 @@ def compute_process( stay_types: Union[str, Dict[str, str]], care_site_ids: List[int], care_site_short_names: List[str] = None, + care_site_specialties: List[str] = None, + specialties_sets: Union[str, Dict[str, str]] = None, stay_durations: List[float] = None, hdfs_user_path: str = None, **kwargs, @@ -72,6 +81,8 @@ def compute_process( care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` """ + if specialties_sets is None: + self._index.remove("specialties_set") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -82,6 +93,8 @@ def compute_process( stay_types=stay_types, care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, stay_durations=stay_durations, hdfs_user_path=hdfs_user_path, **kwargs, diff --git a/edsteva/probes/visit/viz_configs/per_visit/defaults.py b/edsteva/probes/visit/viz_configs/per_visit/defaults.py index 65424a98..48a743f2 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/visit/viz_configs/per_visit/defaults.py @@ -43,6 +43,16 @@ "field": "care_site_short_name", "sort": "-x", }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, ], x=[ dict( diff --git a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py index 7d0a259f..b570306d 100644 --- a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py +++ b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py @@ -32,6 +32,7 @@ def normalized_probe_dashboard( fitted_model: BaseModel, care_site_level: str = CARE_SITE_LEVEL_NAMES["Hospital"], save_path: str = None, + remove_singleton_bar_chart: bool = True, **kwargs, ): r"""Displays an interactive chart with: @@ -121,10 +122,14 @@ def normalized_probe_dashboard( horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) selections = dict( diff --git a/edsteva/viz/dashboards/probe/fitted_probe.py b/edsteva/viz/dashboards/probe/fitted_probe.py index 61472735..3c6e3dca 100644 --- a/edsteva/viz/dashboards/probe/fitted_probe.py +++ b/edsteva/viz/dashboards/probe/fitted_probe.py @@ -21,8 +21,9 @@ def fitted_probe_dashboard( predictor: pd.DataFrame, probe_config: Dict[str, str], model_config: Dict[str, str], - legend_predictor: str = "Predictor c(t)", - legend_model: str = "Model f(t)", + legend_predictor: str, + legend_model: str, + remove_singleton_bar_chart: bool, ): r"""Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] @@ -71,10 +72,14 @@ def fitted_probe_dashboard( horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) selections = dict( diff --git a/edsteva/viz/dashboards/probe/probe.py b/edsteva/viz/dashboards/probe/probe.py index 182394ad..94ec3670 100644 --- a/edsteva/viz/dashboards/probe/probe.py +++ b/edsteva/viz/dashboards/probe/probe.py @@ -18,6 +18,7 @@ def probe_only_dashboard( predictor: pd.DataFrame, probe_config: Dict[str, str], + remove_singleton_bar_chart: bool, ): """Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] @@ -54,10 +55,14 @@ def probe_only_dashboard( horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) selections = dict( date=time_selection, diff --git a/edsteva/viz/dashboards/probe/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py index 5f648a20..ded0f95f 100644 --- a/edsteva/viz/dashboards/probe/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -18,6 +18,7 @@ def probe_dashboard( save_path: str = None, legend_predictor: str = "Predictor c(t)", legend_model: str = "Model f(t)", + remove_singleton_bar_chart: bool = True, **kwargs, ): r"""Displays an interactive chart with: @@ -84,11 +85,13 @@ def probe_dashboard( model_config=model_config, legend_predictor=legend_predictor, legend_model=legend_model, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) else: chart = probe_only_dashboard( predictor=predictor, probe_config=probe_config, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) vis_probe = "id" + uuid.uuid4().hex diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py index 333f3175..b643f83a 100644 --- a/edsteva/viz/plots/estimates_densities/estimates_densities.py +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -1,6 +1,8 @@ import uuid from copy import deepcopy +from datetime import datetime from functools import reduce +from typing import List, Union import altair as alt @@ -10,6 +12,7 @@ add_interactive_selection, concatenate_charts, configure_style, + filter_predictor, generate_horizontal_bar_charts, generate_vertical_bar_charts, save_html, @@ -20,6 +23,13 @@ def estimates_densities_plot( probe: BaseProbe, fitted_model: BaseModel, save_path: str = None, + care_site_level: str = None, + stay_type: List[str] = None, + care_site_id: List[int] = None, + start_date: Union[datetime, str] = None, + end_date: Union[datetime, str] = None, + care_site_short_name: List[int] = None, + remove_singleton_bar_chart: bool = True, **kwargs, ): r"""Displays the density plot with the associated box plot of each estimate and metric computed in the input model. It can help you to set the thresholds. @@ -42,7 +52,27 @@ def estimates_densities_plot( alt.data_transformers.disable_max_rows() predictor = probe.predictor.copy() + predictor = filter_predictor( + predictor=predictor, + care_site_level=care_site_level, + stay_type=stay_type, + care_site_id=care_site_id, + care_site_short_name=care_site_short_name, + start_date=start_date, + end_date=end_date, + **kwargs, + ) estimates = fitted_model.estimates.copy() + estimates = filter_predictor( + predictor=predictor, + care_site_level=care_site_level, + stay_type=stay_type, + care_site_id=care_site_id, + care_site_short_name=care_site_short_name, + start_date=None, + end_date=None, + **kwargs, + ) predictor = probe.add_names_columns(predictor) estimates = probe.add_names_columns(estimates) probe_config = deepcopy(probe.get_viz_config("estimates_densities_plot")) @@ -68,7 +98,6 @@ def estimates_densities_plot( estimate, as_=[estimate, "Density"], extent=[min_value, max_value], - **kwargs, ) .mark_area() .encode( @@ -154,10 +183,14 @@ def estimates_densities_plot( horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, + predictor=predictor, + remove_singleton_bar_chart=remove_singleton_bar_chart, ) selections = dict( diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index 55f97e0e..d8ad7f47 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -105,10 +105,16 @@ def generate_time_line( def generate_horizontal_bar_charts( base: alt.Chart, horizontal_bar_charts_config: Dict[str, str], + predictor: pd.DataFrame, + remove_singleton_bar_chart: bool, ): horizontal_bar_charts = {} y_variables_selections = {} for y_variable in horizontal_bar_charts_config["y"]: + if y_variable["field"] not in predictor.columns or ( + remove_singleton_bar_chart and predictor[y_variable["field"]].nunique() <= 1 + ): + continue y_variable_bar_charts = [] y_variable_selection = alt.selection_multi(fields=[y_variable["field"]]) y_variables_selections[y_variable["field"]] = y_variable_selection @@ -143,10 +149,16 @@ def generate_horizontal_bar_charts( def generate_vertical_bar_charts( base: alt.Chart, vertical_bar_charts_config: Dict[str, str], + predictor: pd.DataFrame, + remove_singleton_bar_chart: bool, ): vertical_bar_charts = {} x_variables_selections = {} for x_variable in vertical_bar_charts_config["x"]: + if x_variable["field"] not in predictor.columns or ( + remove_singleton_bar_chart and predictor[x_variable["field"]].nunique() <= 1 + ): + continue x_variable_bar_charts = [] x_variable_selection = alt.selection_multi(fields=[x_variable["field"]]) x_variables_selections[x_variable["field"]] = x_variable_selection From 8c1a3fd42dc468606576fde1c66dfa7a93e1ddf4 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 31 Mar 2023 18:38:43 +0200 Subject: [PATCH 021/127] Get child care site in the filter care site --- edsteva/probes/base.py | 3 +- edsteva/probes/utils/filter_df.py | 70 ++++++++++++------- .../normalized_probe/normalized_probe.py | 1 - edsteva/viz/dashboards/probe/wrapper.py | 1 - .../estimates_densities.py | 2 - .../normalized_probe/normalized_probe.py | 1 - edsteva/viz/plots/probe/wrapper.py | 3 - 7 files changed, 47 insertions(+), 34 deletions(-) diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index ef58d87a..f21c3f88 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -267,8 +267,9 @@ def compute( self.impute_missing_date( only_impute_per_care_site=only_impute_per_care_site, ) - self.cache_predictor() self.care_site_relationship = care_site_relationship + self.predictor = self.add_names_columns(self.predictor) + self.cache_predictor() def reset_predictor( self, diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index e973ac10..77fcc20b 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -3,7 +3,6 @@ import numpy as np import pandas as pd -from IPython.display import display from loguru import logger from edsteva.utils.checks import check_columns @@ -182,7 +181,7 @@ def filter_table_by_care_site( care_site_ids = [care_site_ids] care_site_filter.append( care_site[care_site["care_site_id"].isin(care_site_ids)][ - ["care_site_id", "care_site_level", "care_site_short_name"] + ["care_site_id", "care_site_level"] ] ) if care_site_short_names: @@ -190,7 +189,7 @@ def filter_table_by_care_site( care_site_short_names = [care_site_short_names] care_site_filter.append( care_site[care_site["care_site_short_name"].isin(care_site_short_names)][ - ["care_site_id", "care_site_level", "care_site_short_name"] + ["care_site_id", "care_site_level"] ] ) if care_site_specialties: @@ -198,7 +197,7 @@ def filter_table_by_care_site( care_site_specialties = [care_site_specialties] care_site_filter.append( care_site[care_site["care_site_specialty"].isin(care_site_specialties)][ - ["care_site_id", "care_site_level", "care_site_short_name"] + ["care_site_id", "care_site_level"] ] ) if care_site_filter: @@ -210,6 +209,8 @@ def filter_table_by_care_site( "care_site_ids or care_site_short_names or care_site_specialties must be provided" ) extended_care_site_id_to_filter = [] + + # Parent care site to get parent_rel = care_site_relationship[ ~care_site_relationship.parent_care_site_id.isna() ][ @@ -217,50 +218,69 @@ def filter_table_by_care_site( "care_site_id", "parent_care_site_id", "parent_care_site_level", - "parent_care_site_short_name", ] ] - while set(care_site_filter.care_site_level.unique()).intersection( + parent_care_site_filter = care_site_filter.copy() + while set(parent_care_site_filter.care_site_level.unique()).intersection( CARE_SITE_LEVEL_NAMES.values() ): extended_care_site_id_to_filter.append( - care_site_filter[ - ["care_site_id", "care_site_level", "care_site_short_name"] - ] + parent_care_site_filter[["care_site_id", "care_site_level"]] ) - care_site_filter = care_site_filter.merge( + parent_care_site_filter = parent_care_site_filter.merge( parent_rel, on="care_site_id", )[ [ "parent_care_site_id", "parent_care_site_level", - "parent_care_site_short_name", ] ].rename( columns={ "parent_care_site_id": "care_site_id", "parent_care_site_level": "care_site_level", - "parent_care_site_short_name": "care_site_short_name", + } + ) + + # Child care site to get + child_rel = care_site_relationship[~care_site_relationship.care_site_id.isna()][ + [ + "care_site_id", + "care_site_level", + "parent_care_site_id", + ] + ].rename( + columns={ + "care_site_id": "child_care_site_id", + "care_site_level": "child_care_site_level", + "parent_care_site_id": "care_site_id", + } + ) + child_care_site_filter = care_site_filter.copy() + while set(child_care_site_filter.care_site_level.unique()).intersection( + CARE_SITE_LEVEL_NAMES.values() + ): + extended_care_site_id_to_filter.append( + child_care_site_filter[["care_site_id", "care_site_level"]] + ) + child_care_site_filter = child_care_site_filter.merge( + child_rel, + on="care_site_id", + )[ + [ + "child_care_site_id", + "child_care_site_level", + ] + ].rename( + columns={ + "child_care_site_id": "care_site_id", + "child_care_site_level": "care_site_level", } ) extended_care_site_id_to_filter = pd.concat( extended_care_site_id_to_filter ).drop_duplicates() - unsupported_care_site = extended_care_site_id_to_filter[ - ~( - extended_care_site_id_to_filter.care_site_level.isin( - CARE_SITE_LEVEL_NAMES.values() - ) - ) - ] - if not unsupported_care_site.empty: - logger.warning( - "The following care site ids are not supported because the associated care site levels are not in {}.", - CARE_SITE_LEVEL_NAMES.values(), - ) - display(unsupported_care_site) extended_care_site_id_to_filter = list( extended_care_site_id_to_filter[ ( diff --git a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py index b570306d..98368294 100644 --- a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py +++ b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py @@ -91,7 +91,6 @@ def normalized_probe_dashboard( predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, **kwargs ) - predictor = probe.add_names_columns(predictor) for estimate in fitted_model._coefs + fitted_model._metrics: if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") diff --git a/edsteva/viz/dashboards/probe/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py index ded0f95f..e2814a83 100644 --- a/edsteva/viz/dashboards/probe/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -70,7 +70,6 @@ def probe_dashboard( predictor = fitted_model.predict(probe) else: predictor = probe.predictor.copy() - predictor = probe.add_names_columns(predictor) predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py index b643f83a..685ff49d 100644 --- a/edsteva/viz/plots/estimates_densities/estimates_densities.py +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -73,8 +73,6 @@ def estimates_densities_plot( end_date=None, **kwargs, ) - predictor = probe.add_names_columns(predictor) - estimates = probe.add_names_columns(estimates) probe_config = deepcopy(probe.get_viz_config("estimates_densities_plot")) vertical_bar_charts_config = probe_config["vertical_bar_charts"] horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] diff --git a/edsteva/viz/plots/normalized_probe/normalized_probe.py b/edsteva/viz/plots/normalized_probe/normalized_probe.py index 51f8caf9..96c8b5a0 100644 --- a/edsteva/viz/plots/normalized_probe/normalized_probe.py +++ b/edsteva/viz/plots/normalized_probe/normalized_probe.py @@ -93,7 +93,6 @@ def normalized_probe_plot( predictor = probe.predictor.copy() estimates = fitted_model.estimates.copy() - predictor = probe.add_names_columns(predictor) indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) predictor = predictor.merge(estimates, on=probe._index) diff --git a/edsteva/viz/plots/probe/wrapper.py b/edsteva/viz/plots/probe/wrapper.py index ce7bcdba..051aaed8 100644 --- a/edsteva/viz/plots/probe/wrapper.py +++ b/edsteva/viz/plots/probe/wrapper.py @@ -81,7 +81,6 @@ def probe_plot( probe_config = deepcopy(probe.get_viz_config("probe_plot")) chart_style = probe_config["chart_style"] predictor = probe.predictor.copy() - predictor = probe.add_names_columns(predictor) indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) if fitted_model: @@ -89,8 +88,6 @@ def probe_plot( else: predictor = probe.predictor.copy() - predictor = probe.add_names_columns(predictor) - predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, From 29b534fad2d35d51088797ece84bf06a0cec39a9 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 13 Apr 2023 18:32:54 +0200 Subject: [PATCH 022/127] Hot fix --- .../probes/note/completeness_predictors/per_visit.py | 12 ++++++------ edsteva/probes/utils/filter_df.py | 2 +- edsteva/probes/utils/prepare_df.py | 4 ++-- edsteva/probes/utils/utils.py | 3 +-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index aa89971e..6aaea449 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -95,11 +95,11 @@ def compute_completeness_predictor_per_visit( visit_detail = prepare_visit_detail(data, start_date, end_date) uf_visit, uc_visit, uh_visit = get_visit_detail( - extra_data, - note, - visit_occurrence, - visit_detail, - care_site, + extra_data=extra_data, + note=note, + visit_occurrence=visit_occurrence, + visit_detail=visit_detail, + care_site=care_site, ) uf_name = CARE_SITE_LEVEL_NAMES["UF"] note_predictor_by_level[uf_name] = uf_visit @@ -203,7 +203,7 @@ def get_visit_detail( how="left", ).drop(columns="visit_occurrence_id") - note_detail = visit_detail.merge(care_site, on="care_site_id") + note_detail = note_detail.merge(care_site, on="care_site_id") uf_name = CARE_SITE_LEVEL_NAMES["UF"] uf_visit = note_detail[note_detail["care_site_level"] == uf_name] diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index 77fcc20b..f9bb9ad7 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -78,7 +78,7 @@ def filter_table_by_date( ): check_columns(df=table, required_columns=["date"]) - table.dropna(subset=["date"], inplace=True) + table = table.dropna(subset=["date"]) logger.debug("Droping observations with missing date in table {}.", table_name) table["date"] = table["date"].astype("datetime64") start_date = pd.to_datetime(start_date) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index fdf8c5a6..396bd35d 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -383,8 +383,8 @@ def prepare_note_care_site(extra_data: Data, note: DataFrame): id_vars="note_id", value_name="care_site_source_value", ) - note = note.merge(note_ref, on="note_id") - note = note.merge(care_site_ref, on="care_site_source_value") + note_ref = note_ref.merge(care_site_ref, on="care_site_source_value") + note = note.merge(note_ref[["note_id", "care_site_id"]], on="note_id") return note diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index 06a938e6..94464b3f 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -83,5 +83,4 @@ def concatenate_predictor_by_level( ) ) - framework = get_framework(predictors_to_concat[0]) - return framework.concat(predictors_to_concat) + return get_framework(predictors_to_concat[0]).concat(predictors_to_concat) From 9e5469443ffbfc2318b9429d52121e2169da6c45 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 13 Apr 2023 19:17:37 +0200 Subject: [PATCH 023/127] Hot fix --- .../probes/condition/completeness_predictors/per_visit.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index c51be0be..274b20b0 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -220,15 +220,14 @@ def get_uf_visit( condition_uf["has_condition"] = True visit_detail = visit_detail.merge( - visit_occurrence[["visit_occurrence_id", "stay_type"]], + visit_occurrence[["visit_occurrence_id", "stay_type", "length_of_stay"]], on="visit_occurrence_id", ) visit_detail = visit_detail.merge( condition_uf, on="visit_id", how="left", - ) - visit_detail = visit_detail.drop(columns=["visit_occurrence_id"]) + ).drop(columns=["visit_occurrence_id"]) uf_visit = visit_detail.merge(care_site, on="care_site_id") From fa2b68c1c568402f897b76815260b2985984ac9a Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Apr 2023 14:29:53 +0200 Subject: [PATCH 024/127] Add n_result to viz --- .../probes/biology/viz_configs/__init__.py | 17 +- .../viz_configs/n_measurement/__init__.py | 5 + .../viz_configs/n_measurement/defaults.py | 215 +++++++++++++++++ .../n_measurement/estimates_densities_plot.py | 14 ++ .../normalized_probe_dashboard.py | 24 ++ .../n_measurement/normalized_probe_plot.py | 10 + .../n_measurement/probe_dashboard.py | 21 ++ .../viz_configs/n_measurement/probe_plot.py | 9 + .../probes/condition/viz_configs/__init__.py | 14 +- .../viz_configs/n_condition/__init__.py | 5 + .../viz_configs/n_condition/defaults.py | 228 ++++++++++++++++++ .../n_condition/estimates_densities_plot.py | 11 + .../n_condition/normalized_probe_dashboard.py | 21 ++ .../n_condition/normalized_probe_plot.py | 10 + .../n_condition/probe_dashboard.py | 18 ++ .../viz_configs/n_condition/probe_plot.py | 9 + edsteva/probes/note/viz_configs/__init__.py | 12 +- .../note/viz_configs/n_note/__init__.py | 5 + .../note/viz_configs/n_note/defaults.py | 213 ++++++++++++++++ .../n_note/estimates_densities_plot.py | 11 + .../n_note/normalized_probe_dashboard.py | 21 ++ .../n_note/normalized_probe_plot.py | 10 + .../viz_configs/n_note/probe_dashboard.py | 18 ++ .../note/viz_configs/n_note/probe_plot.py | 9 + edsteva/probes/visit/viz_configs/__init__.py | 14 +- .../visit/viz_configs/n_visit/__init__.py | 5 + .../visit/viz_configs/n_visit/defaults.py | 199 +++++++++++++++ .../n_visit/estimates_densities_plot.py | 11 + .../n_visit/normalized_probe_dashboard.py | 21 ++ .../n_visit/normalized_probe_plot.py | 10 + .../viz_configs/n_visit/probe_dashboard.py | 18 ++ .../visit/viz_configs/n_visit/probe_plot.py | 9 + 32 files changed, 1205 insertions(+), 12 deletions(-) create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/__init__.py create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/defaults.py create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py create mode 100644 edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/__init__.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/defaults.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py create mode 100644 edsteva/probes/condition/viz_configs/n_condition/probe_plot.py create mode 100644 edsteva/probes/note/viz_configs/n_note/__init__.py create mode 100644 edsteva/probes/note/viz_configs/n_note/defaults.py create mode 100644 edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py create mode 100644 edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py create mode 100644 edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py create mode 100644 edsteva/probes/note/viz_configs/n_note/probe_dashboard.py create mode 100644 edsteva/probes/note/viz_configs/n_note/probe_plot.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/__init__.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/defaults.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py create mode 100644 edsteva/probes/visit/viz_configs/n_visit/probe_plot.py diff --git a/edsteva/probes/biology/viz_configs/__init__.py b/edsteva/probes/biology/viz_configs/__init__.py index f8e1e6be..a5af258a 100644 --- a/edsteva/probes/biology/viz_configs/__init__.py +++ b/edsteva/probes/biology/viz_configs/__init__.py @@ -1,6 +1,6 @@ import catalogue -from edsteva.probes.biology.viz_configs import per_measurement +from edsteva.probes.biology.viz_configs import n_measurement, per_measurement normalized_probe_dashboard = catalogue.create( "edsteva.probes.biology.viz_configs", "normalized_probe_dashboard" @@ -9,6 +9,10 @@ "per_measurement_default", func=per_measurement.get_normalized_probe_dashboard_config, ) +normalized_probe_dashboard.register( + "per_measurement_default", + func=per_measurement.get_normalized_probe_dashboard_config, +) probe_dashboard = catalogue.create( @@ -17,13 +21,16 @@ probe_dashboard.register( "per_measurement_default", func=per_measurement.get_probe_dashboard_config ) - +probe_dashboard.register("n_measurement", func=n_measurement.get_probe_dashboard_config) estimates_densities_plot = catalogue.create( "edsteva.probes.biology.viz_configs", "estimates_densities_plot" ) estimates_densities_plot.register( "per_measurement_default", func=per_measurement.get_estimates_densities_plot_config ) +estimates_densities_plot.register( + "n_measurement", func=n_measurement.get_estimates_densities_plot_config +) normalized_probe_plot = catalogue.create( "edsteva.probes.biology.viz_configs", "normalized_probe_plot" @@ -31,12 +38,14 @@ normalized_probe_plot.register( "per_measurement_default", func=per_measurement.get_normalized_probe_plot_config ) - +normalized_probe_plot.register( + "n_measurement", func=n_measurement.get_normalized_probe_plot_config +) probe_plot = catalogue.create("edsteva.probes.biology.viz_configs", "probe_plot") probe_plot.register( "per_measurement_default", func=per_measurement.get_probe_plot_config ) - +probe_plot.register("n_measurement", func=n_measurement.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, probe_dashboard=probe_dashboard, diff --git a/edsteva/probes/biology/viz_configs/n_measurement/__init__.py b/edsteva/probes/biology/viz_configs/n_measurement/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/biology/viz_configs/n_measurement/defaults.py b/edsteva/probes/biology/viz_configs/n_measurement/defaults.py new file mode 100644 index 00000000..dfb693d0 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/defaults.py @@ -0,0 +1,215 @@ +from typing import List + +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +def get_horizontal_bar_charts(standard_terminologies: List[str]): + return dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, + {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, + ] + + [ + { + "title": "{} concept".format(terminology), + "field": "{}_concept_name".format(terminology), + "sort": "-x", + } + for terminology in standard_terminologies + ], + x=[ + dict( + x=alt.X( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_measurement):Q", + format=",", + ), + sort={ + "field": "n_measurement", + "op": "sum", + "order": "descending", + }, + ), + ], + ) + + +main_chart = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_measurement="sum(n_measurement)", + groupby=["value", "date"], + ), + dict( + max_measurement="max(sum_measurement)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_measurement):Q", + title="Number of measurements", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py new file mode 100644 index 00000000..7bf5c084 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py @@ -0,0 +1,14 @@ +from .defaults import chart_style, get_horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py new file mode 100644 index 00000000..af00c552 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py @@ -0,0 +1,24 @@ +from .defaults import ( + chart_style, + error_line, + get_horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py b/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py new file mode 100644 index 00000000..f94d63f2 --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + get_horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + horizontal_bar_charts = get_horizontal_bar_charts( + standard_terminologies=self._standard_terminologies.copy() + ) + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py b/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/__init__.py b/edsteva/probes/condition/viz_configs/__init__.py index f929136e..7a52392d 100644 --- a/edsteva/probes/condition/viz_configs/__init__.py +++ b/edsteva/probes/condition/viz_configs/__init__.py @@ -1,6 +1,6 @@ import catalogue -from edsteva.probes.condition.viz_configs import per_condition, per_visit +from edsteva.probes.condition.viz_configs import n_condition, per_condition, per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.condition.viz_configs", "normalized_probe_dashboard" @@ -13,6 +13,9 @@ "per_condition_default", func=per_condition.get_normalized_probe_dashboard_config ) +normalized_probe_dashboard.register( + "n_condition", func=n_condition.get_normalized_probe_dashboard_config +) probe_dashboard = catalogue.create( "edsteva.probes.condition.viz_configs", "probe_dashboard" ) @@ -20,6 +23,7 @@ probe_dashboard.register( "per_condition_default", func=per_condition.get_probe_dashboard_config ) +probe_dashboard.register("n_condition", func=n_condition.get_probe_dashboard_config) estimates_densities_plot = catalogue.create( "edsteva.probes.condition.viz_configs", "estimates_densities_plot" @@ -30,6 +34,9 @@ estimates_densities_plot.register( "per_condition_default", func=per_condition.get_estimates_densities_plot_config ) +estimates_densities_plot.register( + "n_condition", func=n_condition.get_estimates_densities_plot_config +) normalized_probe_plot = catalogue.create( "edsteva.probes.condition.viz_configs", "normalized_probe_plot" @@ -40,10 +47,13 @@ normalized_probe_plot.register( "per_condition_default", func=per_condition.get_normalized_probe_plot_config ) - +normalized_probe_plot.register( + "n_condition", func=n_condition.get_normalized_probe_plot_config +) probe_plot = catalogue.create("edsteva.probes.condition.viz_configs", "probe_plot") probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) probe_plot.register("per_condition_default", func=per_condition.get_probe_plot_config) +probe_plot.register("n_condition", func=n_condition.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, diff --git a/edsteva/probes/condition/viz_configs/n_condition/__init__.py b/edsteva/probes/condition/viz_configs/n_condition/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/n_condition/defaults.py b/edsteva/probes/condition/viz_configs/n_condition/defaults.py new file mode 100644 index 00000000..cf8615d5 --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/defaults.py @@ -0,0 +1,228 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Source system", + "field": "source_system", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Condition type", + "field": "condition_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Diag type", + "field": "diag_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_condition):Q", + format=",", + ), + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_condition):Q", + format=",", + ), + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_condition="sum(n_condition)", + groupby=["value", "date"], + ), + dict( + max_condition="max(sum_condition)", + groupby=["value"], + ), + ], + calculates=[ + dict( + normalized_c=(alt.datum.sum_condition / alt.datum.max_condition) + / alt.datum.c_0 + ) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_condition", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_condition):Q", + title="Number of recorded diagnostics", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py b/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py b/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py b/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/note/viz_configs/__init__.py b/edsteva/probes/note/viz_configs/__init__.py index 3999e677..5a2d104c 100644 --- a/edsteva/probes/note/viz_configs/__init__.py +++ b/edsteva/probes/note/viz_configs/__init__.py @@ -1,6 +1,6 @@ import catalogue -from edsteva.probes.note.viz_configs import per_note, per_visit +from edsteva.probes.note.viz_configs import n_note, per_note, per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.note.viz_configs", "normalized_probe_dashboard" @@ -11,10 +11,13 @@ normalized_probe_dashboard.register( "per_note_default", func=per_note.get_normalized_probe_dashboard_config ) - +normalized_probe_dashboard.register( + "n_note", func=n_note.get_normalized_probe_dashboard_config +) probe_dashboard = catalogue.create("edsteva.probes.note.viz_configs", "probe_dashboard") probe_dashboard.register("per_visit_default", func=per_visit.get_probe_dashboard_config) probe_dashboard.register("per_note_default", func=per_note.get_probe_dashboard_config) +probe_dashboard.register("n_note", func=n_note.get_probe_dashboard_config) estimates_densities_plot = catalogue.create( "edsteva.probes.note.viz_configs", "estimates_densities_plot" @@ -25,6 +28,9 @@ estimates_densities_plot.register( "per_note_default", func=per_note.get_estimates_densities_plot_config ) +estimates_densities_plot.register( + "n_note", func=n_note.get_estimates_densities_plot_config +) normalized_probe_plot = catalogue.create( "edsteva.probes.note.viz_configs", "normalized_probe_plot" @@ -35,10 +41,12 @@ normalized_probe_plot.register( "per_note_default", func=per_note.get_normalized_probe_plot_config ) +normalized_probe_plot.register("n_note", func=n_note.get_normalized_probe_plot_config) probe_plot = catalogue.create("edsteva.probes.note.viz_configs", "probe_plot") probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) probe_plot.register("per_note_default", func=per_note.get_probe_plot_config) +probe_plot.register("n_note", func=n_note.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, diff --git a/edsteva/probes/note/viz_configs/n_note/__init__.py b/edsteva/probes/note/viz_configs/n_note/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/note/viz_configs/n_note/defaults.py b/edsteva/probes/note/viz_configs/n_note/defaults.py new file mode 100644 index 00000000..18dfd860 --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/defaults.py @@ -0,0 +1,213 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Note type", + "field": "note_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_note):Q", + format=",", + ), + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_note):Q", + format=",", + ), + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_note="sum(n_note)", + groupby=["value", "date"], + ), + dict( + max_note="max(sum_note)", + groupby=["value"], + ), + ], + calculates=[ + dict(normalized_c=(alt.datum.sum_note / alt.datum.max_note) / alt.datum.c_0) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={ + "field": "n_note", + "op": "sum", + "order": "descending", + }, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_note):Q", + title="Number of discharge summaries", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py b/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py b/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py b/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py b/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/note/viz_configs/n_note/probe_plot.py b/edsteva/probes/note/viz_configs/n_note/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/note/viz_configs/n_note/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config diff --git a/edsteva/probes/visit/viz_configs/__init__.py b/edsteva/probes/visit/viz_configs/__init__.py index 894fc3a7..893c88b8 100644 --- a/edsteva/probes/visit/viz_configs/__init__.py +++ b/edsteva/probes/visit/viz_configs/__init__.py @@ -1,6 +1,6 @@ import catalogue -from edsteva.probes.visit.viz_configs import per_visit +from edsteva.probes.visit.viz_configs import n_visit, per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.visit.viz_configs", "normalized_probe_dashboard" @@ -8,12 +8,15 @@ normalized_probe_dashboard.register( "per_visit_default", func=per_visit.get_normalized_probe_dashboard_config ) - +normalized_probe_dashboard.register( + "n_visit", func=n_visit.get_normalized_probe_dashboard_config +) probe_dashboard = catalogue.create( "edsteva.probes.visit.viz_configs", "probe_dashboard" ) probe_dashboard.register("per_visit_default", func=per_visit.get_probe_dashboard_config) +probe_dashboard.register("n_visit", func=n_visit.get_probe_dashboard_config) estimates_densities_plot = catalogue.create( "edsteva.probes.visit.viz_configs", "estimates_densities_plot" @@ -21,16 +24,19 @@ estimates_densities_plot.register( "per_visit_default", func=per_visit.get_estimates_densities_plot_config ) - +estimates_densities_plot.register( + "n_visit", func=n_visit.get_estimates_densities_plot_config +) normalized_probe_plot = catalogue.create( "edsteva.probes.visit.viz_configs", "normalized_probe_plot" ) normalized_probe_plot.register( "per_visit_default", func=per_visit.get_normalized_probe_plot_config ) - +normalized_probe_plot.register("n_visit", func=n_visit.get_normalized_probe_plot_config) probe_plot = catalogue.create("edsteva.probes.visit.viz_configs", "probe_plot") probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) +probe_plot.register("n_visit", func=n_visit.get_probe_plot_config) viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, diff --git a/edsteva/probes/visit/viz_configs/n_visit/__init__.py b/edsteva/probes/visit/viz_configs/n_visit/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/visit/viz_configs/n_visit/defaults.py b/edsteva/probes/visit/viz_configs/n_visit/defaults.py new file mode 100644 index 00000000..e61aa34e --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/defaults.py @@ -0,0 +1,199 @@ +import altair as alt + +vertical_bar_charts = dict( + x=[ + { + "title": "Stay type", + "field": "stay_type", + "type": "nominal", + "sort": "-y", + }, + { + "title": "Length of stay", + "field": "length_of_stay", + "type": "nominal", + "sort": "-y", + }, + ], + y=[ + dict( + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], +) + + +horizontal_bar_charts = dict( + y=[ + { + "title": "Care site", + "field": "care_site_short_name", + "sort": "-x", + }, + { + "title": "Care site specialty", + "field": "care_site_specialty", + "sort": "-x", + }, + { + "title": "Specialties-set", + "field": "specialties_set", + "sort": "-x", + }, + ], + x=[ + dict( + x=alt.X( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + tooltip=alt.Tooltip( + "sum(n_visit):Q", + format=",", + ), + sort={ + "field": "n_visit", + "op": "sum", + "order": "descending", + }, + ), + ], +) + +normalized_main_chart = dict( + aggregates=[ + dict( + sum_visit="sum(n_visit)", + groupby=["value", "date"], + ), + dict( + max_visit="max(sum_visit)", + groupby=["value"], + ), + ], + calculates=[ + dict(normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) / alt.datum.c_0) + ], + legend_title="Mean", + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "mean(normalized_c):Q", + title="c(Δt) / c₀", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_visit", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +main_chart = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(grid=True), + ), + color=alt.Color( + "value:N", + sort={"field": "n_visit", "op": "sum", "order": "descending"}, + title=None, + ), + ), + properties=dict( + height=300, + width=900, + ), +) + +normalized_time_line = dict( + encode=dict( + x=alt.X( + "normalized_date:Q", + title="Δt = (t - t₀) months", + scale=alt.Scale(nice=False), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +time_line = dict( + encode=dict( + x=alt.X( + "yearmonth(date):T", + title="Time (Month Year)", + axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), + ), + y=alt.Y( + "sum(n_visit):Q", + title="Number of administrative records", + axis=alt.Axis(format="s"), + ), + ), + properties=dict( + height=50, + width=900, + ), +) + +error_line = dict( + legend_title="Standard deviation", + mark_errorband=dict( + extent="stdev", + ), + encode=dict( + stroke=alt.Stroke( + "legend_error_band", + title="Error band", + legend=alt.Legend( + symbolType="square", + orient="top", + labelFontSize=12, + labelFontStyle="bold", + ), + ), + ), +) + +chart_style = dict( + labelFontSize=12, + titleFontSize=13, +) diff --git a/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py b/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py new file mode 100644 index 00000000..a326e74b --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py @@ -0,0 +1,11 @@ +from .defaults import chart_style, horizontal_bar_charts, vertical_bar_charts + + +def get_estimates_densities_plot_config(self): + estimates_densities_plot_config = dict( + chart_style=chart_style, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return estimates_densities_plot_config diff --git a/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py new file mode 100644 index 00000000..85c78cef --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py @@ -0,0 +1,21 @@ +from .defaults import ( + chart_style, + error_line, + horizontal_bar_charts, + normalized_main_chart, + normalized_time_line, + vertical_bar_charts, +) + + +def get_normalized_probe_dashboard_config(self): + normalized_probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + time_line=normalized_time_line, + error_line=error_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + + return normalized_probe_dashboard_config diff --git a/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py new file mode 100644 index 00000000..87bcf91c --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py @@ -0,0 +1,10 @@ +from .defaults import chart_style, error_line, normalized_main_chart + + +def get_normalized_probe_plot_config(self): + normalized_probe_plot_config = dict( + chart_style=chart_style, + main_chart=normalized_main_chart, + error_line=error_line, + ) + return normalized_probe_plot_config diff --git a/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py b/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py new file mode 100644 index 00000000..00ffbb2a --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py @@ -0,0 +1,18 @@ +from .defaults import ( + chart_style, + horizontal_bar_charts, + main_chart, + time_line, + vertical_bar_charts, +) + + +def get_probe_dashboard_config(self): + probe_dashboard_config = dict( + chart_style=chart_style, + main_chart=main_chart, + time_line=time_line, + vertical_bar_charts=vertical_bar_charts, + horizontal_bar_charts=horizontal_bar_charts, + ) + return probe_dashboard_config diff --git a/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py b/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py new file mode 100644 index 00000000..a5bde45d --- /dev/null +++ b/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py @@ -0,0 +1,9 @@ +from .defaults import chart_style, main_chart + + +def get_probe_plot_config(self): + probe_plot_config = dict( + chart_style=chart_style, + main_chart=main_chart, + ) + return probe_plot_config From 8f407b7ebe7166cd8e4c5983cdf7a32f840d389c Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Apr 2023 15:51:45 +0200 Subject: [PATCH 025/127] Remove json_dir --- edsteva/viz/dashboards/probe/wrapper.py | 10 +++------- edsteva/viz/plots/probe/wrapper.py | 11 +++-------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/edsteva/viz/dashboards/probe/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py index e2814a83..3a0c0047 100644 --- a/edsteva/viz/dashboards/probe/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -8,7 +8,7 @@ from edsteva.probes.base import BaseProbe from edsteva.viz.dashboards.probe.fitted_probe import fitted_probe_dashboard from edsteva.viz.dashboards.probe.probe import probe_only_dashboard -from edsteva.viz.utils import filter_predictor, json_dir, save_html +from edsteva.viz.utils import filter_predictor, save_html def probe_dashboard( @@ -57,13 +57,9 @@ def probe_dashboard( titleFontSize: float, optional The font size of the titles. """ - if save_path: - alt.data_transformers.enable("default") - alt.data_transformers.disable_max_rows() - else: - alt.data_transformers.register("json_dir", json_dir) - alt.data_transformers.enable("json_dir") + alt.data_transformers.enable("default") + alt.data_transformers.disable_max_rows() probe_config = deepcopy(probe.get_viz_config("probe_dashboard")) if fitted_model: diff --git a/edsteva/viz/plots/probe/wrapper.py b/edsteva/viz/plots/probe/wrapper.py index 051aaed8..8a5d1995 100644 --- a/edsteva/viz/plots/probe/wrapper.py +++ b/edsteva/viz/plots/probe/wrapper.py @@ -8,7 +8,7 @@ from edsteva.probes.base import BaseProbe from edsteva.viz.plots.probe.fitted_probe import fitted_probe_line from edsteva.viz.plots.probe.probe import probe_line -from edsteva.viz.utils import configure_style, filter_predictor, json_dir, save_html +from edsteva.viz.utils import configure_style, filter_predictor, save_html def probe_plot( @@ -70,13 +70,8 @@ def probe_plot( titleFontSize: float, optional The font size of the titles. """ - if save_path: - alt.data_transformers.enable("default") - alt.data_transformers.disable_max_rows() - - else: - alt.data_transformers.register("json_dir", json_dir) - alt.data_transformers.enable("json_dir") + alt.data_transformers.enable("default") + alt.data_transformers.disable_max_rows() probe_config = deepcopy(probe.get_viz_config("probe_plot")) chart_style = probe_config["chart_style"] From 6e29db193bfb3adeeb321132138c9da11566e00f Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Apr 2023 18:16:22 +0200 Subject: [PATCH 026/127] Add manual x_axis and y axis --- edsteva/viz/plots/probe/fitted_probe.py | 4 ++++ edsteva/viz/plots/probe/probe.py | 4 ++++ edsteva/viz/plots/probe/wrapper.py | 6 ++++++ edsteva/viz/utils.py | 25 ++++++++++++++----------- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/edsteva/viz/plots/probe/fitted_probe.py b/edsteva/viz/plots/probe/fitted_probe.py index abf95d44..998fa5a4 100644 --- a/edsteva/viz/plots/probe/fitted_probe.py +++ b/edsteva/viz/plots/probe/fitted_probe.py @@ -18,6 +18,8 @@ def fitted_probe_line( indexes: List[Dict[str, str]], legend_predictor: str = "Predictor c(t)", legend_model: str = "Model f(t)", + x_axis_title: str = None, + y_axis_title: str = None, ): r"""Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] @@ -56,6 +58,8 @@ def fitted_probe_line( main_chart_config=main_chart_config, index_selection=index_selection, index_fields=index_fields, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) probe_line = generate_probe_line( diff --git a/edsteva/viz/plots/probe/probe.py b/edsteva/viz/plots/probe/probe.py index f7461285..a50dc941 100644 --- a/edsteva/viz/plots/probe/probe.py +++ b/edsteva/viz/plots/probe/probe.py @@ -10,6 +10,8 @@ def probe_line( predictor: pd.DataFrame, probe_config: Dict[str, str], indexes: List[Dict[str, str]], + x_axis_title: str = None, + y_axis_title: str = None, ): """Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] @@ -44,6 +46,8 @@ def probe_line( main_chart_config=main_chart_config, index_selection=index_selection, index_fields=index_fields, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) main_chart = main_chart.mark_line() diff --git a/edsteva/viz/plots/probe/wrapper.py b/edsteva/viz/plots/probe/wrapper.py index 8a5d1995..febefe90 100644 --- a/edsteva/viz/plots/probe/wrapper.py +++ b/edsteva/viz/plots/probe/wrapper.py @@ -23,6 +23,8 @@ def probe_plot( save_path: str = None, legend_predictor: str = "Predictor c(t)", legend_model: str = "Model f(t)", + x_axis_title: str = None, + y_axis_title: str = None, **kwargs, ): r""" @@ -109,12 +111,16 @@ def probe_plot( indexes=indexes, legend_predictor=legend_predictor, legend_model=legend_model, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) else: chart = probe_line( predictor=predictor, probe_config=probe_config, indexes=indexes, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) if save_path: diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index d8ad7f47..941752a3 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -20,7 +20,13 @@ def generate_main_chart( main_chart_config: Dict[str, str], index_selection: alt.Selection = None, index_fields: List[str] = None, + x_axis_title: str = None, + y_axis_title: str = None, ): + if x_axis_title: + main_chart_config["encode"]["x"]["title"] = x_axis_title + if y_axis_title: + main_chart_config["encode"]["x"]["title"] = y_axis_title if index_fields: base = base.transform_fold(index_fields, as_=["index", "value"]) if "aggregates" in main_chart_config.keys(): @@ -37,16 +43,8 @@ def generate_main_chart( main_chart = main_chart.transform_filter(index_selection) else: main_chart = base.encode( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "mean(c):Q", - title="Completeness predictor c(t)", - axis=alt.Axis(grid=True), - ), + x=main_chart_config["encode"]["x"], + y=main_chart_config["encode"]["y"], ) return main_chart.properties(**main_chart_config["properties"]) @@ -252,7 +250,12 @@ def configure_style( return chart.configure_axis( labelFontSize=chart_style["labelFontSize"], titleFontSize=chart_style["titleFontSize"], - ).configure_legend(labelFontSize=chart_style["labelFontSize"]) + labelLimit=500, + ).configure_legend( + labelFontSize=chart_style["labelFontSize"], + titleFontSize=chart_style["titleFontSize"], + labelLimit=500, + ) def concatenate_charts( From 068369787d2627e659291e47eb9f5fc7bae2d03d Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Apr 2023 18:23:12 +0200 Subject: [PATCH 027/127] Hot fix --- edsteva/viz/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index 941752a3..0e83c148 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -26,7 +26,7 @@ def generate_main_chart( if x_axis_title: main_chart_config["encode"]["x"]["title"] = x_axis_title if y_axis_title: - main_chart_config["encode"]["x"]["title"] = y_axis_title + main_chart_config["encode"]["y"]["title"] = y_axis_title if index_fields: base = base.transform_fold(index_fields, as_=["index", "value"]) if "aggregates" in main_chart_config.keys(): From 6c828b2b444e7ebc16d0cbb2a764d52eba6d15d5 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 3 May 2023 20:07:20 +0200 Subject: [PATCH 028/127] First cleaning --- edsteva/io/synthetic/synthetic.py | 6 + edsteva/models/base.py | 23 +- .../algos/loss_minimization.py | 1 - .../rectangle_function/rectangle_function.py | 43 +-- edsteva/models/step_function/step_function.py | 46 +-- edsteva/probes/base.py | 31 +- edsteva/probes/biology/biology.py | 53 ++- .../completeness_predictors/__init__.py | 4 + .../per_measurement.py | 25 +- .../completeness_predictors/per_visit.py | 326 ++++++++---------- .../completeness_predictors/per_condition.py | 65 ++-- .../completeness_predictors/per_visit.py | 67 ++-- edsteva/probes/condition/condition.py | 41 ++- .../note/completeness_predictors/per_note.py | 60 ++-- .../note/completeness_predictors/per_visit.py | 63 ++-- edsteva/probes/note/note.py | 38 +- .../completeness_predictors/per_visit.py | 66 ++-- edsteva/probes/visit/visit.py | 33 +- edsteva/utils/checks.py | 2 +- .../normalized_probe/normalized_probe.py | 103 ++++-- edsteva/viz/dashboards/probe/fitted_probe.py | 64 ++-- edsteva/viz/dashboards/probe/probe.py | 39 ++- edsteva/viz/dashboards/probe/wrapper.py | 91 ++++- .../estimates_densities.py | 63 +++- .../normalized_probe/normalized_probe.py | 101 +++--- edsteva/viz/plots/probe/fitted_probe.py | 36 +- edsteva/viz/plots/probe/probe.py | 24 +- edsteva/viz/plots/probe/wrapper.py | 50 +-- tests/test_model.py | 63 ++-- tests/test_probes.py | 75 +++- 30 files changed, 974 insertions(+), 728 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index db6531ff..25841480 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -939,6 +939,9 @@ def convert_to_koalas(self): self.fact_relationship = ks.DataFrame(self.fact_relationship) self.visit_detail = ks.DataFrame(self.visit_detail) self.note = ks.DataFrame(self.note) + self.concept = ks.DataFrame(self.concept) + self.concept_relationship = ks.DataFrame(self.concept_relationship) + self.measurement = ks.DataFrame(self.measurement) self.module = "koalas" def reset_to_pandas(self): @@ -951,6 +954,9 @@ def reset_to_pandas(self): self.fact_relationship = self.fact_relationship.to_pandas() self.visit_detail = self.visit_detail.to_pandas() self.note = self.note.to_pandas() + self.concept = self.concept.to_pandas() + self.concept_relationship = self.concept_relationship.to_pandas() + self.measurement = self.measurement.to_pandas() self.module = "pandas" def delete_table(self, table_name: str) -> None: diff --git a/edsteva/models/base.py b/edsteva/models/base.py index e9d9bb5d..2a438149 100644 --- a/edsteva/models/base.py +++ b/edsteva/models/base.py @@ -212,9 +212,7 @@ def load(self, path=None) -> None: """ - if not path: - path = CACHE_DIR / "edsteva" / "models" / f"{self.name.lower()}.pickle" - + path = path or self._get_path() loaded_model = load_object(path) self.__dict__ = loaded_model.__dict__.copy() self.path = path @@ -245,12 +243,10 @@ def save(self, path: str = None, name: str = None) -> bool: self.is_computed_estimates() + if name: + self.name = name if not path: - if name: - self.name = name - else: - self.name = type(self).__name__ - path = CACHE_DIR / "edsteva" / "models" / f"{self.name.lower()}.pickle" + path = self._get_path() self.path = path save_object(self, path) @@ -263,15 +259,22 @@ def delete(self, path: str = None) -> bool: path : str, optional **EXAMPLE**: `"my_folder/my_file.html"` """ - if not path: if hasattr(self, "path"): path = self.path else: - path = CACHE_DIR / "edsteva" / "models" / f"{self.name.lower()}.pickle" + path = self._get_path() delete_object(self, path) + def _get_path(self): + base_path = CACHE_DIR / "edsteva" / "models" + if hasattr(self, "name"): + filename = f"{self.name.lower()}.pickle" + else: + filename = f"{type(self).__name__.lower()}.pickle" + return base_path / filename + def _compute_metrics( self, predictor: pd.DataFrame, diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index 4b4d1fb8..a6e70e48 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -41,7 +41,6 @@ def loss_minimization( $c(t)$ computed in the Probe. index : List[str] Variable from which data is grouped. - **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` x_col : str, optional Column name for the time variable $t$. diff --git a/edsteva/models/rectangle_function/rectangle_function.py b/edsteva/models/rectangle_function/rectangle_function.py index c4602aac..c2e20f11 100644 --- a/edsteva/models/rectangle_function/rectangle_function.py +++ b/edsteva/models/rectangle_function/rectangle_function.py @@ -1,4 +1,4 @@ -from typing import Dict, List +from typing import List import pandas as pd @@ -20,12 +20,26 @@ class RectangleFunction(BaseModel): - the characteristic time $t_1$ estimates the time after which the data is not available anymore. - the characteristic value $c_0$ estimates the completeness between $t_0$ and $t_1$. + Parameters + ---------- + algo: str + Algorithm used to compute the estimates + **EXAMPLE**: ``"loss_minimization"`` + Attributes ---------- + _algo: List[str] + Algorithm used to compute the estimates + **VALUE**: ``"loss_minimization"`` _coefs: List[str] Model coefficients - **VALUE**: ``["t_0", "c_0", "t_1"]`` + _default_metrics: List[str] + Metrics to used by default + **VALUE**: ``[error_between_t0_t1]`` + _viz_config: List[str] + Dictionary of configuration for visualization purpose. + **VALUE**: ``{}`` Example ---------- @@ -50,13 +64,11 @@ class RectangleFunction(BaseModel): def __init__( self, algo: str = "loss_minimization", - _viz_config: Dict[str, str] = None, ): self._algo = algo self._coefs = ["t_0", "c_0", "t_1"] self._default_metrics = ["error_between_t0_t1"] - if _viz_config is None: - self._viz_config = {} + self._viz_config = {} def fit_process( self, @@ -132,24 +144,3 @@ def get_viz_config(self, viz_type: str, **kwargs): else: raise ValueError(f"edsteva has no {viz_type} registry !") return viz_configs[viz_type].get(_viz_config)(self, **kwargs) - - def default_metrics( - self, - predictor: pd.DataFrame, - estimates: pd.DataFrame, - index: List[str], - ): - r"""Default metrics used if metric_functions is set to None. Here the default metric is the mean squared error between $t_0$ and $t_1$. - - Parameters - ---------- - predictor : pd.DataFrame - Target DataFrame describing the completeness predictor $c(t)$ - estimates : pd.DataFrame - Target DataFrame describing the estimates $(\hat{t_0}, \hat{c_0})$ - index : List[str] - Variable from which data is grouped - - **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` - """ - return None diff --git a/edsteva/models/step_function/step_function.py b/edsteva/models/step_function/step_function.py index a767b151..f24a8173 100644 --- a/edsteva/models/step_function/step_function.py +++ b/edsteva/models/step_function/step_function.py @@ -1,8 +1,7 @@ -from typing import Dict, List +from typing import List import pandas as pd -from edsteva.metrics import metrics from edsteva.models import BaseModel from edsteva.models.step_function.algos import algos from edsteva.models.step_function.viz_configs import viz_configs @@ -20,12 +19,26 @@ class StepFunction(BaseModel): - the characteristic time $t_0$ estimates the time after which the data is available - the characteristic value $c_0$ estimates the stabilized routine completeness + Parameters + ---------- + algo: str + Algorithm used to compute the estimates + **EXAMPLE**: ``"loss_minimization"`` + Attributes ---------- + _algo: List[str] + Algorithm used to compute the estimates + **VALUE**: ``"loss_minimization"`` _coefs: List[str] Model coefficients - **VALUE**: ``["t_0", "c_0"]`` + _default_metrics: List[str] + Metrics to used by default + **VALUE**: ``[error_after_t0]`` + _viz_config: List[str] + Dictionary of configuration for visualization purpose. + **VALUE**: ``{}`` Example ---------- @@ -50,13 +63,11 @@ class StepFunction(BaseModel): def __init__( self, algo: str = "loss_minimization", - _viz_config: Dict[str, str] = None, ): self._algo = algo self._coefs = ["t_0", "c_0"] self._default_metrics = ["error_after_t0"] - if _viz_config is None: - self._viz_config = {} + self._viz_config = {} def fit_process( self, @@ -132,26 +143,3 @@ def get_viz_config(self, viz_type: str, **kwargs): else: raise ValueError(f"edsteva has no {viz_type} registry !") return viz_configs[viz_type].get(_viz_config)(self, **kwargs) - - def default_metrics( - self, - predictor: pd.DataFrame, - estimates: pd.DataFrame, - index: List[str], - ): - r"""Default metrics used if metric_functions is set to None. Here the default metric is the mean squared error computed after $t_0$ - - Parameters - ---------- - predictor : pd.DataFrame - Target DataFrame describing the completeness predictor $c(t)$ - estimates : pd.DataFrame - Target DataFrame describing the estimates $(\hat{t_0}, \hat{c_0})$ - index : List[str] - Variable from which data is grouped - - **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` - """ - return metrics.get("error_after_t0")( - predictor=predictor, estimates=estimates, index=index - ) diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index f21c3f88..69a46341 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -36,7 +36,6 @@ class BaseProbe(metaclass=ABCMeta): def __init__(self): self.is_valid_probe() - self.name = self._get_name() _schema = ["care_site_level", "care_site_id", "date", "c"] @@ -129,7 +128,7 @@ def impute_missing_date( # {'Hôpital-1': {'min': Timestamp('2010-06-01'), 'max': Timestamp('2019-11-01')} if only_impute_per_care_site: site_to_min_max_ds = ( - self.predictor.groupby(["care_site_short_name"])["date"] + self.predictor.groupby(["care_site_id"])["date"] .agg([min, max]) .to_dict("index") ) @@ -137,21 +136,21 @@ def impute_missing_date( partition_cols = self._index.copy() groups = [] for partition, group in self.predictor.groupby(partition_cols): - group = date_index.merge(group, on="date", how="left") + group_with_dates = date_index.merge(group, on="date", how="left") # Filter on each care site timeframe. if only_impute_per_care_site: - care_site_short_name = partition[-1] # TO DO - ds_min = site_to_min_max_ds[care_site_short_name]["min"] - ds_max = site_to_min_max_ds[care_site_short_name]["max"] + care_site_id = group["care_site_id"].iloc[0] + ds_min = site_to_min_max_ds[care_site_id]["min"] + ds_max = site_to_min_max_ds[care_site_id]["max"] group = group.loc[(group["date"] >= ds_min) & (group["date"] <= ds_max)] # Fill specific partition values. for key, val in zip(partition_cols, partition): - group[key] = val + group_with_dates[key] = val # Fill remaining NaN from counts values with 0. - group.fillna(0, inplace=True) - groups.append(group) + group_with_dates.fillna(0, inplace=True) + groups.append(group_with_dates) self.predictor = pd.concat(groups) @@ -388,11 +387,9 @@ def save(self, path: str = None, name: str = None) -> bool: self.is_computed_probe() + if name: + self.name = name if not path: - if name: - self.name = name - else: - self.name = type(self).__name__ path = self._get_path() self.path = path @@ -417,8 +414,8 @@ def delete(self, path: str = None): def _get_path(self): base_path = CACHE_DIR / "edsteva" / "probes" - filename = f"{self.name.lower()}.pickle" + if hasattr(self, "name"): + filename = f"{self.name.lower()}.pickle" + else: + filename = f"{type(self).__name__.lower()}.pickle" return base_path / filename - - def _get_name(self): - return type(self).__name__ diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 634e33d9..fdccd68e 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -19,31 +19,35 @@ class BiologyProbe(BaseProbe): Where $n_{biology}(t)$ is the number of biological measurements, $n_{99}$ is the $99^{th}$ percentile and $t$ is the month. - Attributes + Parameters ---------- - _index: List[str] - Variable from which data is grouped - - **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` - _index: List[str] - Variable from which data is grouped + completeness_predictor: str + Algorithm used to compute the completeness predictor + **EXAMPLE**: ``"per_visit_default"`` + standard_terminologies: List[str] + List of standards terminologies to consider + **EXAMPLE**: ``["LOINC", "ANABIO"]`` - **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` + Attributes + ---------- + _completeness_predictor: str + Algorithm used to compute the completeness predictor + **VALUE**: ``"per_visit_default"`` + _standard_terminologies: List[str] + List of standards terminologies to consider + **VALUE**: ``["LOINC", "ANABIO"]`` _index: List[str] Variable from which data is grouped - - **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` - _extra_predictor: str - Variable from which data is grouped - - **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` + **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id", "care_site_specialty", "specialties_set", "_concept_code"]`` + _viz_config: List[str] + Dictionary of configuration for visualization purpose. + **VALUE**: ``{}`` """ def __init__( self, completeness_predictor: str = "per_measurement_default", standard_terminologies: List[str] = ["ANABIO", "LOINC"], - _viz_config: Dict[str, str] = None, ): self._completeness_predictor = completeness_predictor self._standard_terminologies = standard_terminologies @@ -59,8 +63,7 @@ def __init__( "{}_concept_code".format(terminology) for terminology in standard_terminologies ] - if _viz_config is None: - self._viz_config = {} + self._viz_config = {} def compute_process( self, @@ -121,6 +124,22 @@ def compute_process( **EXAMPLE**: `[8312056386, 8312027648]` care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + care_site_specialties : List[str], optional + **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` + specialties_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` + concepts_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", "Leucocytes": r"A0174|K3232|H6740|E4358|C9784|C8824|E6953"}` + stay_durations : List[float], optional + **EXAMPLE**: `[1, 30]` + source_terminologies : Dict[str, str], optional + Dictionary of regex used to detect terminology in the column `vocabulary_id`. + **EXAMPLE**: `{"GLIMS_LOINC": r"GLIMS.{0,20}LOINC"}` + mapping : List[Tuple[str, str, str]], optional + List of values to filter in the column `relationship_id` in order to map between 2 terminologies. + **EXAMPLE**: `[("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to")]` + hdfs_user_path : str, optional + **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None: self._index.remove("specialties_set") diff --git a/edsteva/probes/biology/completeness_predictors/__init__.py b/edsteva/probes/biology/completeness_predictors/__init__.py index a76b3348..f5f6acfb 100644 --- a/edsteva/probes/biology/completeness_predictors/__init__.py +++ b/edsteva/probes/biology/completeness_predictors/__init__.py @@ -1,6 +1,7 @@ import catalogue from .per_measurement import compute_completeness_predictor_per_measurement +from .per_visit import compute_completeness_predictor_per_visit completeness_predictors = catalogue.create( "edsteva.probes.biology", "completeness_predictors" @@ -9,3 +10,6 @@ completeness_predictors.register( "per_measurement_default", func=compute_completeness_predictor_per_measurement ) +completeness_predictors.register( + "per_visit_default", func=compute_completeness_predictor_per_visit +) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 63c7436b..ae67131a 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -17,7 +17,7 @@ ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame def compute_completeness_predictor_per_measurement( @@ -38,7 +38,16 @@ def compute_completeness_predictor_per_measurement( mapping: List[Tuple[str, str, str]], hdfs_user_path: str, ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute]""" + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_visit`` algorithm computes $c_(t)$ the availability of biological measurements: + + $$ + c(t) = \frac{n_{biology}(t)}{n_{max}} + $$ + + Where $n_{biology}(t)$ is the number of biological measurements, $t$ is the month and $n_{max} = \max_{t}(n_{biology}(t))$. + """ self._metrics = ["c", "n_measurement"] check_tables( data=data, @@ -105,7 +114,11 @@ def compute_completeness_predictor_per_measurement( return compute_completeness(self, biology_predictor, hdfs_user_path) -def compute_completeness(self, biology_predictor, hdfs_user_path: str = None): +def compute_completeness( + self, + biology_predictor: DataFrame, + hdfs_user_path: str = None, +): partition_cols = self._index.copy() + ["date"] n_measurement = ( biology_predictor.groupby( @@ -143,7 +156,11 @@ def compute_completeness(self, biology_predictor, hdfs_user_path: str = None): return biology_predictor -def get_hospital_measurements(measurement, visit_occurrence, care_site): +def get_hospital_measurements( + measurement: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, +): hospital_measurement = measurement.merge( visit_occurrence.drop(columns="date"), on="visit_occurrence_id" ) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 855f1488..63ed7a05 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -4,42 +4,144 @@ import pandas as pd from loguru import logger -from edsteva.probes.base import BaseProbe +from edsteva.probes.utils.prepare_df import ( + prepare_biology_relationship, + prepare_care_site, + prepare_measurement, + prepare_visit_occurrence, +) from edsteva.probes.utils.utils import ( CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, - get_biology_relationship, hospital_only, - prepare_care_site, - prepare_measurement, - prepare_visit_occurrence, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data - - -def compute_completeness(biology_predictor): - partition_cols = [ - "care_site_level", - "care_site_id", - "care_site_short_name", - "stay_type", - "concepts_set", - "length_of_stay", - "date", - ] - n_visit_with_bio = ( +from edsteva.utils.typing import Data, DataFrame + + +def compute_completeness_predictor_per_visit( + self, + data: Data, + care_site_relationship: pd.DataFrame, + start_date: datetime, + end_date: datetime, + care_site_levels: List[str], + stay_types: Union[str, Dict[str, str]], + care_site_ids: List[int], + care_site_short_names: List[str], + care_site_specialties: List[str], + specialties_sets: Union[str, Dict[str, str]], + concepts_sets: Union[str, Dict[str, str]], + stay_durations: List[float], + source_terminologies: Dict[str, str], + mapping: List[Tuple[str, str, str]], + hdfs_user_path: str, +): + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_visit`` algorithm computes $c_(t)$ the availability of laboratory data related linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,biology}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one biological measurement recorded and $t$ is the month. + """ + self._metrics = ["c", "n_measurement"] + check_tables( + data=data, + required_tables=["measurement", "concept", "concept_relationship"], + ) + standard_terminologies = self._standard_terminologies + biology_relationship = prepare_biology_relationship( + data=data, + standard_terminologies=standard_terminologies, + source_terminologies=source_terminologies, + mapping=mapping, + ) + + self.biology_relationship = biology_relationship + root_terminology = mapping[0][0] + + visit_occurrence = prepare_visit_occurrence( + data=data, + start_date=start_date, + end_date=end_date, + stay_types=stay_types, + stay_durations=stay_durations, + ) + measurement = prepare_measurement( + data=data, + biology_relationship=biology_relationship, + concepts_sets=concepts_sets, + root_terminology=root_terminology, + standard_terminologies=standard_terminologies, + per_visit=True, + ) + + care_site = prepare_care_site( + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + specialties_sets=specialties_sets, + care_site_relationship=care_site_relationship, + ) + + hospital_visit = get_hospital_visit( + measurement=measurement, + visit_occurrence=visit_occurrence, + care_site=care_site, + standard_terminologies=standard_terminologies, + ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] + biology_predictor_by_level = {hospital_name: hospital_visit} + + if care_site_levels and not hospital_only(care_site_levels=care_site_levels): + logger.info( + "Biological measurements are only available at hospital level for now" + ) + care_site_levels = "Hospital" + + biology_predictor = concatenate_predictor_by_level( + predictor_by_level=biology_predictor_by_level, + care_site_levels=care_site_levels, + ) + + return compute_completeness(self, biology_predictor, hdfs_user_path) + + +def compute_completeness( + self, + biology_predictor: DataFrame, + hdfs_user_path: str = None, +): + partition_cols = self._index.copy() + ["date"] + n_visit_with_measurement = ( biology_predictor.groupby( partition_cols, as_index=False, dropna=False, ) - .agg({"has_bio": "count"}) - .rename(columns={"has_bio": "n_visit_with_bio"}) + .agg({"has_measurement": "count"}) + .rename(columns={"has_measurement": "n_visit_with_measurement"}) + ) + partition_cols = list( + set(partition_cols) + - set( + ["concepts_set"] + + [ + "{}_concept_code".format(terminology) + for terminology in self._standard_terminologies + ] + + [ + "{}_concept_name".format(terminology) + for terminology in self._standard_terminologies + ] + ) ) - partition_cols = list(set(partition_cols) - {"concepts_set"}) n_visit = ( biology_predictor.groupby( partition_cols, @@ -50,178 +152,50 @@ def compute_completeness(biology_predictor): .rename(columns={"visit_id": "n_visit"}) ) - biology_predictor = n_visit_with_bio.merge( + biology_predictor = n_visit_with_measurement.merge( n_visit, on=partition_cols, ) - biology_predictor = to("pandas", biology_predictor) + biology_predictor = to("pandas", biology_predictor, hdfs_user_path=hdfs_user_path) biology_predictor["c"] = biology_predictor["n_visit"].where( biology_predictor["n_visit"] == 0, - biology_predictor["n_visit_with_bio"] / biology_predictor["n_visit"], + biology_predictor["n_visit_with_measurement"] / biology_predictor["n_visit"], ) - biology_predictor = biology_predictor.drop(columns=["n_visit_with_bio"]) return biology_predictor -def get_hospital_visit(measurement, visit_occurrence, care_site): - measurement_hospital = measurement[ +def get_hospital_visit( + measurement: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, + standard_terminologies: List[str], +): + hospital_measurement = measurement[ ["visit_occurrence_id", "concepts_set"] + + [ + "{}_concept_code".format(terminology) + for terminology in standard_terminologies + ] + + [ + "{}_concept_name".format(terminology) + for terminology in standard_terminologies + ] ].drop_duplicates() - measurement_hospital["has_bio"] = True + hospital_measurement["has_measurement"] = True + print(type(hospital_measurement)) + print(type(visit_occurrence)) hospital_visit = visit_occurrence.merge( - measurement_hospital, on="visit_occurrence_id", how="left" + hospital_measurement, + on="visit_occurrence_id", + how="left", ) hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) hospital_visit = hospital_visit.merge(care_site, on="care_site_id") + if is_koalas(hospital_visit): - hospital_visit.spark.cache() + hospital_visit = hospital_visit.spark.cache() return hospital_visit - - -class BiologyPerVisitProbe(BaseProbe): - r""" - The ``BiologyProbe`` computes $c_(t)$ the availability of laboratory data related to biological measurements for each biological code and each care site according to time: - - $$ - c(t) = \frac{n_{biology}(t)}{n_{99}} - $$ - - Where $n_{biology}(t)$ is the number of biological measurements, $n_{99}$ is the $99^{th}$ percentile and $t$ is the month. - - Attributes - ---------- - _index: List[str] - Variable from which data is grouped - - **VALUE**: ``["care_site_level", "concepts_set", "stay_type", "length_of_stay", "care_site_id"]`` - """ - - _index = [ - "care_site_level", - "concepts_set", - "stay_type", - "length_of_stay", - "care_site_id", - ] - - def compute_process( - self, - data: Data, - care_site_relationship: pd.DataFrame, - start_date: datetime, - end_date: datetime, - care_site_levels: List[str], - stay_types: Union[str, Dict[str, str]], - care_site_ids: List[int], - care_site_short_names: List[str] = None, - concepts_sets: Union[str, Dict[str, str]] = { - "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", - "Plaquettes": "E4812|C0326|A1636|A0230|H6751|A1598|G7728|G7727|G7833|A2538|A2539|J4463", - "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", - "Potassium": "A1656|C8757|C8758|A2380|E2073|L5014|F2618|E2337|J1178|A3819|J1181", - "Sodium": "A1772|C8759|C8760|A0262|J1177|F8162|L5013|F2617|K9086|J1180 ", - "Chlorure": "B5597|F2359|A0079|J1179|F2619|J1182|F2358|A0079|J1179|F2619|J1182", - "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", - "Bicarbonate": "A0422|H9622|C6408|F4161", - }, - stay_durations: List[float] = [1], - standard_terminologies: List[str] = ["ANABIO", "LOINC"], - source_terminologies: Dict[str, str] = { - "ANALYSES_LABORATOIRE": r"Analyses Laboratoire", - "GLIMS_ANABIO": r"GLIMS.{0,20}Anabio", - "GLIMS_LOINC": r"GLIMS.{0,20}LOINC", - "ANABIO_ITM": r"ITM - ANABIO", - "LOINC_ITM": r"ITM - LOINC", - }, - mapping: List[Tuple[str, str, str]] = [ - ("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to"), - ("ANALYSES_LABORATOIRE", "GLIMS_LOINC", "Maps to"), - ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), - ("ANABIO_ITM", "LOINC_ITM", "Maps to"), - ], - ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` - """ - check_tables( - data=data, - required_tables=["measurement", "concept", "concept_relationship"], - ) - - biology_relationship = get_biology_relationship( - data=data, - standard_terminologies=standard_terminologies, - source_terminologies=source_terminologies, - mapping=mapping, - ) - self.biology_relationship = biology_relationship - root_terminology = mapping[0][0] - - measurement = prepare_measurement( - data=data, - biology_relationship=biology_relationship, - concepts_sets=concepts_sets, - start_date=start_date, - end_date=end_date, - root_terminology=root_terminology, - standard_terminologies=standard_terminologies, - per_visit=True, - ) - - visit_occurrence = prepare_visit_occurrence( - data=data, - start_date=start_date, - end_date=end_date, - stay_types=stay_types, - stay_durations=stay_durations, - ) - - care_site = prepare_care_site( - data, - care_site_ids, - care_site_short_names, - care_site_relationship, - ) - - hospital_visit = get_hospital_visit( - measurement, - visit_occurrence, - care_site, - ) - hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] - biology_predictor_by_level = {hospital_name: hospital_visit} - - if care_site_levels and not hospital_only(care_site_levels=care_site_levels): - logger.info( - "Biological measurements are only available at hospital level for now" - ) - care_site_levels = "Hospital" - - biology_predictor = concatenate_predictor_by_level( - predictor_by_level=biology_predictor_by_level, - care_site_levels=care_site_levels, - ) - - return compute_completeness(biology_predictor) diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 95884a71..8e222488 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -16,9 +16,9 @@ concatenate_predictor_by_level, hospital_only, ) -from edsteva.utils.checks import check_conditon_source_systems, check_tables +from edsteva.utils.checks import check_condition_source_systems, check_tables from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame def compute_completeness_predictor_per_condition( @@ -40,37 +40,20 @@ def compute_completeness_predictor_per_condition( stay_durations: List[float], hdfs_user_path: str, ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` - diag_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` - condition_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` - source_systems : List[str], optional - **EXAMPLE**: `["AREM", "ORBIS"]` - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_condition`` algorithm computes $c_(t)$ the availability of claim data as follow: + + $$ + c(t) = \frac{n_{condition}(t)}{n_{max}} + $$ + + Where $n_{condition}(t)$ is the number of claim codes (e.g. ICD-10) recorded, $t$ is the month and $n_{max} = \max_{t}(n_{condition}(t))$. """ self._metrics = ["c", "n_condition"] check_tables(data=data, required_tables=["condition_occurrence"]) - check_conditon_source_systems(source_systems=source_systems) + check_condition_source_systems(source_systems=source_systems) if "AREM" in source_systems and not hospital_only( care_site_levels=care_site_levels ): @@ -143,7 +126,11 @@ def compute_completeness_predictor_per_condition( ) -def compute_completeness(self, condition_predictor, hdfs_user_path: str): +def compute_completeness( + self, + condition_predictor: DataFrame, + hdfs_user_path: str, +): partition_cols = self._index.copy() + ["date"] n_condition = ( @@ -183,7 +170,11 @@ def compute_completeness(self, condition_predictor, hdfs_user_path: str): return condition_predictor -def get_hospital_condition(condition_occurrence, visit_occurrence, care_site): +def get_hospital_condition( + condition_occurrence: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, +): hospital_condition = condition_occurrence.merge( visit_occurrence, on="visit_occurrence_id", @@ -199,10 +190,10 @@ def get_hospital_condition(condition_occurrence, visit_occurrence, care_site): def get_uf_condition( - condition_occurrence, - visit_occurrence, - visit_detail, - care_site, + condition_occurrence: DataFrame, + visit_occurrence: DataFrame, + visit_detail: DataFrame, + care_site: DataFrame, ): # pragma: no cover # Add visit information visit_detail = visit_detail[visit_detail.visit_detail_type == "RUM"] @@ -230,7 +221,9 @@ def get_uf_condition( def get_pole_condition( - uf_condition, care_site, care_site_relationship + uf_condition: DataFrame, + care_site: DataFrame, + care_site_relationship: DataFrame, ): # pragma: no cover pole_condition = convert_uf_to_pole( table=uf_condition.drop( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 274b20b0..67824f74 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -16,9 +16,9 @@ concatenate_predictor_by_level, hospital_only, ) -from edsteva.utils.checks import check_conditon_source_systems, check_tables +from edsteva.utils.checks import check_condition_source_systems, check_tables from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame def compute_completeness_predictor_per_visit( @@ -40,37 +40,20 @@ def compute_completeness_predictor_per_visit( stay_durations: List[float], hdfs_user_path: str, ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` - diag_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` - condition_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` - source_systems : List[str], optional - **EXAMPLE**: `["AREM", "ORBIS"]` - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_visit`` algorithm computes $c_(t)$ the availability of claim data linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. """ self._metrics = ["c", "n_visit", "n_visit_with_condition"] check_tables(data=data, required_tables=["condition_occurrence"]) - check_conditon_source_systems(source_systems=source_systems) + check_condition_source_systems(source_systems=source_systems) if "AREM" in source_systems and not hospital_only( care_site_levels=care_site_levels ): @@ -137,7 +120,11 @@ def compute_completeness_predictor_per_visit( ) -def compute_completeness(self, condition_predictor, hdfs_user_path: str = None): +def compute_completeness( + self, + condition_predictor: DataFrame, + hdfs_user_path: str = None, +): partition_cols = self._index.copy() + ["date"] n_visit_with_condition = ( condition_predictor.groupby( @@ -179,7 +166,11 @@ def compute_completeness(self, condition_predictor, hdfs_user_path: str = None): return condition_predictor -def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): +def get_hospital_visit( + condition_occurrence: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, +): condition_hospital = condition_occurrence.drop_duplicates( ["visit_occurrence_id", "diag_type", "condition_type", "source_system"] ) @@ -199,10 +190,10 @@ def get_hospital_visit(condition_occurrence, visit_occurrence, care_site): def get_uf_visit( - condition_occurrence, - visit_occurrence, - visit_detail, - care_site, + condition_occurrence: DataFrame, + visit_occurrence: DataFrame, + visit_detail: DataFrame, + care_site: DataFrame, ): # pragma: no cover visit_detail = visit_detail[visit_detail.visit_detail_type == "RUM"] condition_uf = ( @@ -240,7 +231,11 @@ def get_uf_visit( return uf_visit -def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover +def get_pole_visit( + uf_visit: DataFrame, + care_site: DataFrame, + care_site_relationship: DataFrame, +): # pragma: no cover pole_visit = convert_uf_to_pole( table=uf_visit.drop( columns=["care_site_short_name", "care_site_level", "care_site_specialty"] diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index cf4f3879..eca98980 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -11,26 +11,30 @@ class ConditionProbe(BaseProbe): r""" - The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data in patients' administrative stay: + The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c(t)$ the availability of claim data: - $$ - c_{condition}(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. + Parameters + ---------- + completeness_predictor: str + Algorithm used to compute the completeness predictor + **EXAMPLE**: ``"per_visit_default"`` Attributes ---------- + _completeness_predictor: str + Algorithm used to compute the completeness predictor + **VALUE**: ``"per_visit_default"`` _index: List[str] Variable from which data is grouped - - **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "diag_type", "condition_type", "source_system", "care_site_id"]`` + **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "care_site_specialty", "specialties_set", "diag_type", "condition_type", "source_system", "care_site_id"]`` + _viz_config: List[str] + Dictionary of configuration for visualization purpose. + **VALUE**: ``{}`` """ def __init__( self, completeness_predictor: str = "per_visit_default", - _viz_config: Dict[str, str] = None, ): self._completeness_predictor = completeness_predictor self._index = [ @@ -44,8 +48,7 @@ def __init__( "care_site_specialty", "specialties_set", ] - if _viz_config is None: - self._viz_config = {} + self._viz_config = {} def compute_process( self, @@ -83,16 +86,24 @@ def compute_process( **EXAMPLE**: `["Hospital", "Pole", "UF"]` stay_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés"` + care_site_ids : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + care_site_short_names : List[str], optional + **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + care_site_specialties : List[str], optional + **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` diag_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` + specialties_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` condition_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` source_systems : List[str], optional **EXAMPLE**: `["AREM", "ORBIS"]` - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + stay_durations : List[float], optional + **EXAMPLE**: `[1, 30]` + hdfs_user_path : str, optional + **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None: self._index.remove("specialties_set") diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index b464ddf9..752b0cfe 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -18,7 +18,7 @@ ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame def compute_completeness_predictor_per_note( @@ -38,29 +38,15 @@ def compute_completeness_predictor_per_note( note_types: Union[str, Dict[str, str]], hdfs_user_path: str, ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - extra_data : Data, optional - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - note_types : Union[str, Dict[str, str]], optional - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_note`` algorithm computes $c_(t)$ the availability of clinical documents as follow: + + $$ + c(t) = \frac{n_{note}(t)}{n_{max}} + $$ + + Where $n_{note}(t)$ is the number of clinical documents, $t$ is the month and $n_{max} = \max_{t}(n_{note}(t))$. """ self._metrics = ["c", "n_note"] check_tables(data=data, required_tables=["note"]) @@ -126,7 +112,11 @@ def compute_completeness_predictor_per_note( return compute_completeness(self, note_predictor, hdfs_user_path=hdfs_user_path) -def compute_completeness(self, note_predictor, hdfs_user_path: str = None): +def compute_completeness( + self, + note_predictor: DataFrame, + hdfs_user_path: str = None, +): partition_cols = self._index.copy() + ["date"] n_note = ( @@ -166,7 +156,11 @@ def compute_completeness(self, note_predictor, hdfs_user_path: str = None): return note_predictor -def get_hospital_note(note, visit_occurrence, care_site): +def get_hospital_note( + note: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, +): note_hospital = note.merge(visit_occurrence, on="visit_occurrence_id", how="left") note_hospital = note_hospital.drop(columns="visit_occurrence_id") note_hospital = note_hospital.merge(care_site, on="care_site_id") @@ -177,10 +171,10 @@ def get_hospital_note(note, visit_occurrence, care_site): def get_note_detail( - extra_data, - note, - visit_occurrence, - care_site, + extra_data: Data, + note: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, ): # pragma: no cover note_detail = prepare_note_care_site(extra_data=extra_data, note=note) note_detail = note_detail.merge(care_site, on="care_site_id") @@ -204,7 +198,11 @@ def get_note_detail( return note_uf, note_uc, note_uh -def get_pole_note(note_uf, care_site, care_site_relationship): # pragma: no cover +def get_pole_note( + note_uf: DataFrame, + care_site: DataFrame, + care_site_relationship: DataFrame, +): # pragma: no cover note_pole = convert_uf_to_pole( table=note_uf.drop( columns=["care_site_short_name", "care_site_level", "care_site_specialty"] diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 6aaea449..a055f998 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -19,7 +19,7 @@ ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame def compute_completeness_predictor_per_visit( @@ -39,30 +39,17 @@ def compute_completeness_predictor_per_visit( note_types: Union[str, Dict[str, str]], hdfs_user_path: str, ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - extra_data : Data, optional - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData]. This is not OMOP-standardized data but data needed to associate note with UF and Pole. If not provided, it will only compute the predictor for hospitals. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - note_types : Union[str, Dict[str, str]], optional - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_visit`` algorithm computes $c_(t)$ the availability of clinical documents linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. """ + self._metrics = ["c", "n_visit", "n_visit_with_note"] check_tables(data=data, required_tables=["note"]) @@ -127,7 +114,11 @@ def compute_completeness_predictor_per_visit( return compute_completeness(self, note_predictor, hdfs_user_path=hdfs_user_path) -def compute_completeness(self, note_predictor, hdfs_user_path: str = None): +def compute_completeness( + self, + note_predictor: DataFrame, + hdfs_user_path: str = None, +): partition_cols = self._index.copy() + ["date"] n_visit_with_note = ( @@ -166,7 +157,11 @@ def compute_completeness(self, note_predictor, hdfs_user_path: str = None): return note_predictor -def get_hospital_visit(note, visit_occurrence, care_site): +def get_hospital_visit( + note: DataFrame, + visit_occurrence: DataFrame, + care_site: DataFrame, +): note_hospital = note[["visit_occurrence_id", "note_type"]].drop_duplicates() note_hospital["has_note"] = True hospital_visit = visit_occurrence.merge( @@ -181,11 +176,11 @@ def get_hospital_visit(note, visit_occurrence, care_site): def get_visit_detail( - extra_data, - note, - visit_occurrence, - visit_detail, - care_site, + extra_data: Data, + note: DataFrame, + visit_occurrence: DataFrame, + visit_detail: DataFrame, + care_site: DataFrame, ): # pragma: no cover visit_detail = visit_detail.merge( visit_occurrence[["visit_occurrence_id", "stay_type", "length_of_stay"]], @@ -220,7 +215,11 @@ def get_visit_detail( return uf_visit, uc_visit, uh_visit -def get_pole_visit(uf_visit, care_site, care_site_relationship): # pragma: no cover +def get_pole_visit( + uf_visit: DataFrame, + care_site: DataFrame, + care_site_relationship: DataFrame, +): # pragma: no cover pole_visit = convert_uf_to_pole( table=uf_visit.drop( columns=["care_site_short_name", "care_site_level", "care_site_specialty"] diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 95b8ebd9..fdbf576d 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -11,26 +11,30 @@ class NoteProbe(BaseProbe): r""" - The ``NoteProbe`` computes $c(t)$ the availability of clinical documents linked to patients' administrative visit: + The ``NoteProbe`` computes $c(t)$ the availability of clinical documents - $$ - c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. + Parameters + ---------- + completeness_predictor: str + Algorithm used to compute the completeness predictor + **EXAMPLE**: ``"per_visit_default"`` Attributes ---------- + _completeness_predictor: str + Algorithm used to compute the completeness predictor + **VALUE**: ``"per_visit_default"`` _index: List[str] Variable from which data is grouped - - **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id"]`` + **VALUE**: ["care_site_level", "stay_type", "length_of_stay", "note_type", "care_site_id", "care_site_specialty", "specialties_set"]`` + _viz_config: List[str] + Dictionary of configuration for visualization purpose. + **VALUE**: ``{}`` """ def __init__( self, completeness_predictor: str = "per_visit_default", - _viz_config: Dict[str, str] = None, ): self._completeness_predictor = completeness_predictor self._index = [ @@ -42,8 +46,7 @@ def __init__( "care_site_specialty", "specialties_set", ] - if _viz_config is None: - self._viz_config = {} + self._viz_config = {} def compute_process( self, @@ -87,9 +90,20 @@ def compute_process( **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` stay_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - note_types : Union[str, Dict[str, str]], optional care_site_ids : List[int], optional **EXAMPLE**: `[8312056386, 8312027648]` + care_site_specialties : List[str], optional + **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` + specialties_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` + extra_data : Data + Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] + stay_durations : List[float], optional + **EXAMPLE**: `[1, 30]` + note_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"CRH": "crh", "Urgence": "urge"}` + hdfs_user_path : str, optional + **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None: self._index.remove("specialties_set") diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 5f85d4e1..ec4c2c1d 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -16,7 +16,7 @@ hospital_only, ) from edsteva.utils.framework import is_koalas, to -from edsteva.utils.typing import Data +from edsteva.utils.typing import Data, DataFrame def compute_completeness_predictor_per_visit( @@ -34,26 +34,15 @@ def compute_completeness_predictor_per_visit( stay_durations: List[float], hdfs_user_path: str, ): - """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - - Parameters - ---------- - data : Data - Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] - care_site_relationship : pd.DataFrame - DataFrame computed in the [``compute()``][edsteva.probes.base.BaseProbe.compute] that gives the hierarchy of the care site structure. - start_date : datetime, optional - **EXAMPLE**: `"2019-05-01"` - end_date : datetime, optional - **EXAMPLE**: `"2021-07-01"` - care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` - stay_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` - care_site_ids : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` - care_site_short_names : List[str], optional - **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] + + The ``per_visit`` algorithm computes $c_(t)$ the availability of administrative data related to visits for each care site according to time: + + $$ + c(t) = \frac{n_{visit}(t)}{n_{max}} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. """ self._metrics = ["c", "n_visit"] visit_occurrence = prepare_visit_occurrence( @@ -123,7 +112,11 @@ def compute_completeness_predictor_per_visit( return compute_completeness(self, visit_predictor, hdfs_user_path) -def compute_completeness(self, visit_predictor, hdfs_user_path): +def compute_completeness( + self, + visit_predictor: DataFrame, + hdfs_user_path: str, +): partition_cols = self._index.copy() + ["date"] n_visit = ( @@ -163,7 +156,10 @@ def compute_completeness(self, visit_predictor, hdfs_user_path): return visit_predictor -def get_hospital_visit(visit_occurrence, care_site): +def get_hospital_visit( + visit_occurrence: DataFrame, + care_site: DataFrame, +): hospital_visit = visit_occurrence.rename( columns={"visit_occurrence_id": "visit_id"} ) @@ -178,7 +174,11 @@ def get_hospital_visit(visit_occurrence, care_site): return hospital_visit -def get_uf_visit(visit_occurrence, visit_detail, care_site): +def get_uf_visit( + visit_occurrence: DataFrame, + visit_detail: DataFrame, + care_site: DataFrame, +): uf_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UF"]] uf_visit = uf_visit.merge( visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], @@ -192,7 +192,11 @@ def get_uf_visit(visit_occurrence, visit_detail, care_site): return uf_visit -def get_uc_visit(visit_occurrence, visit_detail, care_site): +def get_uc_visit( + visit_occurrence: DataFrame, + visit_detail: DataFrame, + care_site: DataFrame, +): uc_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UC"]] uc_visit = uc_visit.merge( visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], @@ -206,7 +210,11 @@ def get_uc_visit(visit_occurrence, visit_detail, care_site): return uc_visit -def get_uh_visit(visit_occurrence, visit_detail, care_site): +def get_uh_visit( + visit_occurrence: DataFrame, + visit_detail: DataFrame, + care_site: DataFrame, +): uh_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UH"]] uh_visit = uh_visit.merge( visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], @@ -220,7 +228,11 @@ def get_uh_visit(visit_occurrence, visit_detail, care_site): return uh_visit -def get_pole_visit(uf_visit, care_site, care_site_relationship): +def get_pole_visit( + uf_visit: DataFrame, + care_site: DataFrame, + care_site_relationship: DataFrame, +): pole_visit = convert_uf_to_pole( table=uf_visit.drop( columns=["care_site_short_name", "care_site_level", "care_site_specialty"] diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index a6339207..1029445d 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -11,26 +11,30 @@ class VisitProbe(BaseProbe): r""" - The ``VisitProbe`` computes $c_(t)$ the availability of administrative data related to visits for each care site according to time: + The ``VisitProbe`` computes $c_(t)$ the availability of administrative data according to time: - $$ - c(t) = \frac{n_{visit}(t)}{n_{99}} - $$ - - Where $n_{visit}(t)$ is the number of visits, $n_{99}$ is the $99^{th}$ percentile of visits and $t$ is the month. + Parameters + ---------- + completeness_predictor: str + Algorithm used to compute the completeness predictor + **EXAMPLE**: ``"per_visit_default"`` Attributes ---------- + _completeness_predictor: str + Algorithm used to compute the completeness predictor + **VALUE**: ``"per_visit_default"`` _index: List[str] Variable from which data is grouped - **VALUE**: ``["care_site_level", "stay_type", "length_of_stay", "care_site_id"]`` + _viz_config: List[str] + Dictionary of configuration for visualization purpose. + **VALUE**: ``{}`` """ def __init__( self, completeness_predictor: str = "per_visit_default", - _viz_config: Dict[str, str] = None, ): self._completeness_predictor = completeness_predictor self._index = [ @@ -41,8 +45,7 @@ def __init__( "care_site_specialty", "specialties_set", ] - if _viz_config is None: - self._viz_config = {} + self._viz_config = {} def compute_process( self, @@ -73,13 +76,21 @@ def compute_process( end_date : datetime, optional **EXAMPLE**: `"2021-07-01"` care_site_levels : List[str], optional - **EXAMPLE**: `["Hospital", "Pole", "UF"]` + **EXAMPLE**: `["Hospital", "Pole", "UF", "UC", "UH"]` stay_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Urg_and_consult": "urgences|consultation"}` or `"hospitalisés` care_site_ids : List[int], optional **EXAMPLE**: `[8312056386, 8312027648]` care_site_short_names : List[str], optional **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` + care_site_specialties : List[str], optional + **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` + specialties_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` + stay_durations : List[float], optional + **EXAMPLE**: `[1, 30]` + hdfs_user_path : str, optional + **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None: self._index.remove("specialties_set") diff --git a/edsteva/utils/checks.py b/edsteva/utils/checks.py index 7a9e21b3..3d8f9cc6 100644 --- a/edsteva/utils/checks.py +++ b/edsteva/utils/checks.py @@ -71,7 +71,7 @@ def check_tables(data: Data, required_tables: List[str]): ) -def check_conditon_source_systems( +def check_condition_source_systems( source_systems: List[str], valid_source_systems: List[str] = ["AREM", "ORBIS"] ): if source_systems and isinstance(source_systems, list): diff --git a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py index 98368294..f21f7e91 100644 --- a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py +++ b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py @@ -1,5 +1,6 @@ import uuid from copy import deepcopy +from typing import Dict import altair as alt import pandas as pd @@ -33,6 +34,18 @@ def normalized_probe_dashboard( care_site_level: str = CARE_SITE_LEVEL_NAMES["Hospital"], save_path: str = None, remove_singleton_bar_chart: bool = True, + x_axis_title: str = None, + y_axis_title: str = None, + main_chart_config: Dict[str, str] = None, + model_line_config: Dict[str, str] = None, + error_line_config: Dict[str, str] = None, + probe_line_config: Dict[str, str] = None, + estimates_selections: Dict[str, str] = None, + estimates_filters: Dict[str, str] = None, + vertical_bar_charts_config: Dict[str, str] = None, + horizontal_bar_charts_config: Dict[str, str] = None, + time_line_config: Dict[str, str] = None, + chart_style: Dict[str, float] = None, **kwargs, ): r"""Displays an interactive chart with: @@ -52,12 +65,34 @@ def normalized_probe_dashboard( **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` save_path : str, optional Folder path where to save the chart in HTML format. - - **EXAMPLE**: `"my_folder/my_file.html"` - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. + remove_singleton_bar_chart : bool, optional + If set to True, remove the bar charts with only one element + **EXAMPLE**: `True` + x_axis_title: str, optional, + Label name for the x axis. + y_axis_title: str, optional, + Label name for the y axis. + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. + model_line_config: Dict[str, str], optional + If not None, configuration used to construct the model line. + error_line_config: Dict[str, str], optional + If not None, configuration used to construct the error line. + probe_line_config: Dict[str, str], optional + If not None, configuration used to construct the probe line. + estimates_selections: Dict[str, str], optional + If not None, configuration used to construct the estimates selections. + estimates_filters: Dict[str, str], optional + If not None, configuration used to construct the estimates filters. + vertical_bar_charts_config: Dict[str, str], optional + If not None, configuration used to construct the vertical bar charts. + horizontal_bar_charts_config: Dict[str, str], optional + If not None, configuration used to construct the horizontal bar charts. + time_line_config: Dict[str, str], optional + If not None, configuration used to construct the time line. + chart_style: Dict[str, float], optional + If not None, configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` """ alt.data_transformers.disable_max_rows() @@ -77,40 +112,46 @@ def normalized_probe_dashboard( predictor.t_0 = predictor.t_0.dt.strftime("%Y-%m") probe_config = deepcopy(probe.get_viz_config("normalized_probe_dashboard")) - main_chart_config = probe_config["main_chart"] - time_line_config = probe_config["time_line"] - error_line_config = probe_config["error_line"] - vertical_bar_charts_config = probe_config["vertical_bar_charts"] - horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] - chart_style = probe_config["chart_style"] + model_config = deepcopy( + fitted_model.get_viz_config("normalized_probe_dashboard", predictor=predictor) + ) + if not main_chart_config: + main_chart_config = probe_config["main_chart"] + if not time_line_config: + time_line_config = probe_config["time_line"] + if not error_line_config: + error_line_config = probe_config["error_line"] + if not vertical_bar_charts_config: + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + vertical_bar_charts_config["y"] = ( + vertical_bar_charts_config["y"] + model_config["extra_vertical_bar_charts"] + ) + if not horizontal_bar_charts_config: + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + horizontal_bar_charts_config["x"] = ( + horizontal_bar_charts_config["x"] + + model_config["extra_horizontal_bar_charts"] + ) + if not chart_style: + chart_style = probe_config["chart_style"] + if not probe_line_config: + probe_line_config = model_config["probe_line"] + if not model_line_config: + model_line_config = model_config["model_line"] + if not estimates_selections: + estimates_selections = model_config["estimates_selections"] + if not estimates_filters: + estimates_filters = model_config["estimates_filters"] predictor["legend_predictor"] = main_chart_config["legend_title"] predictor["legend_error_band"] = error_line_config["legend_title"] predictor["legend_model"] = type(fitted_model).__name__ - predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, **kwargs ) for estimate in fitted_model._coefs + fitted_model._metrics: if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") - model_config = deepcopy( - deepcopy( - fitted_model.get_viz_config( - "normalized_probe_dashboard", predictor=predictor - ) - ) - ) - probe_line_config = model_config["probe_line"] - model_line_config = model_config["model_line"] - estimates_selections = model_config["estimates_selections"] - estimates_filters = model_config["estimates_filters"] - horizontal_bar_charts_config["x"] = ( - horizontal_bar_charts_config["x"] + model_config["extra_horizontal_bar_charts"] - ) - vertical_bar_charts_config["y"] = ( - vertical_bar_charts_config["y"] + model_config["extra_vertical_bar_charts"] - ) base = alt.Chart(predictor) time_line, time_selection = generate_time_line( @@ -159,6 +200,8 @@ def normalized_probe_dashboard( main_chart_config=main_chart_config, index_selection=index_selection, index_fields=index_fields, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) probe_line = generate_probe_line( main_chart=main_chart, probe_line_config=probe_line_config diff --git a/edsteva/viz/dashboards/probe/fitted_probe.py b/edsteva/viz/dashboards/probe/fitted_probe.py index 3c6e3dca..c5e8299a 100644 --- a/edsteva/viz/dashboards/probe/fitted_probe.py +++ b/edsteva/viz/dashboards/probe/fitted_probe.py @@ -19,11 +19,18 @@ def fitted_probe_dashboard( predictor: pd.DataFrame, - probe_config: Dict[str, str], - model_config: Dict[str, str], + remove_singleton_bar_chart: bool, legend_predictor: str, legend_model: str, - remove_singleton_bar_chart: bool, + x_axis_title: str, + y_axis_title: str, + main_chart_config: Dict[str, float], + model_line_config: Dict[str, str], + probe_line_config: Dict[str, str], + vertical_bar_charts_config: Dict[str, str], + horizontal_bar_charts_config: Dict[str, str], + time_line_config: Dict[str, str], + chart_style: Dict[str, float], ): r"""Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] @@ -31,39 +38,38 @@ def fitted_probe_dashboard( ---------- predictor : pd.DataFrame $c(t)$ computed in the Probe with its prediction $\hat{c}(t)$ - index : List[str] - Variable from which data is grouped + remove_singleton_bar_chart : bool, optional + If set to True, remove the bar charts with only one element + **EXAMPLE**: `True` + legend_predictor: str, optional, + Label name for the predictor legend. + legend_model: str, optional, + Label name for the model legend. x_axis_title: str, optional, Label name for the x axis. - x_grid: bool, optional, - If False, remove the grid for the x axis. y_axis_title: str, optional, Label name for the y axis. - y_grid: bool, optional, - If False, remove the grid for the y axis. - labelAngle: float, optional - The rotation angle of the label on the x_axis. - labelFontSize: float, optional - The font size of the labels (axis and legend). + main_chart_config: Dict[str, str], optional + Configuration used to construct the top main chart. + model_line_config: Dict[str, str], optional + Configuration used to construct the model line. + error_line_config: Dict[str, str], optional + Configuration used to construct the error line. + probe_line_config: Dict[str, str], optional + Configuration used to construct the probe line. + vertical_bar_charts_config: Dict[str, str], optional + Configuration used to construct the vertical bar charts. + horizontal_bar_charts_config: Dict[str, str], optional + Configuration used to construct the horizontal bar charts. + time_line_config: Dict[str, str], optional + Configuration used to construct the time line. + chart_style: Dict[str, float], optional + Configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` """ predictor["legend_predictor"] = legend_predictor predictor["legend_model"] = legend_model - main_chart_config = probe_config["main_chart"] - time_line_config = probe_config["time_line"] - vertical_bar_charts_config = probe_config["vertical_bar_charts"] - horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] - chart_style = probe_config["chart_style"] - - model_line_config = model_config["model_line"] - probe_line_config = model_config["probe_line"] - horizontal_bar_charts_config["x"] = ( - horizontal_bar_charts_config["x"] + model_config["extra_horizontal_bar_charts"] - ) - vertical_bar_charts_config["y"] = ( - vertical_bar_charts_config["y"] + model_config["extra_vertical_bar_charts"] - ) - base = alt.Chart(predictor) time_line, time_selection = generate_time_line( base=base, @@ -104,6 +110,8 @@ def fitted_probe_dashboard( main_chart_config=main_chart_config, index_selection=index_selection, index_fields=index_fields, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) probe_line = generate_probe_line( diff --git a/edsteva/viz/dashboards/probe/probe.py b/edsteva/viz/dashboards/probe/probe.py index 94ec3670..953a7631 100644 --- a/edsteva/viz/dashboards/probe/probe.py +++ b/edsteva/viz/dashboards/probe/probe.py @@ -17,8 +17,14 @@ def probe_only_dashboard( predictor: pd.DataFrame, - probe_config: Dict[str, str], remove_singleton_bar_chart: bool, + x_axis_title: str, + y_axis_title: str, + main_chart_config: Dict[str, float], + vertical_bar_charts_config: Dict[str, str], + horizontal_bar_charts_config: Dict[str, str], + time_line_config: Dict[str, str], + chart_style: Dict[str, float], ): """Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] @@ -26,26 +32,25 @@ def probe_only_dashboard( ---------- predictor : pd.DataFrame $c(t)$ computed in the Probe. - index : List[str] - Variable from which data is grouped. + remove_singleton_bar_chart : bool, optional + If set to True, remove the bar charts with only one element + **EXAMPLE**: `True` x_axis_title: str, optional, Label name for the x axis. - x_grid: bool, optional, - If False, remove the grid for the x axis. y_axis_title: str, optional, Label name for the y axis. - y_grid: bool, optional, - If False, remove the grid for the y axis. - show_n_events: bool, optional - show the number of events instead of the completeness predictor $c(t)$. - labelAngle: float, optional - The rotation angle of the label on the x_axis. + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. + vertical_bar_charts_config: Dict[str, str], optional + If not None, configuration used to construct the vertical bar charts. + horizontal_bar_charts_config: Dict[str, str], optional + If not None, configuration used to construct the horizontal bar charts. + time_line_config: Dict[str, str], optional + If not None, configuration used to construct the time line. + chart_style: Dict[str, float], optional + If not None, configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` """ - main_chart_config = probe_config["main_chart"] - time_line_config = probe_config["time_line"] - vertical_bar_charts_config = probe_config["vertical_bar_charts"] - horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] - chart_style = probe_config["chart_style"] base = alt.Chart(predictor) time_line, time_selection = generate_time_line( @@ -85,6 +90,8 @@ def probe_only_dashboard( main_chart_config=main_chart_config, index_selection=index_selection, index_fields=index_fields, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) main_chart = main_chart.mark_line() diff --git a/edsteva/viz/dashboards/probe/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py index 3a0c0047..dcce3cb8 100644 --- a/edsteva/viz/dashboards/probe/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -1,5 +1,6 @@ import uuid from copy import deepcopy +from typing import Dict import altair as alt from IPython.display import HTML, display @@ -16,9 +17,18 @@ def probe_dashboard( fitted_model: BaseModel = None, care_site_level: str = None, save_path: str = None, + remove_singleton_bar_chart: bool = True, legend_predictor: str = "Predictor c(t)", legend_model: str = "Model f(t)", - remove_singleton_bar_chart: bool = True, + x_axis_title: str = None, + y_axis_title: str = None, + main_chart_config: Dict[str, float] = None, + model_line_config: Dict[str, str] = None, + probe_line_config: Dict[str, str] = None, + vertical_bar_charts_config: Dict[str, str] = None, + horizontal_bar_charts_config: Dict[str, str] = None, + time_line_config: Dict[str, str] = None, + chart_style: Dict[str, float] = None, **kwargs, ): r"""Displays an interactive chart with: @@ -38,30 +48,50 @@ def probe_dashboard( **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` save_path : str, optional Folder path where to save the chart in HTML format. - **EXAMPLE**: `"my_folder/my_file.html"` + remove_singleton_bar_chart : bool, optional + If set to True, remove the bar charts with only one element + **EXAMPLE**: `True` + legend_predictor: str, optional, + Label name for the predictor legend. + legend_model: str, optional, + Label name for the model legend. x_axis_title: str, optional, Label name for the x axis. - x_grid: bool, optional, - If False, remove the grid for the x axis. y_axis_title: str, optional, Label name for the y axis. - y_grid: bool, optional, - If False, remove the grid for the y axis. - show_n_events: bool, optional - show the number of events instead of the completeness predictor $c(t)$. - labelAngle: float, optional - The rotation angle of the label on the x_axis. - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. + model_line_config: Dict[str, str], optional + If not None, configuration used to construct the model line. + probe_line_config: Dict[str, str], optional + If not None, configuration used to construct the probe line. + vertical_bar_charts_config: Dict[str, str], optional + If not None, configuration used to construct the vertical bar charts. + horizontal_bar_charts_config: Dict[str, str], optional + If not None, configuration used to construct the horizontal bar charts. + time_line_config: Dict[str, str], optional + If not None, configuration used to construct the time line. + chart_style: Dict[str, float], optional + If not None, configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` """ alt.data_transformers.enable("default") alt.data_transformers.disable_max_rows() probe_config = deepcopy(probe.get_viz_config("probe_dashboard")) + if not main_chart_config: + main_chart_config = probe_config["main_chart"] + if not time_line_config: + time_line_config = probe_config["time_line"] + if not vertical_bar_charts_config: + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + if not horizontal_bar_charts_config: + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + if not chart_style: + chart_style = probe_config["chart_style"] + if fitted_model: predictor = fitted_model.predict(probe) else: @@ -74,19 +104,46 @@ def probe_dashboard( if fitted_model: model_config = deepcopy(fitted_model.get_viz_config("probe_dashboard")) + if not model_line_config: + model_line_config = model_config["model_line"] + if not probe_line_config: + probe_line_config = model_config["probe_line"] + if not vertical_bar_charts_config: + vertical_bar_charts_config["y"] = ( + vertical_bar_charts_config["y"] + + model_config["extra_vertical_bar_charts"] + ) + if not horizontal_bar_charts_config: + horizontal_bar_charts_config["x"] = ( + horizontal_bar_charts_config["x"] + + model_config["extra_horizontal_bar_charts"] + ) chart = fitted_probe_dashboard( predictor=predictor, - probe_config=probe_config, - model_config=model_config, legend_predictor=legend_predictor, legend_model=legend_model, remove_singleton_bar_chart=remove_singleton_bar_chart, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, + main_chart_config=main_chart_config, + model_line_config=model_line_config, + probe_line_config=probe_line_config, + vertical_bar_charts_config=vertical_bar_charts_config, + horizontal_bar_charts_config=horizontal_bar_charts_config, + time_line_config=time_line_config, + chart_style=chart_style, ) else: chart = probe_only_dashboard( predictor=predictor, - probe_config=probe_config, remove_singleton_bar_chart=remove_singleton_bar_chart, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, + main_chart_config=main_chart_config, + vertical_bar_charts_config=vertical_bar_charts_config, + horizontal_bar_charts_config=horizontal_bar_charts_config, + time_line_config=time_line_config, + chart_style=chart_style, ) vis_probe = "id" + uuid.uuid4().hex diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py index 685ff49d..91681231 100644 --- a/edsteva/viz/plots/estimates_densities/estimates_densities.py +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -2,7 +2,7 @@ from copy import deepcopy from datetime import datetime from functools import reduce -from typing import List, Union +from typing import Dict, List, Union import altair as alt @@ -22,14 +22,18 @@ def estimates_densities_plot( probe: BaseProbe, fitted_model: BaseModel, - save_path: str = None, care_site_level: str = None, stay_type: List[str] = None, care_site_id: List[int] = None, start_date: Union[datetime, str] = None, end_date: Union[datetime, str] = None, care_site_short_name: List[int] = None, + save_path: str = None, remove_singleton_bar_chart: bool = True, + vertical_bar_charts_config: Dict[str, str] = None, + horizontal_bar_charts_config: Dict[str, str] = None, + chart_style: Dict[str, float] = None, + y_axis_title: str = None, **kwargs, ): r"""Displays the density plot with the associated box plot of each estimate and metric computed in the input model. It can help you to set the thresholds. @@ -37,17 +41,37 @@ def estimates_densities_plot( Parameters ---------- + probe : BaseProbe + Class describing the completeness predictor $c(t)$ fitted_model : BaseModel Model with estimates of interest **EXAMPLE**: StepFunction Model with $(\hat{t_0}, \hat{c_0})$ + care_site_level : str, optional + **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` + stay_type : List[str], optional + **EXAMPLE**: `"All"` or `["All", "Urg"]` + care_site_id : List[int], optional + **EXAMPLE**: `[8312056386, 8312027648]` + start_date : datetime, optional + **EXAMPLE**: `"2019-05-01"` + end_date : datetime, optional + **EXAMPLE**: `"2021-07-01"` + care_site_short_name : List[int], optional + **EXAMPLE**: `"HOSPITAL XXXX"` save_path : str, optional Folder path where to save the chart in HTML format. - - **EXAMPLE**: `"my_folder/my_file.html"` - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. + remove_singleton_bar_chart : bool, optional + If set to True, remove the bar charts with only one element + **EXAMPLE**: `True` + vertical_bar_charts_config: Dict[str, str], optional + Configuration used to construct the vertical bar charts. + horizontal_bar_charts_config: Dict[str, str], optional + Configuration used to construct the horizontal bar charts. + chart_style: Dict[str, float], optional + Configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` + y_axis_title: str, optional, + Label name for the y axis. """ alt.data_transformers.disable_max_rows() @@ -63,7 +87,7 @@ def estimates_densities_plot( **kwargs, ) estimates = fitted_model.estimates.copy() - estimates = filter_predictor( + predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, stay_type=stay_type, @@ -73,10 +97,17 @@ def estimates_densities_plot( end_date=None, **kwargs, ) + estimates = estimates.merge( + predictor[probe._index + ["care_site_short_name"]].drop_duplicates(), + on=probe._index, + ) probe_config = deepcopy(probe.get_viz_config("estimates_densities_plot")) - vertical_bar_charts_config = probe_config["vertical_bar_charts"] - horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] - chart_style = probe_config["chart_style"] + if not vertical_bar_charts_config: + vertical_bar_charts_config = probe_config["vertical_bar_charts"] + if not horizontal_bar_charts_config: + horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + if not chart_style: + chart_style = probe_config["chart_style"] quantitative_estimates = [] time_estimates = [] @@ -99,11 +130,8 @@ def estimates_densities_plot( ) .mark_area() .encode( - x=alt.X( - "{}:Q".format(estimate), - title=None, - ), - y="Density:Q", + x=alt.X("{}:Q".format(estimate), title=None), + y=alt.Y("Density:Q", title=y_axis_title), ) ) + alt.Chart(estimates) @@ -150,6 +178,7 @@ def estimates_densities_plot( y=alt.Y( "count({}):Q".format(estimate), axis=alt.Axis(tickMinStep=1), + title=y_axis_title, ), ) ) diff --git a/edsteva/viz/plots/normalized_probe/normalized_probe.py b/edsteva/viz/plots/normalized_probe/normalized_probe.py index 96c8b5a0..c2a33c57 100644 --- a/edsteva/viz/plots/normalized_probe/normalized_probe.py +++ b/edsteva/viz/plots/normalized_probe/normalized_probe.py @@ -1,6 +1,6 @@ from copy import deepcopy from datetime import datetime -from typing import List, Union +from typing import Dict, List, Union import altair as alt import pandas as pd @@ -9,6 +9,7 @@ from edsteva.probes.base import BaseProbe from edsteva.viz.utils import ( add_estimates_filters, + configure_style, create_groupby_selection, filter_predictor, generate_error_line, @@ -32,8 +33,15 @@ def normalized_probe_plot( t_min: int = None, t_max: int = None, save_path: str = None, - labelFontSize: float = 12, - titleFontSize: float = 13, + x_axis_title: str = None, + y_axis_title: str = None, + main_chart_config: Dict[str, float] = None, + model_line_config: Dict[str, str] = None, + probe_line_config: Dict[str, str] = None, + error_line_config: Dict[str, str] = None, + estimates_selections: Dict[str, str] = None, + estimates_filters: Dict[str, str] = None, + chart_style: Dict[str, float] = None, **kwargs, ): r"""Displays a chart with the aggregated normalized completeness predictor $\frac{c(\Delta t)}{c_0}$ over normalized time $\Delta t = t - t_0$. It represents the overall deviation from the Model. @@ -46,22 +54,6 @@ def normalized_probe_plot( Class describing the completeness predictor $c(t)$ fitted_model : BaseModel Model fitted to the probe - t_0_max : datetime, optional - Initial value for the $t_0$ threshold. If None, it will be set as the maximum possible $t_0$ value. - - **EXAMPLE**: `"2022-01"`, `datetime(2020, 2, 1)` - error_max : float, optional - Initial value for the $error$ threshold. If None, it will be set as the maximum possible error value. - - **EXAMPLE**: `0.02`, `0.25` - c_0_min : float, optional - Initial value for the $c_0$ threshold. If None, it will be set as 0. - - **EXAMPLE**: `0.1`, `0.8` - stay_type : List[str], optional - **EXAMPLE**: `"All"` or `["All", "Urg"]` - care_site_id : List[int], optional - **EXAMPLE**: `[8312056386, 8312027648]` care_site_level : str, optional **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` stay_type : List[str], optional @@ -74,20 +66,33 @@ def normalized_probe_plot( **EXAMPLE**: `"2021-07-01"` care_site_short_name : List[int], optional **EXAMPLE**: `"HOSPITAL XXXX"` + t_min : int, optional + Minimal difference with $t_0$ in month $\Delta t_{min}$ + **EXAMPLE**: `-24` + t_max : int, optional + Maximal difference with $t_0$ in month $\Delta t_{max}$ + **EXAMPLE**: `24` save_path : str, optional Folder path where to save the chart in HTML format. - - **EXAMPLE**: `"my_folder/my_file.html"` x_axis_title: str, optional, - Label name for the x axis + Label name for the x axis. y_axis_title: str, optional, - Label name for the y axis - show_per_care_site: bool, optional - If True, the average completeness predictor $c(t)$ is computed for each care site independently. If False, it is computed over all care sites. - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. + Label name for the y axis. + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. + model_line_config: Dict[str, str], optional + If not None, configuration used to construct the model line. + error_line_config: Dict[str, str], optional + If not None, configuration used to construct the error line. + probe_line_config: Dict[str, str], optional + If not None, configuration used to construct the probe line. + estimates_selections: Dict[str, str], optional + If not None, configuration used to construct the estimates selections. + estimates_filters: Dict[str, str], optional + If not None, configuration used to construct the estimates filters. + chart_style: Dict[str, float], optional + If not None, configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` """ predictor = probe.predictor.copy() @@ -97,8 +102,23 @@ def normalized_probe_plot( predictor = predictor.merge(estimates, on=probe._index) probe_config = deepcopy(probe.get_viz_config("normalized_probe_plot")) - main_chart_config = probe_config["main_chart"] - error_line_config = probe_config["error_line"] + model_config = deepcopy( + fitted_model.get_viz_config("normalized_probe_dashboard", predictor=predictor) + ) + if not probe_line_config: + probe_line_config = model_config["probe_line"] + if not model_line_config: + model_line_config = model_config["model_line"] + if not estimates_selections: + estimates_selections = model_config["estimates_selections"] + if not estimates_filters: + estimates_filters = model_config["estimates_filters"] + if not main_chart_config: + main_chart_config = probe_config["main_chart"] + if not error_line_config: + error_line_config = probe_config["error_line"] + if not chart_style: + chart_style = probe_config["chart_style"] predictor["normalized_date"] = month_diff( predictor["date"], predictor["t_0"] @@ -123,17 +143,6 @@ def normalized_probe_plot( for estimate in fitted_model._coefs + fitted_model._metrics: if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") - model_config = deepcopy( - deepcopy( - fitted_model.get_viz_config( - "normalized_probe_dashboard", predictor=predictor - ) - ) - ) - probe_line_config = model_config["probe_line"] - model_line_config = model_config["model_line"] - estimates_selections = model_config["estimates_selections"] - estimates_filters = model_config["estimates_filters"] if t_min: predictor = predictor[predictor.normalized_date >= t_min] @@ -159,6 +168,8 @@ def normalized_probe_plot( main_chart_config=main_chart_config, index_selection=index_selection, index_fields=index_fields, + x_axis_title=x_axis_title, + y_axis_title=y_axis_title, ) probe_line = generate_probe_line( main_chart=main_chart, probe_line_config=probe_line_config @@ -176,11 +187,11 @@ def normalized_probe_plot( for estimate_selection in estimates_selections: main_chart = main_chart.add_selection(estimate_selection) + main_chart = configure_style(chart=main_chart, chart_style=chart_style) + if save_path: save_html( - obj=main_chart.configure_axis( - labelFontSize=labelFontSize, titleFontSize=titleFontSize - ).configure_legend(labelFontSize=labelFontSize), + obj=main_chart, filename=save_path, ) diff --git a/edsteva/viz/plots/probe/fitted_probe.py b/edsteva/viz/plots/probe/fitted_probe.py index 998fa5a4..5003263b 100644 --- a/edsteva/viz/plots/probe/fitted_probe.py +++ b/edsteva/viz/plots/probe/fitted_probe.py @@ -13,13 +13,14 @@ def fitted_probe_line( predictor: pd.DataFrame, - probe_config: Dict[str, str], - model_config: Dict[str, str], indexes: List[Dict[str, str]], - legend_predictor: str = "Predictor c(t)", - legend_model: str = "Model f(t)", - x_axis_title: str = None, - y_axis_title: str = None, + legend_predictor: str, + legend_model: str, + x_axis_title: str, + y_axis_title: str, + main_chart_config: Dict[str, float], + model_line_config: Dict[str, str], + probe_line_config: Dict[str, str], ): r"""Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] @@ -27,26 +28,25 @@ def fitted_probe_line( ---------- predictor : pd.DataFrame $c(t)$ computed in the Probe with its prediction $\hat{c}(t)$ - index : List[str] + indexes : List[str] Variable from which data is grouped + legend_predictor: str, optional, + Label name for the predictor legend. + legend_model: str, optional, + Label name for the model legend. x_axis_title: str, optional, Label name for the x axis. - x_grid: bool, optional, - If False, remove the grid for the x axis. y_axis_title: str, optional, Label name for the y axis. - y_grid: bool, optional, - If False, remove the grid for the y axis. - labelAngle: float, optional - The rotation angle of the label on the x_axis. - labelFontSize: float, optional - The font size of the labels (axis and legend). + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. + model_line_config: Dict[str, str], optional + If not None, configuration used to construct the model line. + probe_line_config: Dict[str, str], optional + If not None, configuration used to construct the probe line. """ predictor["legend_predictor"] = legend_predictor predictor["legend_model"] = legend_model - main_chart_config = probe_config["main_chart"] - model_line_config = model_config["model_line"] - probe_line_config = model_config["probe_line"] base = alt.Chart(predictor) diff --git a/edsteva/viz/plots/probe/probe.py b/edsteva/viz/plots/probe/probe.py index a50dc941..9dbcd603 100644 --- a/edsteva/viz/plots/probe/probe.py +++ b/edsteva/viz/plots/probe/probe.py @@ -8,10 +8,10 @@ def probe_line( predictor: pd.DataFrame, - probe_config: Dict[str, str], indexes: List[Dict[str, str]], - x_axis_title: str = None, - y_axis_title: str = None, + x_axis_title: str, + y_axis_title: str, + main_chart_config: Dict[str, float], ): """Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] @@ -19,23 +19,19 @@ def probe_line( ---------- predictor : pd.DataFrame $c(t)$ computed in the Probe - index : List[str] + indexes : List[str] Variable from which data is grouped + legend_predictor: str, optional, + Label name for the predictor legend. + legend_model: str, optional, + Label name for the model legend. x_axis_title: str, optional, Label name for the x axis. - x_grid: bool, optional, - If False, remove the grid for the x axis. y_axis_title: str, optional, Label name for the y axis. - y_grid: bool, optional, - If False, remove the grid for the y axis. - show_n_events: bool, optional - show the number of visit instead of the completeness predictor $c(t)$ - labelAngle: float, optional - The rotation angle of the label on the x_axis. + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. """ - main_chart_config = probe_config["main_chart"] - base = alt.Chart(predictor) index_selection, index_fields = create_groupby_selection( diff --git a/edsteva/viz/plots/probe/wrapper.py b/edsteva/viz/plots/probe/wrapper.py index febefe90..3cbb62c0 100644 --- a/edsteva/viz/plots/probe/wrapper.py +++ b/edsteva/viz/plots/probe/wrapper.py @@ -1,6 +1,6 @@ from copy import deepcopy from datetime import datetime -from typing import List +from typing import Dict, List import altair as alt @@ -25,6 +25,10 @@ def probe_plot( legend_model: str = "Model f(t)", x_axis_title: str = None, y_axis_title: str = None, + main_chart_config: Dict[str, float] = None, + model_line_config: Dict[str, str] = None, + probe_line_config: Dict[str, str] = None, + chart_style: Dict[str, float] = None, **kwargs, ): r""" @@ -51,32 +55,33 @@ def probe_plot( **EXAMPLE**: `"HOSPITAL XXXX"` save_path : str, optional Folder path where to save the chart in HTML format. - **EXAMPLE**: `"my_folder/my_file.html"` + legend_predictor: str, optional, + Label name for the predictor legend. + legend_model: str, optional, + Label name for the model legend. x_axis_title: str, optional, Label name for the x axis. - x_grid: bool, optional, - If False, remove the grid for the x axis. y_axis_title: str, optional, Label name for the y axis. - y_grid: bool, optional, - If False, remove the grid for the y axis. - show_n_events: bool, optional - If True, compute the sum of the number of visit instead of the mean of the completeness predictor $c(t)$. - show_per_care_site: bool, optional - If True, the average completeness predictor $c(t)$ is computed for each care site independently. If False, it is computed over all care sites. - labelAngle: float, optional - The rotation angle of the label on the x_axis. - labelFontSize: float, optional - The font size of the labels (axis and legend). - titleFontSize: float, optional - The font size of the titles. + main_chart_config: Dict[str, str], optional + If not None, configuration used to construct the top main chart. + model_line_config: Dict[str, str], optional + If not None, configuration used to construct the model line. + probe_line_config: Dict[str, str], optional + If not None, configuration used to construct the probe line. + chart_style: Dict[str, float], optional + If not None, configuration used to configure the chart style. + **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` """ alt.data_transformers.enable("default") alt.data_transformers.disable_max_rows() probe_config = deepcopy(probe.get_viz_config("probe_plot")) - chart_style = probe_config["chart_style"] + if not main_chart_config: + main_chart_config = probe_config["main_chart"] + if not chart_style: + chart_style = probe_config["chart_style"] predictor = probe.predictor.copy() indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) @@ -104,23 +109,28 @@ def probe_plot( if fitted_model: model_config = deepcopy(fitted_model.get_viz_config("probe_plot")) + if not model_line_config: + model_line_config = model_config["model_line"] + if not probe_line_config: + probe_line_config = model_config["probe_line"] chart = fitted_probe_line( predictor=predictor, - probe_config=probe_config, - model_config=model_config, indexes=indexes, legend_predictor=legend_predictor, legend_model=legend_model, x_axis_title=x_axis_title, y_axis_title=y_axis_title, + main_chart_config=main_chart_config, + model_line_config=model_line_config, + probe_line_config=probe_line_config, ) else: chart = probe_line( predictor=predictor, - probe_config=probe_config, indexes=indexes, x_axis_title=x_axis_title, y_axis_title=y_axis_title, + main_chart_config=main_chart_config, ) if save_path: diff --git a/tests/test_model.py b/tests/test_model.py index 16860a03..89acc250 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -1,22 +1,19 @@ import os -from functools import partial import pandas as pd import pytest from edsteva import CACHE_DIR from edsteva.io import SyntheticData -from edsteva.metrics import error, error_after_t0 from edsteva.models.rectangle_function import RectangleFunction from edsteva.models.step_function import StepFunction -from edsteva.models.step_function import algos as step_algos from edsteva.probes import NoteProbe, VisitProbe from edsteva.utils.loss_functions import l1_loss -from edsteva.viz.dashboards import estimates_dashboard, predictor_dashboard +from edsteva.viz.dashboards import normalized_probe_dashboard, probe_dashboard from edsteva.viz.plots import ( - plot_estimates_densities, - plot_normalized_probe, - plot_probe, + estimates_densities_plot, + normalized_probe_plot, + probe_plot, ) pytestmark = pytest.mark.filterwarnings("ignore") @@ -37,20 +34,16 @@ def test_step_function_visit_occurence(): care_site_short_names=["Hôpital-1", "Hôpital-2"], ) - visit_model = StepFunction() + visit_model = StepFunction(algo="quantile") visit_model.fit( probe=visit, - algo=step_algos.quantile, - metric_functions=[error, error_after_t0], + metric_functions=["error", "error_after_t0"], start_date=data.t_min, end_date=data.t_max, ) - loss_l1 = partial(step_algos.loss_minimization, loss_function=l1_loss) - visit_model.fit( - probe=visit, - algo=loss_l1, - ) + visit_model = StepFunction(algo="loss_minimization") + visit_model.fit(probe=visit, loss_function=l1_loss) visit_model.fit( probe=visit, @@ -208,23 +201,14 @@ def test_viz_visit(data, Model): end_date=data.t_max, ) - plot_probe( - probe=visit, - care_site_level="Hospital", - start_date=data.t_min, - end_date=data.t_max, - ) - - plot_probe( + probe_plot( probe=visit, care_site_level="Hospital", start_date=data.t_min, end_date=data.t_max, - show_n_visit=True, - show_per_care_site=False, ) - plot_probe( + probe_plot( probe=visit, fitted_model=visit_model, care_site_level="Hospital", @@ -232,7 +216,7 @@ def test_viz_visit(data, Model): end_date=data.t_max, ) - plot_normalized_probe( + normalized_probe_plot( probe=visit, fitted_model=visit_model, care_site_level="Hospital", @@ -241,21 +225,28 @@ def test_viz_visit(data, Model): stay_type="ALL", care_site_id="1", care_site_short_name="Hôpital-1", - t_0_max="2020", - c_0_min=-5, - error_max=0.54, + t_min=-24, + t_max=24, ) - plot_estimates_densities( + estimates_densities_plot( + probe=visit, fitted_model=visit_model, ) - predictor_dashboard( - probe=visit, fitted_model=visit_model, care_site_level="Hospital" + probe_dashboard( + probe=visit, + fitted_model=visit_model, + care_site_level="Hospital", ) - predictor_dashboard(probe=visit, care_site_level="Hospital") + probe_dashboard( + probe=visit, + care_site_level="Hospital", + ) - estimates_dashboard( - probe=visit, fitted_model=visit_model, care_site_level="Hospital" + normalized_probe_dashboard( + probe=visit, + fitted_model=visit_model, + care_site_level="Hospital", ) diff --git a/tests/test_probes.py b/tests/test_probes.py index c5712447..c37cf722 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -5,7 +5,7 @@ from edsteva import CACHE_DIR, improve_performances from edsteva.io import SyntheticData -from edsteva.probes import ConditionProbe, NoteProbe, VisitProbe +from edsteva.probes import BiologyProbe, ConditionProbe, NoteProbe, VisitProbe from edsteva.utils.checks import MissingColumnError, MissingTableError pytestmark = pytest.mark.filterwarnings("ignore") @@ -43,48 +43,78 @@ def test_missing_checks(): params = [ dict( + visit_predictor="per_visit_default", + note_predictor="per_visit_default", + condition_predictor="per_visit_default", + biology_predictor="per_visit_default", only_impute_per_care_site=True, impute_missing_dates=True, - care_site_levels="UF", + care_site_levels=["UF", "UC", "UH"], care_site_short_names=None, care_site_ids=None, + care_site_specialties=["REA ADULTE", "PSYCHIATRIE"], + specialties_sets=None, + stay_durations=[1], note_types={"ALL": ".*"}, stay_types=None, diag_types=None, condition_types={"ALL": ".*"}, source_systems=["ORBIS"], + concepts_sets={ + "entity 1": "A0", + "entity 2": "A1", + "entity 3": "A2", + "entity 4": "A3", + "entity 5": "A4", + }, start_date=None, end_date=None, test_save=False, module="koalas", ), dict( + visit_predictor="per_visit_default", + note_predictor="per_note_default", + condition_predictor="per_condition_default", + biology_predictor="per_measurement_default", only_impute_per_care_site=False, impute_missing_dates=True, care_site_levels="Pole", care_site_ids="1", care_site_short_names="Hôpital-1", + care_site_specialties="PSYCHIATRIE", + specialties_sets={"All": ".*"}, + stay_durations=None, note_types="CRH", stay_types="hospitalisés", diag_types="DP", condition_types="C", source_systems=["ORBIS"], + concepts_sets={"All": ".*"}, start_date="2010-01-03", end_date=None, test_save=False, module="pandas", ), dict( + visit_predictor="per_visit_default", + note_predictor="per_visit_default", + condition_predictor="per_visit_default", + biology_predictor="per_visit_default", only_impute_per_care_site=False, impute_missing_dates=False, care_site_levels=["Hospital", "UF", "Pole"], care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], + care_site_specialties=None, + specialties_sets=None, + stay_durations=None, stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, note_types={"ALL": ".*", "CRH": "CRH", "Urg": "urg"}, diag_types={"ALL": ".*", "DP/DR": "DP|DR"}, condition_types={"ALL": ".*", "Cancer": "C"}, source_systems=["ORBIS"], + concepts_sets={"entity 1": "A0"}, start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, @@ -100,7 +130,7 @@ def test_compute_visit_probe(data, params): data.convert_to_koalas() elif params["module"] == "pandas": data.reset_to_pandas() - visit = VisitProbe() + visit = VisitProbe(completeness_predictor=params["visit_predictor"]) visit.compute( data=data, only_impute_per_care_site=params["only_impute_per_care_site"], @@ -110,6 +140,9 @@ def test_compute_visit_probe(data, params): stay_types=params["stay_types"], care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], + care_site_specialties=params["care_site_specialties"], + specialties_sets=params["specialties_sets"], + stay_durations=params["stay_durations"], ) if params["test_save"]: @@ -149,7 +182,7 @@ def test_compute_note_probe(data, params): data.convert_to_koalas() elif params["module"] == "pandas": data.reset_to_pandas() - note = NoteProbe() + note = NoteProbe(completeness_predictor=params["note_predictor"]) note.compute( data=data, only_impute_per_care_site=params["only_impute_per_care_site"], @@ -157,9 +190,12 @@ def test_compute_note_probe(data, params): start_date=params["start_date"], end_date=params["end_date"], stay_types=params["stay_types"], - note_types=params["note_types"], care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], + care_site_specialties=params["care_site_specialties"], + specialties_sets=params["specialties_sets"], + stay_durations=params["stay_durations"], + note_types=params["note_types"], ) @@ -170,7 +206,7 @@ def test_compute_condition_probe(data, params): data.convert_to_koalas() elif params["module"] == "pandas": data.reset_to_pandas() - condition = ConditionProbe() + condition = ConditionProbe(completeness_predictor=params["condition_predictor"]) condition.compute( data=data, only_impute_per_care_site=params["only_impute_per_care_site"], @@ -178,9 +214,36 @@ def test_compute_condition_probe(data, params): start_date=params["start_date"], end_date=params["end_date"], stay_types=params["stay_types"], + care_site_ids=params["care_site_ids"], + care_site_short_names=params["care_site_short_names"], + care_site_specialties=params["care_site_specialties"], + specialties_sets=params["specialties_sets"], + stay_durations=params["stay_durations"], diag_types=params["diag_types"], condition_types=params["condition_types"], source_systems=params["source_systems"], + ) + + +@pytest.mark.parametrize("data", [data_step, data_rect]) +@pytest.mark.parametrize("params", params) +def test_compute_biology_probe(data, params): + if params["module"] == "koalas": + data.convert_to_koalas() + elif params["module"] == "pandas": + data.reset_to_pandas() + biology = BiologyProbe(completeness_predictor=params["biology_predictor"]) + biology.compute( + data=data, + only_impute_per_care_site=params["only_impute_per_care_site"], + impute_missing_dates=params["impute_missing_dates"], + start_date=params["start_date"], + end_date=params["end_date"], + stay_types=params["stay_types"], care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], + care_site_specialties=params["care_site_specialties"], + specialties_sets=params["specialties_sets"], + stay_durations=params["stay_durations"], + concepts_sets=params["concepts_sets"], ) From 2c2ff5ddece4c03189338bec5d7038e1abd2670b Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 10 May 2023 11:53:11 +0200 Subject: [PATCH 029/127] Ready for testing on real data --- edsteva/__init__.py | 2 +- edsteva/io/synthetic/biology.py | 141 ++++ edsteva/io/synthetic/care_site.py | 42 ++ edsteva/io/synthetic/note.py | 139 ++++ edsteva/io/synthetic/synthetic.py | 343 +--------- edsteva/io/synthetic/utils.py | 41 -- edsteva/io/synthetic/visit.py | 134 ++++ edsteva/models/base.py | 45 +- edsteva/probes/base.py | 41 +- edsteva/probes/biology/biology.py | 13 +- .../per_measurement.py | 1 + .../completeness_predictors/per_visit.py | 62 +- edsteva/probes/biology/viz_config.py | 300 -------- .../probes/biology/viz_configs/__init__.py | 29 +- .../biology/viz_configs/per_visit/__init__.py | 5 + .../biology/viz_configs/per_visit/defaults.py | 43 +- .../per_visit/estimates_densities_plot.py | 3 - .../per_visit/normalized_probe_dashboard.py | 3 - .../per_visit/normalized_probe_plot.py | 3 - .../viz_configs/per_visit/probe_dashboard.py | 3 - .../viz_configs/per_visit/probe_plot.py | 3 - .../completeness_predictors/per_condition.py | 7 +- .../completeness_predictors/per_visit.py | 20 +- edsteva/probes/condition/condition.py | 13 +- .../note/completeness_predictors/per_note.py | 3 +- .../note/completeness_predictors/per_visit.py | 11 +- edsteva/probes/note/note.py | 13 +- edsteva/probes/utils/filter_df.py | 114 +--- edsteva/probes/utils/prepare_df.py | 5 +- edsteva/probes/utils/utils.py | 91 +++ .../completeness_predictors/per_visit.py | 1 + edsteva/probes/visit/visit.py | 11 +- edsteva/probes/visit/viz_config.py | 275 -------- edsteva/utils/checks.py | 24 +- edsteva/utils/framework.py | 4 +- edsteva/utils/registry.py | 82 --- edsteva/viz/dashboards/probe/wrapper.py | 31 +- .../estimates_densities.py | 2 +- .../normalized_probe/normalized_probe.py | 2 +- edsteva/viz/utils.py | 12 - mkdocs.yml | 21 +- tests/test_convert.py | 5 +- tests/test_init.py | 8 + tests/test_model.py | 202 ++---- tests/test_probes.py | 642 ++++++++++++++++-- tests/test_synthetic.py | 69 ++ tests/test_viz.py | 200 ++++++ 47 files changed, 1776 insertions(+), 1488 deletions(-) create mode 100644 edsteva/io/synthetic/biology.py create mode 100644 edsteva/io/synthetic/care_site.py create mode 100644 edsteva/io/synthetic/note.py create mode 100644 edsteva/io/synthetic/visit.py delete mode 100644 edsteva/probes/biology/viz_config.py create mode 100644 edsteva/probes/biology/viz_configs/per_visit/__init__.py delete mode 100644 edsteva/probes/visit/viz_config.py delete mode 100644 edsteva/utils/registry.py create mode 100644 tests/test_init.py create mode 100644 tests/test_synthetic.py create mode 100644 tests/test_viz.py diff --git a/edsteva/__init__.py b/edsteva/__init__.py index 3ae6e944..0383f4d3 100644 --- a/edsteva/__init__.py +++ b/edsteva/__init__.py @@ -43,7 +43,7 @@ def set_env_variables() -> None: if LooseVersion(pyarrow.__version__) >= LooseVersion("0.15"): os.environ["ARROW_PRE_0_15_IPC_FORMAT"] = "1" - if LooseVersion(pyarrow.__version__) >= LooseVersion("2.0.0"): + if LooseVersion(pyarrow.__version__) >= LooseVersion("2.0.0"): # pragma: no cover os.environ["PYARROW_IGNORE_TIMEZONE"] = "0" diff --git a/edsteva/io/synthetic/biology.py b/edsteva/io/synthetic/biology.py new file mode 100644 index 00000000..e056779c --- /dev/null +++ b/edsteva/io/synthetic/biology.py @@ -0,0 +1,141 @@ +import numpy as np +import pandas as pd +from loguru import logger + +from edsteva.io.synthetic.utils import ( + generate_events_after_t0, + generate_events_after_t1, + generate_events_around_t0, + generate_events_around_t1, + generate_events_before_t0, +) + + +def generate_bio( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + bio_date_col: str, + unit: str, + concept_code: str, + mode: str, +): + if mode == "step": + return _generate_bio_step( + t_start=t_start, + t_end=t_end, + n_events=n_events, + increase_time=increase_time, + increase_ratio=increase_ratio, + bio_date_col=bio_date_col, + unit=unit, + concept_code=concept_code, + ) + if mode == "rect": + return _generate_bio_rect( + t_start=t_start, + t_end=t_end, + n_events=n_events, + increase_time=increase_time, + increase_ratio=increase_ratio, + bio_date_col=bio_date_col, + unit=unit, + concept_code=concept_code, + ) + + +def _generate_bio_step( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + bio_date_col: str, + unit: str, + concept_code: str, +): + t0 = np.random.randint(t_start + increase_time, t_end - increase_time) + params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_events, + t0=t0, + increase_ratio=increase_ratio, + increase_time=increase_time, + ) + df = pd.concat( + [ + generate_events_before_t0(**params), + generate_events_after_t0(**params), + generate_events_around_t0(**params), + ] + ).to_frame() + df.columns = [bio_date_col] + df["unit_source_value"] = unit + df["measurement_source_concept_id"] = concept_code + df["t_0_min"] = t0 - increase_time / 2 + df["t_0_max"] = t0 + increase_time / 2 + logger.debug("Generate measurement deploying as step function") + + return df + + +def _generate_bio_rect( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + bio_date_col: str, + unit: str, + concept_code: str, +): + t0 = np.random.randint( + t_start + increase_time, (t_end + t_start) / 2 - increase_time + ) + t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) + t0_params = dict( + t_start=t_start, + t_end=t1 - increase_time / 2, + n_events=n_events, + t0=t0, + increase_ratio=increase_ratio, + increase_time=increase_time, + ) + before_t0 = generate_events_before_t0(**t0_params) + around_t0 = generate_events_around_t0(**t0_params) + # Raise n_visit to enforce a rectangle shape + between_t0_t1 = generate_events_after_t0(**t0_params) + t1_params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_events, + t1=t1, + increase_time=increase_time, + increase_ratio=increase_ratio, + ) + around_t1 = generate_events_around_t1(**t1_params) + after_t1 = generate_events_after_t1(**t1_params) + + df = pd.concat( + [ + before_t0, + around_t0, + between_t0_t1, + around_t1, + after_t1, + ] + ).to_frame() + + df.columns = [bio_date_col] + df["unit_source_value"] = unit + df["measurement_source_concept_id"] = concept_code + df["t_0_min"] = t0 - increase_time / 2 + df["t_0_max"] = t0 + increase_time / 2 + df["t_1_min"] = t1 - increase_time / 2 + df["t_1_max"] = t1 + increase_time / 2 + logger.debug("Generate measurement deploying as rectangle function") + + return df diff --git a/edsteva/io/synthetic/care_site.py b/edsteva/io/synthetic/care_site.py new file mode 100644 index 00000000..6fb94927 --- /dev/null +++ b/edsteva/io/synthetic/care_site.py @@ -0,0 +1,42 @@ +import pandas as pd + + +def generate_care_site_tables(structure, parent=None, final=True): + cs = [] + fr = [] + for key, value in structure.items(): + this_cs = _split_name_id(key) + cs.append(this_cs) + + if parent is not None: + this_fr = dict( + fact_id_1=this_cs["care_site_id"], + fact_id_2=parent["care_site_id"], + ) + fr.append(this_fr) + + if value is not None: + next_cs, next_fr = generate_care_site_tables( + value, parent=this_cs, final=False + ) + cs.extend(next_cs) + fr.extend(next_fr) + + if final: + cs = pd.DataFrame(cs) + fr = pd.DataFrame(fr) + fr["domain_concept_id_1"] = 57 + fr["relationship_concept_id"] = 46233688 + + return cs, fr + + +def _split_name_id(string): + splitted = string.split("-") + + # Name - Type - ID + return dict( + care_site_short_name=string, + care_site_type_source_value=splitted[0], + care_site_id=splitted[1], + ) diff --git a/edsteva/io/synthetic/note.py b/edsteva/io/synthetic/note.py new file mode 100644 index 00000000..a2094e46 --- /dev/null +++ b/edsteva/io/synthetic/note.py @@ -0,0 +1,139 @@ +import numpy as np +import pandas as pd +from loguru import logger + + +def generate_note( + visit_care_site: pd.DataFrame, + note_type: str, + note_date_col: str, + id_visit_col: str, + note_type_col: str, + t0_visit: int, + care_site_id: int, + date_col: str, + mode: str, +): + if mode == "step": + return _generate_note_step( + visit_care_site=visit_care_site, + note_type=note_type, + note_date_col=note_date_col, + id_visit_col=id_visit_col, + note_type_col=note_type_col, + t0_visit=t0_visit, + care_site_id=care_site_id, + date_col=date_col, + ) + + elif mode == "rect": + return _generate_note_rect( + visit_care_site=visit_care_site, + note_type=note_type, + note_date_col=note_date_col, + id_visit_col=id_visit_col, + note_type_col=note_type_col, + t0_visit=t0_visit, + care_site_id=care_site_id, + date_col=date_col, + ) + + +def _generate_note_step( + visit_care_site, + note_type, + care_site_id, + date_col, + note_date_col, + id_visit_col, + note_type_col, + t0_visit, +): + t_end = visit_care_site[date_col].max() + t0 = np.random.randint(t0_visit, t_end) + c_before = np.random.uniform(0, 0.2) + c_after = np.random.uniform(0.8, 1) + note_before_t0_visit = ( + visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] + .sample(frac=c_before) + .rename(columns={date_col: note_date_col}) + ) + # Stratify visit between t0_visit and t0 to + # ensure that these elements are represented + # in the final notes dataset. + note_before_t0 = ( + visit_care_site[ + (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) + ][[id_visit_col, date_col]] + .sample(frac=c_before) + .rename(columns={date_col: note_date_col}) + ) + + note_after_t0 = ( + visit_care_site[visit_care_site[date_col] > t0][[id_visit_col, date_col]] + .sample(frac=c_after) + .rename(columns={date_col: note_date_col}) + ) + + note = pd.concat([note_before_t0_visit, note_before_t0, note_after_t0]) + + note[note_date_col] = pd.to_datetime(note[note_date_col], unit="s") + note[note_type_col] = note_type + note["care_site_id"] = care_site_id + note["t_0"] = t0 + logger.debug("Generate synthetic note deploying as step function") + + return note + + +def _generate_note_rect( + visit_care_site, + note_type, + care_site_id, + date_col, + note_date_col, + id_visit_col, + note_type_col, + t0_visit, +): + t1_visit = visit_care_site["t_1_min"].max() + t0 = np.random.randint(t0_visit, t0_visit + (t1_visit - t0_visit) / 3) + t1 = np.random.randint(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) + c_out = np.random.uniform(0, 0.1) + c_in = np.random.uniform(0.8, 1) + + note_before_t0 = ( + visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] + .sample(frac=c_out) + .rename(columns={date_col: note_date_col}) + ) + note_between_t0_t1 = ( + visit_care_site[ + (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) + ][[id_visit_col, date_col]] + .sample(frac=c_in) + .rename(columns={date_col: note_date_col}) + ) + + note_after_t1 = ( + visit_care_site[(visit_care_site[date_col] > t1)][[id_visit_col, date_col]] + .sample(frac=c_out) + .rename(columns={date_col: note_date_col}) + ) + + note = pd.concat( + [ + note_before_t0, + note_between_t0_t1, + note_after_t1, + ] + ) + + note[note_date_col] = pd.to_datetime(note[note_date_col], unit="s") + note[note_type_col] = note_type + note["care_site_id"] = care_site_id + note["t_0"] = t0 + note["t_1"] = t1 + logger.debug("Generate synthetic note deploying as rectangle function") + + return note diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 25841480..8807abad 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -7,15 +7,11 @@ from databricks import koalas as ks from loguru import logger -from edsteva.io.synthetic.utils import ( - generate_care_site_tables, - generate_events_after_t0, - generate_events_after_t1, - generate_events_around_t0, - generate_events_around_t1, - generate_events_before_t0, - recursive_items, -) +from edsteva.io.synthetic.biology import generate_bio +from edsteva.io.synthetic.care_site import generate_care_site_tables +from edsteva.io.synthetic.note import generate_note +from edsteva.io.synthetic.utils import recursive_items +from edsteva.io.synthetic.visit import generate_stays DataFrame = Union[ks.DataFrame, pd.DataFrame] @@ -131,287 +127,6 @@ def add_other_columns(table: pd.DataFrame, other_columns: Dict): return table -def generate_stays_step( - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, - care_site_id: int, - date_col: str, -): - t0 = np.random.randint(t_start + increase_time, t_end - increase_time) - params = dict( - t_start=t_start, - t_end=t_end, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, - ) - df = pd.concat( - [ - generate_events_before_t0(**params), - generate_events_after_t0(**params), - generate_events_around_t0(**params), - ] - ).to_frame() - df.columns = [date_col] - df["care_site_id"] = care_site_id - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - - return df - - -def generate_stays_rect( - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, - care_site_id: int, - date_col: str, -): - t0 = np.random.randint( - t_start + increase_time, (t_end + t_start) / 2 - increase_time - ) - t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) - t0_params = dict( - t_start=t_start, - t_end=t1 - increase_time / 2, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, - ) - before_t0 = generate_events_before_t0(**t0_params) - around_t0 = generate_events_around_t0(**t0_params) - # Raise n_visit to enforce a rectangle shape - between_t0_t1 = generate_events_after_t0(**t0_params) - t1_params = dict( - t_start=t_start, - t_end=t_end, - n_events=n_events, - t1=t1, - increase_time=increase_time, - increase_ratio=increase_ratio, - ) - around_t1 = generate_events_around_t1(**t1_params) - after_t1 = generate_events_after_t1(**t1_params) - - df = pd.concat( - [ - before_t0, - around_t0, - between_t0_t1, - around_t1, - after_t1, - ] - ).to_frame() - - df.columns = [date_col] - df["care_site_id"] = care_site_id - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - df["t_1_min"] = t1 - increase_time / 2 - df["t_1_max"] = t1 + increase_time / 2 - - return df - - -def generate_note_step( - visit_care_site, - note_type, - care_site_id, - date_col, - note_date_col, - id_visit_col, - note_type_col, - t0_visit, - t_end, -): - t0 = np.random.randint(t0_visit, t_end) - c_before = np.random.uniform(0, 0.2) - c_after = np.random.uniform(0.8, 1) - - note_before_t0_visit = ( - visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] - .sample(frac=c_before) - .rename(columns={date_col: note_date_col}) - ) - # Stratify visit between t0_visit and t0 to - # ensure that these elements are represented - # in the final notes dataset. - note_before_t0 = ( - visit_care_site[ - (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) - ][[id_visit_col, date_col]] - .sample(frac=c_before) - .rename(columns={date_col: note_date_col}) - ) - - note_after_t0 = ( - visit_care_site[visit_care_site[date_col] > t0][[id_visit_col, date_col]] - .sample(frac=c_after) - .rename(columns={date_col: note_date_col}) - ) - - note = pd.concat([note_before_t0_visit, note_before_t0, note_after_t0]) - - note[note_date_col] = note[note_date_col].astype("datetime64[s]") - note[note_type_col] = note_type - note["care_site_id"] = care_site_id - note["t_0"] = t0 - - return note - - -def generate_note_rect( - visit_care_site: pd.DataFrame, - note_type, - care_site_id, - date_col, - note_date_col, - id_visit_col, - note_type_col, - t0_visit, - t1_visit, -): - t0 = np.random.randint(t0_visit, t0_visit + (t1_visit - t0_visit) / 3) - t1 = np.random.randint(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) - c_out = np.random.uniform(0, 0.1) - c_in = np.random.uniform(0.8, 1) - - note_before_t0 = ( - visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] - .sample(frac=c_out) - .rename(columns={date_col: note_date_col}) - ) - note_between_t0_t1 = ( - visit_care_site[ - (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) - ][[id_visit_col, date_col]] - .sample(frac=c_in) - .rename(columns={date_col: note_date_col}) - ) - - note_after_t1 = ( - visit_care_site[(visit_care_site[date_col] > t1)][[id_visit_col, date_col]] - .sample(frac=c_out) - .rename(columns={date_col: note_date_col}) - ) - - note = pd.concat( - [ - note_before_t0, - note_between_t0_t1, - note_after_t1, - ] - ) - - note[note_date_col] = note[note_date_col].astype("datetime64[s]") - note[note_type_col] = note_type - note["care_site_id"] = care_site_id - note["t_0"] = t0 - note["t_1"] = t1 - - return note - - -def generate_bio_step( - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, - bio_date_col: str, - unit: str, - concept_code: str, -): - t0 = np.random.randint(t_start + increase_time, t_end - increase_time) - params = dict( - t_start=t_start, - t_end=t_end, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, - ) - df = pd.concat( - [ - generate_events_before_t0(**params), - generate_events_after_t0(**params), - generate_events_around_t0(**params), - ] - ).to_frame() - df.columns = [bio_date_col] - df["unit_source_value"] = unit - df["measurement_source_concept_id"] = concept_code - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - - return df - - -def generate_bio_rect( - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, - bio_date_col: str, - unit: str, - concept_code: str, -): - t0 = np.random.randint( - t_start + increase_time, (t_end + t_start) / 2 - increase_time - ) - t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) - t0_params = dict( - t_start=t_start, - t_end=t1 - increase_time / 2, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, - ) - before_t0 = generate_events_before_t0(**t0_params) - around_t0 = generate_events_around_t0(**t0_params) - # Raise n_visit to enforce a rectangle shape - between_t0_t1 = generate_events_after_t0(**t0_params) - t1_params = dict( - t_start=t_start, - t_end=t_end, - n_events=n_events, - t1=t1, - increase_time=increase_time, - increase_ratio=increase_ratio, - ) - around_t1 = generate_events_around_t1(**t1_params) - after_t1 = generate_events_after_t1(**t1_params) - - df = pd.concat( - [ - before_t0, - around_t0, - between_t0_t1, - around_t1, - after_t1, - ] - ).to_frame() - - df.columns = [bio_date_col] - df["unit_source_value"] = unit - df["measurement_source_concept_id"] = concept_code - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - df["t_1_min"] = t1 - increase_time / 2 - df["t_1_max"] = t1 + increase_time / 2 - - return df - - @dataclass class SyntheticData: module: str = "pandas" @@ -443,6 +158,14 @@ class SyntheticData: seed: int = None mode: str = "step" + def __post_init__(self): + if self.module not in ["pandas", "koalas"]: + raise ValueError( + f"Unknown module {self.mode}, options are ('pandas', 'koalas')" + ) + if self.mode not in ["step", "rect"]: + raise ValueError(f"Unknown mode {self.mode}, options are ('step', 'rect')") + def generate(self): if self.seed: np.random.seed(seed=self.seed) @@ -533,15 +256,9 @@ def _generate_visit_occurrence(self, hospital_ids): increase_time=increase_time, care_site_id=care_site_id, date_col=self.date_col, + mode=self.mode, ) - if self.mode == "step": - vo_stays = generate_stays_step(**params) - elif self.mode == "rect": - vo_stays = generate_stays_rect(**params) - else: - raise ValueError( - f"Unknown mode {self.mode}, options are ('step', 'rect')" - ) + vo_stays = generate_stays(**params) visit_occurrence.append(vo_stays) visit_occurrence = pd.concat(visit_occurrence).reset_index(drop=True) @@ -693,20 +410,11 @@ def _generate_note( id_visit_col=id_visit_col, note_type_col=note_type_col, t0_visit=t0_visit, + mode=self.mode, ) - for note_type in note_types: params["note_type"] = note_type - if self.mode == "step": - params["t_end"] = visit_care_site[date_col].max() - note = generate_note_step(visit_care_site, **params) - elif self.mode == "rect": - params["t1_visit"] = visit_care_site["t_1_min"].max() - note = generate_note_rect(visit_care_site, **params) - else: - raise ValueError( - f"Unknown mode {self.mode}, options: ('step', 'rect')" - ) + note = generate_note(visit_care_site, **params) notes.append(note) notes = pd.concat(notes).reset_index(drop=True) @@ -864,6 +572,7 @@ def _generate_measurement( t_min = self.t_min.timestamp() t_max = self.t_max.timestamp() measurements = [] + visit_occurrence = visit_occurrence.sample(frac=0.9) for concept_name in src_concept_name: concept_code = concept_name.split("_")[1] unit = concept_name.split("_")[-1] @@ -894,21 +603,15 @@ def _generate_measurement( bio_date_col=self.bio_date_col, unit=unit, concept_code=concept_code, + mode=self.mode, ) - if self.mode == "step": - measurement = generate_bio_step(**params) - elif self.mode == "rect": - measurement = generate_bio_rect(**params) - else: - raise ValueError( - f"Unknown mode {self.mode}, options are ('step', 'rect')" - ) + measurement = generate_bio(**params) visit_care_site = visit_occurrence[ visit_occurrence.care_site_id == care_site_id ] measurement[self.id_visit_col] = ( visit_care_site[self.id_visit_col] - .sample(measurement.shape[0], replace=True) + .sample(n=measurement.shape[0], replace=True) .reset_index(drop=True) ) measurement["value_as_number"] = [None] * missing_value + list( @@ -931,7 +634,7 @@ def _generate_measurement( def convert_to_koalas(self): if isinstance(self.care_site, ks.frame.DataFrame): - print("Module is already Koalas!") + logger.info("Module is already Koalas!") return self.care_site = ks.DataFrame(self.care_site) self.visit_occurrence = ks.DataFrame(self.visit_occurrence) @@ -946,7 +649,7 @@ def convert_to_koalas(self): def reset_to_pandas(self): if isinstance(self.care_site, pd.core.frame.DataFrame): - print("Module is already Pandas!") + logger.info("Module is already Pandas!") return self.care_site = self.care_site.to_pandas() self.visit_occurrence = self.visit_occurrence.to_pandas() diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index 622587ad..d9d9cc35 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -118,47 +118,6 @@ def generate_events_after_t1( ) -def split_name_id(string): - splitted = string.split("-") - - # Name - Type - ID - return dict( - care_site_short_name=string, - care_site_type_source_value=splitted[0], - care_site_id=splitted[1], - ) - - -def generate_care_site_tables(structure, parent=None, final=True): - cs = [] - fr = [] - for key, value in structure.items(): - this_cs = split_name_id(key) - cs.append(this_cs) - - if parent is not None: - this_fr = dict( - fact_id_1=this_cs["care_site_id"], - fact_id_2=parent["care_site_id"], - ) - fr.append(this_fr) - - if value is not None: - next_cs, next_fr = generate_care_site_tables( - value, parent=this_cs, final=False - ) - cs.extend(next_cs) - fr.extend(next_fr) - - if final: - cs = pd.DataFrame(cs) - fr = pd.DataFrame(fr) - fr["domain_concept_id_1"] = 57 - fr["relationship_concept_id"] = 46233688 - - return cs, fr - - def recursive_items(dictionary): for key, value in dictionary.items(): if type(value) is dict: diff --git a/edsteva/io/synthetic/visit.py b/edsteva/io/synthetic/visit.py new file mode 100644 index 00000000..f4da18a1 --- /dev/null +++ b/edsteva/io/synthetic/visit.py @@ -0,0 +1,134 @@ +import numpy as np +import pandas as pd +from loguru import logger + +from edsteva.io.synthetic.utils import ( + generate_events_after_t0, + generate_events_after_t1, + generate_events_around_t0, + generate_events_around_t1, + generate_events_before_t0, +) + + +def generate_stays( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + care_site_id: int, + date_col: str, + mode: str, +): + if mode == "step": + return _generate_stays_step( + t_start=t_start, + t_end=t_end, + n_events=n_events, + increase_time=increase_time, + increase_ratio=increase_ratio, + care_site_id=care_site_id, + date_col=date_col, + ) + if mode == "rect": + return _generate_stays_rect( + t_start=t_start, + t_end=t_end, + n_events=n_events, + increase_time=increase_time, + increase_ratio=increase_ratio, + care_site_id=care_site_id, + date_col=date_col, + ) + + +def _generate_stays_step( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + care_site_id: int, + date_col: str, +): + t0 = np.random.randint(t_start + increase_time, t_end - increase_time) + params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_events, + t0=t0, + increase_ratio=increase_ratio, + increase_time=increase_time, + ) + df = pd.concat( + [ + generate_events_before_t0(**params), + generate_events_after_t0(**params), + generate_events_around_t0(**params), + ] + ).to_frame() + df.columns = [date_col] + df["care_site_id"] = care_site_id + df["t_0_min"] = t0 - increase_time / 2 + df["t_0_max"] = t0 + increase_time / 2 + logger.debug("Generate visit occurrences deploying as step function") + + return df + + +def _generate_stays_rect( + t_start: int, + t_end: int, + n_events: int, + increase_time: int, + increase_ratio: float, + care_site_id: int, + date_col: str, +): + t0 = np.random.randint( + t_start + increase_time, (t_end + t_start) / 2 - increase_time + ) + t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) + t0_params = dict( + t_start=t_start, + t_end=t1 - increase_time / 2, + n_events=n_events, + t0=t0, + increase_ratio=increase_ratio, + increase_time=increase_time, + ) + before_t0 = generate_events_before_t0(**t0_params) + around_t0 = generate_events_around_t0(**t0_params) + # Raise n_visit to enforce a rectangle shape + between_t0_t1 = generate_events_after_t0(**t0_params) + t1_params = dict( + t_start=t_start, + t_end=t_end, + n_events=n_events, + t1=t1, + increase_time=increase_time, + increase_ratio=increase_ratio, + ) + around_t1 = generate_events_around_t1(**t1_params) + after_t1 = generate_events_after_t1(**t1_params) + + df = pd.concat( + [ + before_t0, + around_t0, + between_t0_t1, + around_t1, + after_t1, + ] + ).to_frame() + + df.columns = [date_col] + df["care_site_id"] = care_site_id + df["t_0_min"] = t0 - increase_time / 2 + df["t_0_max"] = t0 + increase_time / 2 + df["t_1_min"] = t1 - increase_time / 2 + df["t_1_max"] = t1 + increase_time / 2 + logger.debug("Generate visit occurrences deploying as rectangle function") + + return df diff --git a/edsteva/models/base.py b/edsteva/models/base.py index 2a438149..c3fe3ec1 100644 --- a/edsteva/models/base.py +++ b/edsteva/models/base.py @@ -3,6 +3,7 @@ from typing import List import pandas as pd +from loguru import logger from edsteva import CACHE_DIR from edsteva.metrics import metrics @@ -31,17 +32,6 @@ class BaseModel(metaclass=ABCMeta): Ths list of extra keyword parameters used. """ - def __init__(self): - self.is_valid_model() - self.name = type(self).__name__ - - def is_valid_model(self) -> None: - """Raises an error if the instantiated Model is not valid""" - if not hasattr(self, "_coefs"): - raise Exception( - "Model must have _coefs attribute. Please review the code of your model" - ) - def is_computed_estimates(self) -> None: """Raises an error if the Probe has not been fitted properly""" if hasattr(self, "estimates"): @@ -53,7 +43,7 @@ def is_computed_estimates(self) -> None: else: raise Exception( "The fit process must return a Pandas Dataframe and not {}".format( - type(self.estimates) + type(self.estimates).__name__ ) ) @@ -85,6 +75,7 @@ def fit( metric_functions: List[str] = None, start_date: str = None, end_date: str = None, + with_cache: bool = True, **kwargs, ) -> None: """Fit the model to the probe instance @@ -123,7 +114,9 @@ def fit( if isinstance(probe, BaseProbe): probe.is_computed_probe() else: - raise TypeError("Unsupported type {} for probe.".format(type(probe))) + raise TypeError( + "Unsupported type {} for probe.".format(type(probe).__name__) + ) predictor = filter_table_by_date( table=probe.predictor, @@ -155,6 +148,23 @@ def fit( self.is_computed_estimates() self.params = kwargs + if with_cache: + self.cache_estimates() + + def reset_estimates( + self, + ) -> None: + """Reset the estimates to its initial state""" + self.estimates = self._cache_estimates.copy() + + def cache_estimates( + self, + ) -> None: + """Cache the predictor""" + self._cache_estimates = self.estimates.copy() + logger.info( + "Cache the estimates, you can reset the estimates to this state with the method reset_estimates" + ) def predict( self, @@ -260,10 +270,7 @@ def delete(self, path: str = None) -> bool: **EXAMPLE**: `"my_folder/my_file.html"` """ if not path: - if hasattr(self, "path"): - path = self.path - else: - path = self._get_path() + path = self.path delete_object(self, path) @@ -283,10 +290,10 @@ def _compute_metrics( metric_functions: List[str] = None, ): if metric_functions is None: - if hasattr(self, "_default_metrics"): + if hasattr(self, "_default_metrics") and self._default_metrics: metric_functions = self._default_metrics else: - metric_functions = [] + return None if isinstance(metric_functions, str): metric_functions = [metric_functions] metrics_df = [] diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index 69a46341..c29ecf66 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -34,11 +34,17 @@ class BaseProbe(metaclass=ABCMeta): It describes the care site structure (cf. [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_care_site_relationship]) """ - def __init__(self): - self.is_valid_probe() - _schema = ["care_site_level", "care_site_id", "date", "c"] + def __init__( + self, + completeness_predictor: str, + index: List[str], + ): + self._completeness_predictor = completeness_predictor + self._cache_index = index.copy() + self._viz_config = {} + def validate_input_data(self, data: Data) -> None: """Raises an error if the input data is not valid @@ -49,7 +55,7 @@ def validate_input_data(self, data: Data) -> None: """ if not isinstance(data, Data.__args__): - raise TypeError("Unsupported type {} for data".format(type(data))) + raise TypeError("Unsupported type {} for data".format(type(data).__name__)) check_tables( data=data, @@ -60,20 +66,13 @@ def validate_input_data(self, data: Data) -> None: ], ) - def is_valid_probe(self) -> None: - """Raises an error if the instantiated Probe is not valid""" - if not hasattr(self, "_index"): - raise Exception( - "Probe must have _index attribute. Please review the code of your probe" - ) - def is_computed_probe(self) -> None: """Raises an error if the Probe has not been computed properly""" if hasattr(self, "predictor"): if not isinstance(self.predictor, pd.DataFrame): raise TypeError( "Predictor must be a Pandas DataFrame and not a {}, please review the process method or your arguments".format( - type(self.predictor) + type(self.predictor).__name__ ) ) if self.predictor.empty: @@ -178,6 +177,7 @@ def compute( care_site_ids: List[int] = None, impute_missing_dates: bool = True, only_impute_per_care_site: bool = False, + with_cache: bool = True, **kwargs, ) -> None: """Calls [``compute_process()``][edsteva.probes.base.BaseProbe.compute_process] @@ -241,6 +241,7 @@ def compute( """ self.validate_input_data(data=data) + self._reset_index() care_site_relationship = prepare_care_site_relationship(data=data) self.predictor = self.compute_process( @@ -268,7 +269,8 @@ def compute( ) self.care_site_relationship = care_site_relationship self.predictor = self.add_names_columns(self.predictor) - self.cache_predictor() + if with_cache: + self.cache_predictor() def reset_predictor( self, @@ -316,6 +318,7 @@ def add_names_columns(self, df: DataFrame): ["care_site_id", "care_site_short_name"] ].drop_duplicates(), on="care_site_id", + how="left", ) if hasattr(self, "biology_relationship"): concept_codes = [ @@ -331,6 +334,7 @@ def add_names_columns(self, df: DataFrame): concept_codes + concept_names ].drop_duplicates(), on=concept_codes, + how="left", ) return df.reset_index(drop=True) @@ -405,10 +409,7 @@ def delete(self, path: str = None): """ if not path: - if hasattr(self, "path"): - path = self.path - else: - path = self._get_path() + path = self.path delete_object(self, path) @@ -419,3 +420,9 @@ def _get_path(self): else: filename = f"{type(self).__name__.lower()}.pickle" return base_path / filename + + def _reset_index( + self, + ) -> None: + """Reset the index to its initial state""" + self._index = self._cache_index.copy() diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index fdccd68e..f0d70658 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -49,7 +49,6 @@ def __init__( completeness_predictor: str = "per_measurement_default", standard_terminologies: List[str] = ["ANABIO", "LOINC"], ): - self._completeness_predictor = completeness_predictor self._standard_terminologies = standard_terminologies self._index = [ "care_site_level", @@ -63,7 +62,10 @@ def __init__( "{}_concept_code".format(terminology) for terminology in standard_terminologies ] - self._viz_config = {} + super().__init__( + completeness_predictor=completeness_predictor, + index=self._index, + ) def compute_process( self, @@ -141,9 +143,9 @@ def compute_process( hdfs_user_path : str, optional **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ - if specialties_sets is None: + if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") - if concepts_sets is None: + if concepts_sets is None and "concepts_set" in self._index: self._index.remove("concepts_set") return completeness_predictors.get(self._completeness_predictor)( self, @@ -173,3 +175,6 @@ def get_viz_config(self, viz_type: str, **kwargs): else: raise ValueError(f"edsteva has no {viz_type} registry !") return viz_configs[viz_type].get(_viz_config)(self, **kwargs) + + def available_completeness_predictors(self): + return list(completeness_predictors.get_all().keys()) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index ae67131a..f841f8fe 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -37,6 +37,7 @@ def compute_completeness_predictor_per_measurement( source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 63ed7a05..5d254c09 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -37,6 +37,7 @@ def compute_completeness_predictor_per_visit( source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -127,21 +128,14 @@ def compute_completeness( .agg({"has_measurement": "count"}) .rename(columns={"has_measurement": "n_visit_with_measurement"}) ) - partition_cols = list( - set(partition_cols) - - set( - ["concepts_set"] - + [ - "{}_concept_code".format(terminology) - for terminology in self._standard_terminologies - ] - + [ - "{}_concept_name".format(terminology) - for terminology in self._standard_terminologies - ] - ) + biology_column = set( + ["concepts_set"] + + [ + "{}_concept_code".format(terminology) + for terminology in self._standard_terminologies + ] ) - + partition_cols = list(set(partition_cols) - set(biology_column)) n_visit = ( biology_predictor.groupby( partition_cols, @@ -151,7 +145,6 @@ def compute_completeness( .agg({"visit_id": "nunique"}) .rename(columns={"visit_id": "n_visit"}) ) - biology_predictor = n_visit_with_measurement.merge( n_visit, on=partition_cols, @@ -164,6 +157,21 @@ def compute_completeness( biology_predictor["n_visit_with_measurement"] / biology_predictor["n_visit"], ) + # Impute missing columns for visit without measurement + missing_column = list( + set(biology_predictor.columns).intersection(set(biology_column)) + ) + missing_measurement = biology_predictor[ + biology_predictor.n_visit_with_measurement == 0 + ].copy() + biology_predictor = biology_predictor[ + biology_predictor.n_visit_with_measurement > 0 + ] + for partition, _ in biology_predictor.groupby(missing_column): + for i in range(len(missing_column)): + missing_measurement[missing_column[i]] = partition[i] + biology_predictor = pd.concat([biology_predictor, missing_measurement]) + return biology_predictor @@ -174,19 +182,21 @@ def get_hospital_visit( standard_terminologies: List[str], ): hospital_measurement = measurement[ - ["visit_occurrence_id", "concepts_set"] - + [ - "{}_concept_code".format(terminology) - for terminology in standard_terminologies - ] - + [ - "{}_concept_name".format(terminology) - for terminology in standard_terminologies - ] + set(measurement.columns).intersection( + set( + ["visit_occurrence_id", "concepts_set"] + + [ + "{}_concept_code".format(terminology) + for terminology in standard_terminologies + ] + + [ + "{}_concept_name".format(terminology) + for terminology in standard_terminologies + ] + ) + ) ].drop_duplicates() hospital_measurement["has_measurement"] = True - print(type(hospital_measurement)) - print(type(visit_occurrence)) hospital_visit = visit_occurrence.merge( hospital_measurement, on="visit_occurrence_id", diff --git a/edsteva/probes/biology/viz_config.py b/edsteva/probes/biology/viz_config.py deleted file mode 100644 index 6d07ae7b..00000000 --- a/edsteva/probes/biology/viz_config.py +++ /dev/null @@ -1,300 +0,0 @@ -import altair as alt - - -def get_estimates_dashboard_config(self): - estimates_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_measurement="sum(n_measurement)", - groupby=["value", "date"], - ), - dict( - max_measurement="max(sum_measurement)", - groupby=["value"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) - / alt.datum.c_0 - ) - ], - legend_title="Mean", - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "mean(normalized_c):Q", - title="c(Δt) / c₀", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={"field": "n_measurement", "op": "sum", "order": "descending"}, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - error_line=dict( - legend_title="Standard deviation", - mark_errorband=dict( - extent="stdev", - ), - encode=dict( - stroke=alt.Stroke( - "legend_error_band", - title="Error band", - legend=alt.Legend( - symbolType="square", - orient="top", - labelFontSize=12, - labelFontStyle="bold", - ), - ), - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_measurement):Q", - format=",", - ), - sort={ - "field": "n_measurement", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "sort": "-x", - }, - {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, - ] - + [ - { - "title": "{} concept".format(terminology), - "field": "{}_concept_name".format(terminology), - "sort": "-x", - } - for terminology in self._standard_terminologies.copy() - ], - x=[ - dict( - x=alt.X( - "sum(n_measurement):Q", - title="Number of measurements", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_measurement):Q", - format=",", - ), - sort={ - "field": "n_measurement", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - ) - - return estimates_dashboard_config - - -def get_predictor_dashboard_config(self): - predictor_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_measurement="sum(n_measurement)", - groupby=["value", "date"], - ), - dict( - max_measurement="max(sum_measurement)", - groupby=["value"], - ), - ], - calculates=[ - dict( - completeness=alt.datum.sum_measurement / alt.datum.max_measurement - ), - ], - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "completeness:Q", - title="Completeness predictor c(t)", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={"field": "n_measurement", "op": "sum", "order": "descending"}, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_measurement):Q", - format=",", - ), - sort={ - "field": "n_measurement", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "type": "nominal", - "sort": "-x", - }, - { - "title": "Concepts-set", - "field": "concepts_set", - "type": "nominal", - "sort": "-x", - }, - ] - + [ - { - "title": "{} concept".format(terminology), - "field": "{}_concept_name".format(terminology), - "sort": "-x", - } - for terminology in self._standard_terminologies.copy() - ], - x=[ - dict( - x=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_measurement):Q", - format=",", - ), - sort={ - "field": "n_measurement", - "op": "sum", - "order": "descending", - }, - ) - ], - ), - ) - return predictor_dashboard_config diff --git a/edsteva/probes/biology/viz_configs/__init__.py b/edsteva/probes/biology/viz_configs/__init__.py index a5af258a..4fcf2fc6 100644 --- a/edsteva/probes/biology/viz_configs/__init__.py +++ b/edsteva/probes/biology/viz_configs/__init__.py @@ -1,51 +1,72 @@ import catalogue -from edsteva.probes.biology.viz_configs import n_measurement, per_measurement +from edsteva.probes.biology.viz_configs import n_measurement, per_measurement, per_visit normalized_probe_dashboard = catalogue.create( "edsteva.probes.biology.viz_configs", "normalized_probe_dashboard" ) + +# Normalized dashboard normalized_probe_dashboard.register( "per_measurement_default", func=per_measurement.get_normalized_probe_dashboard_config, ) normalized_probe_dashboard.register( - "per_measurement_default", - func=per_measurement.get_normalized_probe_dashboard_config, + "per_visit_default", + func=per_visit.get_normalized_probe_dashboard_config, +) +normalized_probe_dashboard.register( + "n_measurement", + func=n_measurement.get_normalized_probe_dashboard_config, ) - +# Probe dashboard probe_dashboard = catalogue.create( "edsteva.probes.biology.viz_configs", "probe_dashboard" ) probe_dashboard.register( "per_measurement_default", func=per_measurement.get_probe_dashboard_config ) +probe_dashboard.register("per_visit_default", func=per_visit.get_probe_dashboard_config) probe_dashboard.register("n_measurement", func=n_measurement.get_probe_dashboard_config) + +# Estimates density plot estimates_densities_plot = catalogue.create( "edsteva.probes.biology.viz_configs", "estimates_densities_plot" ) estimates_densities_plot.register( "per_measurement_default", func=per_measurement.get_estimates_densities_plot_config ) +estimates_densities_plot.register( + "per_visit_default", func=per_visit.get_estimates_densities_plot_config +) estimates_densities_plot.register( "n_measurement", func=n_measurement.get_estimates_densities_plot_config ) +# Normalized probe plot normalized_probe_plot = catalogue.create( "edsteva.probes.biology.viz_configs", "normalized_probe_plot" ) normalized_probe_plot.register( "per_measurement_default", func=per_measurement.get_normalized_probe_plot_config ) +normalized_probe_plot.register( + "per_visit_default", func=per_visit.get_normalized_probe_plot_config +) normalized_probe_plot.register( "n_measurement", func=n_measurement.get_normalized_probe_plot_config ) + +# Probe plot probe_plot = catalogue.create("edsteva.probes.biology.viz_configs", "probe_plot") probe_plot.register( "per_measurement_default", func=per_measurement.get_probe_plot_config ) +probe_plot.register("per_visit_default", func=per_visit.get_probe_plot_config) probe_plot.register("n_measurement", func=n_measurement.get_probe_plot_config) + + viz_configs = dict( normalized_probe_dashboard=normalized_probe_dashboard, probe_dashboard=probe_dashboard, diff --git a/edsteva/probes/biology/viz_configs/per_visit/__init__.py b/edsteva/probes/biology/viz_configs/per_visit/__init__.py new file mode 100644 index 00000000..76fe617c --- /dev/null +++ b/edsteva/probes/biology/viz_configs/per_visit/__init__.py @@ -0,0 +1,5 @@ +from .estimates_densities_plot import get_estimates_densities_plot_config +from .normalized_probe_dashboard import get_normalized_probe_dashboard_config +from .normalized_probe_plot import get_normalized_probe_plot_config +from .probe_dashboard import get_probe_dashboard_config +from .probe_plot import get_probe_plot_config diff --git a/edsteva/probes/biology/viz_configs/per_visit/defaults.py b/edsteva/probes/biology/viz_configs/per_visit/defaults.py index 2dc20179..ff1bfed9 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/biology/viz_configs/per_visit/defaults.py @@ -20,16 +20,16 @@ y=[ dict( y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", + "sum(n_visit):Q", + title="Number of administrative records", axis=alt.Axis(format="s"), ), tooltip=alt.Tooltip( - "sum(n_measurement):Q", + "sum(n_visit):Q", format=",", ), sort={ - "field": "n_measurement", + "field": "n_visit", "op": "sum", "order": "descending", }, @@ -69,16 +69,16 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): x=[ dict( x=alt.X( - "sum(n_measurement):Q", - title="Number of measurements", + "sum(n_visit):Q", + title="Number of administrative records", axis=alt.Axis(format="s"), ), tooltip=alt.Tooltip( - "sum(n_measurement):Q", + "sum(n_visit):Q", format=",", ), sort={ - "field": "n_measurement", + "field": "n_visit", "op": "sum", "order": "descending", }, @@ -90,16 +90,16 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): main_chart = dict( aggregates=[ dict( - sum_measurement="sum(n_measurement)", + sum_visit="sum(n_visit)", groupby=["value", "date"], ), dict( - max_measurement="max(sum_measurement)", + max_visit="max(sum_visit)", groupby=["value"], ), ], calculates=[ - dict(completeness=alt.datum.sum_measurement / alt.datum.max_measurement), + dict(completeness=alt.datum.sum_visit / alt.datum.max_visit), ], encode=dict( x=alt.X( @@ -114,7 +114,7 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): ), color=alt.Color( "value:N", - sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + sort={"field": "n_visit", "op": "sum", "order": "descending"}, title=None, ), ), @@ -127,19 +127,16 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): normalized_main_chart = dict( aggregates=[ dict( - sum_measurement="sum(n_measurement)", + sum_visit="sum(n_visit)", groupby=["value", "date"], ), dict( - max_measurement="max(sum_measurement)", + max_visit="max(sum_visit)", groupby=["value"], ), ], calculates=[ - dict( - normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) - / alt.datum.c_0 - ) + dict(normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) / alt.datum.c_0) ], legend_title="Mean", encode=dict( @@ -155,7 +152,7 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): ), color=alt.Color( "value:N", - sort={"field": "n_measurement", "op": "sum", "order": "descending"}, + sort={"field": "n_visit", "op": "sum", "order": "descending"}, title=None, ), ), @@ -173,8 +170,8 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): scale=alt.Scale(nice=False), ), y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", + "sum(n_visit):Q", + title="Number of administrative records", axis=alt.Axis(format="s"), ), ), @@ -192,8 +189,8 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), ), y=alt.Y( - "sum(n_measurement):Q", - title="Number of measurements", + "sum(n_visit):Q", + title="Number of administrative records", axis=alt.Axis(format="s"), ), ), diff --git a/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py index 5cbd692b..7bf5c084 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py +++ b/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py @@ -1,9 +1,6 @@ -from edsteva.probes.biology.viz_configs import estimates_densities_plot - from .defaults import chart_style, get_horizontal_bar_charts, vertical_bar_charts -@estimates_densities_plot.register("per_visit_default") def get_estimates_densities_plot_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() diff --git a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py index b10f69d1..af00c552 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py @@ -1,5 +1,3 @@ -from edsteva.probes.biology.viz_configs import normalized_probe_dashboard - from .defaults import ( chart_style, error_line, @@ -10,7 +8,6 @@ ) -@normalized_probe_dashboard.register("per_measurement_default") def get_normalized_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() diff --git a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py index 74db50f1..87bcf91c 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py +++ b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py @@ -1,9 +1,6 @@ -from edsteva.probes.biology.viz_configs import normalized_probe_plot - from .defaults import chart_style, error_line, normalized_main_chart -@normalized_probe_plot.register("per_measurement_default") def get_normalized_probe_plot_config(self): normalized_probe_plot_config = dict( chart_style=chart_style, diff --git a/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py index f3fb8975..f94d63f2 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py @@ -1,5 +1,3 @@ -from edsteva.probes.biology.viz_configs import probe_dashboard - from .defaults import ( chart_style, get_horizontal_bar_charts, @@ -9,7 +7,6 @@ ) -@probe_dashboard.register("per_measurement_default") def get_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() diff --git a/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py b/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py index 0fa08755..a5bde45d 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py +++ b/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py @@ -1,9 +1,6 @@ -from edsteva.probes.biology.viz_configs import probe_plot - from .defaults import chart_style, main_chart -@probe_plot.register("per_measurement_default") def get_probe_plot_config(self): probe_plot_config = dict( chart_style=chart_style, diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 8e222488..c2b76d47 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -39,6 +39,7 @@ def compute_completeness_predictor_per_condition( source_systems: List[str], stay_durations: List[float], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -56,7 +57,7 @@ def compute_completeness_predictor_per_condition( check_condition_source_systems(source_systems=source_systems) if "AREM" in source_systems and not hospital_only( care_site_levels=care_site_levels - ): + ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") visit_occurrence = prepare_visit_occurrence( @@ -194,7 +195,7 @@ def get_uf_condition( visit_occurrence: DataFrame, visit_detail: DataFrame, care_site: DataFrame, -): # pragma: no cover +): # Add visit information visit_detail = visit_detail[visit_detail.visit_detail_type == "RUM"] uf_condition = condition_occurrence.merge( @@ -224,7 +225,7 @@ def get_pole_condition( uf_condition: DataFrame, care_site: DataFrame, care_site_relationship: DataFrame, -): # pragma: no cover +): pole_condition = convert_uf_to_pole( table=uf_condition.drop( columns=["care_site_short_name", "care_site_level", "care_site_specialty"] diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 67824f74..8ca634b9 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -39,6 +39,7 @@ def compute_completeness_predictor_per_visit( source_systems: List[str], stay_durations: List[float], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -56,7 +57,7 @@ def compute_completeness_predictor_per_visit( check_condition_source_systems(source_systems=source_systems) if "AREM" in source_systems and not hospital_only( care_site_levels=care_site_levels - ): + ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") visit_occurrence = prepare_visit_occurrence( @@ -163,6 +164,23 @@ def compute_completeness( condition_predictor["n_visit_with_condition"] / condition_predictor["n_visit"], ) + # Impute missing diag type, condition type and source for visit without condition + missing_column = list( + set(condition_predictor.columns).intersection( + set(["diag_type", "condition_type", "source_system"]) + ) + ) + missing_condition = condition_predictor[ + condition_predictor.n_visit_with_condition == 0 + ].copy() + condition_predictor = condition_predictor[ + condition_predictor.n_visit_with_condition > 0 + ] + for partition, _ in condition_predictor.groupby(missing_column): + for i in range(len(missing_column)): + missing_condition[missing_column[i]] = partition[i] + condition_predictor = pd.concat([condition_predictor, missing_condition]) + return condition_predictor diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index eca98980..f163b4a8 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -36,7 +36,6 @@ def __init__( self, completeness_predictor: str = "per_visit_default", ): - self._completeness_predictor = completeness_predictor self._index = [ "care_site_level", "stay_type", @@ -48,7 +47,10 @@ def __init__( "care_site_specialty", "specialties_set", ] - self._viz_config = {} + super().__init__( + completeness_predictor=completeness_predictor, + index=self._index, + ) def compute_process( self, @@ -105,9 +107,9 @@ def compute_process( hdfs_user_path : str, optional **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ - if specialties_sets is None: + if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") - if condition_types is None: + if condition_types is None and "condition_type" in self._index: self._index.remove("condition_type") return completeness_predictors.get(self._completeness_predictor)( self, @@ -138,3 +140,6 @@ def get_viz_config(self, viz_type: str, **kwargs): else: raise ValueError(f"edsteva has no {viz_type} registry !") return viz_configs[viz_type].get(_viz_config)(self, **kwargs) + + def available_completeness_predictors(self): + return list(completeness_predictors.get_all().keys()) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 752b0cfe..6b74bd3f 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -37,6 +37,7 @@ def compute_completeness_predictor_per_note( stay_durations: List[float], note_types: Union[str, Dict[str, str]], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -79,7 +80,7 @@ def compute_completeness_predictor_per_note( # UF selection if not hospital_only(care_site_levels=care_site_levels): - if extra_data: + if extra_data: # pragma: no cover note_uf, note_uc, note_uh = get_note_detail( extra_data, note, diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index a055f998..81f45ccb 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -38,6 +38,7 @@ def compute_completeness_predictor_per_visit( stay_durations: List[float], note_types: Union[str, Dict[str, str]], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -78,7 +79,7 @@ def compute_completeness_predictor_per_visit( # UF selection if not hospital_only(care_site_levels=care_site_levels): - if extra_data: + if extra_data: # pragma: no cover visit_detail = prepare_visit_detail(data, start_date, end_date) uf_visit, uc_visit, uh_visit = get_visit_detail( @@ -154,6 +155,14 @@ def compute_completeness( note_predictor["n_visit_with_note"] / note_predictor["n_visit"], ) + # Impute missing note type for visit without note + if "note_type" in note_predictor.columns: + for note_type in note_predictor.note_type.dropna().unique(): + missing_note = note_predictor[note_predictor.note_type.isna()].copy() + missing_note["note_type"] = note_type + note_predictor = pd.concat([note_predictor, missing_note]) + note_predictor = note_predictor[~note_predictor.note_type.isna()] + return note_predictor diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index fdbf576d..b47412fb 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -36,7 +36,6 @@ def __init__( self, completeness_predictor: str = "per_visit_default", ): - self._completeness_predictor = completeness_predictor self._index = [ "care_site_level", "stay_type", @@ -46,7 +45,10 @@ def __init__( "care_site_specialty", "specialties_set", ] - self._viz_config = {} + super().__init__( + completeness_predictor=completeness_predictor, + index=self._index, + ) def compute_process( self, @@ -105,9 +107,9 @@ def compute_process( hdfs_user_path : str, optional **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ - if specialties_sets is None: + if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") - if note_types is None: + if note_types is None and "note_type" in self._index: self._index.remove("note_type") return completeness_predictors.get(self._completeness_predictor)( self, @@ -136,3 +138,6 @@ def get_viz_config(self, viz_type: str, **kwargs): else: raise ValueError(f"edsteva has no {viz_type} registry !") return viz_configs[viz_type].get(_viz_config)(self, **kwargs) + + def available_completeness_predictors(self): + return list(completeness_predictors.get_all().keys()) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index f9bb9ad7..162d699c 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -9,7 +9,7 @@ from edsteva.utils.framework import get_framework, to from edsteva.utils.typing import DataFrame -from .utils import CARE_SITE_LEVEL_NAMES +from .utils import CARE_SITE_LEVEL_NAMES, get_child_and_parent_cs def filter_table_by_type( @@ -36,7 +36,9 @@ def filter_table_by_type( table_per_types.append(table_per_type_element) else: raise TypeError( - "{} must be str or dict not {}".format(target_col, type(type_groups)) + "{} must be str or dict not {}".format( + target_col, type(type_groups).__name__ + ) ) logger.debug( @@ -80,7 +82,7 @@ def filter_table_by_date( table = table.dropna(subset=["date"]) logger.debug("Droping observations with missing date in table {}.", table_name) - table["date"] = table["date"].astype("datetime64") + table["date"] = table["date"].astype("datetime64[ns]") start_date = pd.to_datetime(start_date) end_date = pd.to_datetime(end_date) @@ -107,7 +109,7 @@ def filter_table_by_date( table_name, ) # Truncate - table["date"] = table["date"].dt.strftime("%Y-%m").astype("datetime64") + table["date"] = table["date"].dt.strftime("%Y-%m").astype("datetime64[ns]") return table @@ -180,107 +182,39 @@ def filter_table_by_care_site( if not isinstance(care_site_ids, list): care_site_ids = [care_site_ids] care_site_filter.append( - care_site[care_site["care_site_id"].isin(care_site_ids)][ - ["care_site_id", "care_site_level"] - ] + care_site[care_site["care_site_id"].isin(care_site_ids)] ) if care_site_short_names: if not isinstance(care_site_short_names, list): care_site_short_names = [care_site_short_names] care_site_filter.append( - care_site[care_site["care_site_short_name"].isin(care_site_short_names)][ - ["care_site_id", "care_site_level"] - ] - ) - if care_site_specialties: - if not isinstance(care_site_specialties, list): - care_site_specialties = [care_site_specialties] - care_site_filter.append( - care_site[care_site["care_site_specialty"].isin(care_site_specialties)][ - ["care_site_id", "care_site_level"] - ] + care_site[care_site["care_site_short_name"].isin(care_site_short_names)] ) + if care_site_filter: care_site_filter = pd.concat( care_site_filter, ignore_index=True ).drop_duplicates() - else: - raise Exception( - "care_site_ids or care_site_short_names or care_site_specialties must be provided" - ) - extended_care_site_id_to_filter = [] - - # Parent care site to get - parent_rel = care_site_relationship[ - ~care_site_relationship.parent_care_site_id.isna() - ][ - [ - "care_site_id", - "parent_care_site_id", - "parent_care_site_level", - ] - ] - parent_care_site_filter = care_site_filter.copy() - while set(parent_care_site_filter.care_site_level.unique()).intersection( - CARE_SITE_LEVEL_NAMES.values() - ): - extended_care_site_id_to_filter.append( - parent_care_site_filter[["care_site_id", "care_site_level"]] - ) - parent_care_site_filter = parent_care_site_filter.merge( - parent_rel, - on="care_site_id", - )[ - [ - "parent_care_site_id", - "parent_care_site_level", - ] - ].rename( - columns={ - "parent_care_site_id": "care_site_id", - "parent_care_site_level": "care_site_level", - } + extended_care_site_id_to_filter = get_child_and_parent_cs( + care_site_sample=care_site_filter, + care_site_relationship=care_site_relationship, ) + else: + extended_care_site_id_to_filter = care_site.copy() - # Child care site to get - child_rel = care_site_relationship[~care_site_relationship.care_site_id.isna()][ - [ - "care_site_id", - "care_site_level", - "parent_care_site_id", + if care_site_specialties: + if not isinstance(care_site_specialties, list): + care_site_specialties = [care_site_specialties] + extended_care_site_id_to_filter = extended_care_site_id_to_filter[ + extended_care_site_id_to_filter["care_site_specialty"].isin( + care_site_specialties + ) ] - ].rename( - columns={ - "care_site_id": "child_care_site_id", - "care_site_level": "child_care_site_level", - "parent_care_site_id": "care_site_id", - } - ) - child_care_site_filter = care_site_filter.copy() - while set(child_care_site_filter.care_site_level.unique()).intersection( - CARE_SITE_LEVEL_NAMES.values() - ): - extended_care_site_id_to_filter.append( - child_care_site_filter[["care_site_id", "care_site_level"]] - ) - child_care_site_filter = child_care_site_filter.merge( - child_rel, - on="care_site_id", - )[ - [ - "child_care_site_id", - "child_care_site_level", - ] - ].rename( - columns={ - "child_care_site_id": "care_site_id", - "child_care_site_level": "care_site_level", - } + extended_care_site_id_to_filter = get_child_and_parent_cs( + care_site_sample=extended_care_site_id_to_filter, + care_site_relationship=care_site_relationship, ) - extended_care_site_id_to_filter = pd.concat( - extended_care_site_id_to_filter - ).drop_duplicates() extended_care_site_id_to_filter = list( extended_care_site_id_to_filter[ ( diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 396bd35d..40057be0 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -123,7 +123,6 @@ def prepare_measurement( measurement = measurement.merge( biology_relationship, on="{}_concept_id".format(root_terminology) ) - if not per_visit: measurement = filter_table_by_date( table=measurement, @@ -159,7 +158,7 @@ def prepare_condition_occurrence( end_date: datetime = None, ): condition_occurrence_tables = [] - if "AREM" in source_systems: + if "AREM" in source_systems: # pragma: no cover check_tables( data=extra_data, required_tables=["visit_occurrence", "condition_occurrence"], @@ -359,7 +358,7 @@ def prepare_note( return note -def prepare_note_care_site(extra_data: Data, note: DataFrame): +def prepare_note_care_site(extra_data: Data, note: DataFrame): # pragma: no cover check_tables( data=extra_data, required_tables=["note_ref", "care_site_ref"], diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index 94464b3f..2b0851c6 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -1,5 +1,6 @@ from typing import Dict, List +import pandas as pd from loguru import logger from edsteva.utils.framework import get_framework @@ -84,3 +85,93 @@ def concatenate_predictor_by_level( ) return get_framework(predictors_to_concat[0]).concat(predictors_to_concat) + + +def get_child_and_parent_cs( + care_site_sample: DataFrame, care_site_relationship: DataFrame +): + extended_care_site_id_to_filter = [] + + # Parent care site to get + parent_rel = care_site_relationship[ + ~care_site_relationship.parent_care_site_id.isna() + ][ + [ + "care_site_id", + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_specialty", + ] + ] + parent_care_site_filter = care_site_sample.copy() + while set(parent_care_site_filter.care_site_level.unique()).intersection( + CARE_SITE_LEVEL_NAMES.values() + ): + extended_care_site_id_to_filter.append( + parent_care_site_filter[ + ["care_site_id", "care_site_level", "care_site_specialty"] + ] + ) + parent_care_site_filter = parent_care_site_filter.merge( + parent_rel, + on="care_site_id", + )[ + [ + "parent_care_site_id", + "parent_care_site_level", + "parent_care_site_specialty", + ] + ].rename( + columns={ + "parent_care_site_id": "care_site_id", + "parent_care_site_level": "care_site_level", + "parent_care_site_specialty": "care_site_specialty", + } + ) + + # Child care site to get + child_rel = care_site_relationship[~care_site_relationship.care_site_id.isna()][ + [ + "care_site_id", + "care_site_level", + "care_site_specialty", + "parent_care_site_id", + ] + ].rename( + columns={ + "care_site_id": "child_care_site_id", + "care_site_level": "child_care_site_level", + "care_site_specialty": "child_care_site_specialty", + "parent_care_site_id": "care_site_id", + } + ) + child_care_site_filter = care_site_sample.copy() + while set(child_care_site_filter.care_site_level.unique()).intersection( + CARE_SITE_LEVEL_NAMES.values() + ): + extended_care_site_id_to_filter.append( + child_care_site_filter[ + ["care_site_id", "care_site_level", "care_site_specialty"] + ] + ) + child_care_site_filter = child_care_site_filter.merge( + child_rel, + on="care_site_id", + )[ + [ + "child_care_site_id", + "child_care_site_level", + "child_care_site_specialty", + ] + ].rename( + columns={ + "child_care_site_id": "care_site_id", + "child_care_site_level": "care_site_level", + "child_care_site_specialty": "care_site_specialty", + } + ) + + extended_care_site_id_to_filter = pd.concat( + extended_care_site_id_to_filter + ).drop_duplicates() + return extended_care_site_id_to_filter diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index ec4c2c1d..79efbb71 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -33,6 +33,7 @@ def compute_completeness_predictor_per_visit( specialties_sets: Union[str, Dict[str, str]], stay_durations: List[float], hdfs_user_path: str, + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 1029445d..5135a70b 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -36,7 +36,6 @@ def __init__( self, completeness_predictor: str = "per_visit_default", ): - self._completeness_predictor = completeness_predictor self._index = [ "care_site_level", "stay_type", @@ -45,7 +44,10 @@ def __init__( "care_site_specialty", "specialties_set", ] - self._viz_config = {} + super().__init__( + completeness_predictor=completeness_predictor, + index=self._index, + ) def compute_process( self, @@ -92,7 +94,7 @@ def compute_process( hdfs_user_path : str, optional **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ - if specialties_sets is None: + if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") return completeness_predictors.get(self._completeness_predictor)( self, @@ -119,3 +121,6 @@ def get_viz_config(self, viz_type: str, **kwargs): else: raise ValueError(f"edsteva has no {viz_type} registry !") return viz_configs[viz_type].get(_viz_config)(self, **kwargs) + + def available_completeness_predictors(self): + return list(completeness_predictors.get_all().keys()) diff --git a/edsteva/probes/visit/viz_config.py b/edsteva/probes/visit/viz_config.py deleted file mode 100644 index fd5ee79f..00000000 --- a/edsteva/probes/visit/viz_config.py +++ /dev/null @@ -1,275 +0,0 @@ -import altair as alt - - -def get_estimates_dashboard_config(self): - estimates_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - max_visit="max(sum_visit)", - groupby=["value"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) - / alt.datum.c_0 - ) - ], - legend_title="Mean", - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "mean(normalized_c):Q", - title="c(Δt) / c₀", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={"field": "n_visit", "op": "sum", "order": "descending"}, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "normalized_date:Q", - title="Δt = (t - t₀) months", - scale=alt.Scale(nice=False), - ), - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - error_line=dict( - legend_title="Standard deviation", - mark_errorband=dict( - extent="stdev", - ), - encode=dict( - stroke=alt.Stroke( - "legend_error_band", - title="Error band", - legend=alt.Legend( - symbolType="square", - orient="top", - labelFontSize=12, - labelFontStyle="bold", - ), - ), - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "sort": "-x", - }, - ], - x=[ - dict( - x=alt.X( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - ) - - return estimates_dashboard_config - - -def get_predictor_dashboard_config(self): - predictor_dashboard_config = dict( - chart_style=dict( - labelFontSize=12, - titleFontSize=13, - ), - main_chart=dict( - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - max_visit="max(sum_visit)", - groupby=["value"], - ), - ], - calculates=[ - dict(completeness=alt.datum.sum_visit / alt.datum.max_visit), - ], - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "completeness:Q", - title="Completeness predictor c(t)", - axis=alt.Axis(grid=True), - ), - color=alt.Color( - "value:N", - sort={"field": "n_visit", "op": "sum", "order": "descending"}, - title=None, - ), - ), - properties=dict( - height=300, - width=900, - ), - ), - time_line=dict( - encode=dict( - x=alt.X( - "yearmonth(date):T", - title="Time (Month Year)", - axis=alt.Axis(tickCount="month", labelAngle=0, grid=True), - ), - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - ), - properties=dict( - height=50, - width=900, - ), - ), - vertical_bar_charts=dict( - x=[ - { - "title": "Stay type", - "field": "stay_type", - "type": "nominal", - "sort": "-y", - }, - { - "title": "Length of stay", - "field": "length_of_stay", - "type": "nominal", - "sort": "-y", - }, - ], - y=[ - dict( - y=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ), - ], - ), - horizontal_bar_charts=dict( - y=[ - { - "title": "Care site", - "field": "care_site_short_name", - "type": "nominal", - "sort": "-x", - }, - ], - x=[ - dict( - x=alt.Y( - "sum(n_visit):Q", - title="Number of administrative records", - axis=alt.Axis(format="s"), - ), - tooltip=alt.Tooltip( - "sum(n_visit):Q", - format=",", - ), - sort={ - "field": "n_visit", - "op": "sum", - "order": "descending", - }, - ) - ], - ), - ) - return predictor_dashboard_config diff --git a/edsteva/utils/checks.py b/edsteva/utils/checks.py index 3d8f9cc6..8b29d4c6 100644 --- a/edsteva/utils/checks.py +++ b/edsteva/utils/checks.py @@ -1,4 +1,4 @@ -from typing import List, Union +from typing import List from edsteva.utils.typing import Data, DataFrame @@ -8,16 +8,10 @@ class MissingColumnError(Exception): def __init__( self, - required_columns: Union[List, dict], + required_columns: List, df_name: str = "", ): - if isinstance(required_columns, dict): - to_display_per_column = [ - f"- {column} ({msg})" if msg is not None else f"{column}" - for column, msg in required_columns.items() - ] - else: - to_display_per_column = [f"- {column}" for column in required_columns] + to_display_per_column = [f"- {column}" for column in required_columns] str_to_display = "\n".join(to_display_per_column) if df_name: @@ -36,15 +30,9 @@ class MissingTableError(Exception): def __init__( self, - required_tables: Union[List, dict], + required_tables: List, ): - if isinstance(required_tables, dict): - to_display_per_concept = [ - f"- {concept} ({msg})" if msg is not None else f"{concept}" - for concept, msg in required_tables.items() - ] - else: - to_display_per_concept = [f"- {concept}" for concept in required_tables] + to_display_per_concept = [f"- {concept}" for concept in required_tables] str_to_display = "\n".join(to_display_per_concept) message = f"Data is missing some tables, namely:\n {str_to_display}" @@ -87,6 +75,6 @@ def check_condition_source_systems( else: raise AttributeError( "Source systems must be a non empty list and not {}".format( - type(source_systems) + type(source_systems).__name__ ) ) diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index 5f47861f..1bfe4443 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -43,7 +43,7 @@ def to(framework: str, obj: DataObject, hdfs_user_path: str = None) -> DataObjec def pandas(obj: DataObject, hdfs_user_path: str = None) -> DataObject: if get_framework(obj) is _pandas: return obj - elif hdfs_user_path: + elif hdfs_user_path: # pragma: no cover parquet_path = hdfs_user_path + "/object.parquet" try: obj.to_parquet(parquet_path) @@ -59,7 +59,7 @@ def pandas(obj: DataObject, hdfs_user_path: str = None) -> DataObject: pandas_obj = obj.to_pandas() except AttributeError: error = True - if hdfs_user_path and os.path.exists(parquet_path): + if hdfs_user_path and os.path.exists(parquet_path): # pragma: no cover os.remove(parquet_path) if error: raise ValueError("Could not convert object to pandas.") diff --git a/edsteva/utils/registry.py b/edsteva/utils/registry.py deleted file mode 100644 index 9451c2e4..00000000 --- a/edsteva/utils/registry.py +++ /dev/null @@ -1,82 +0,0 @@ -import catalogue - -bio_c = catalogue.create("edsteva.probes.biology", "completeness_predictor") -note_c = catalogue.create("edsteva.probes.note", "completeness_predictor") - - -class Registry: - probes = catalogue.create( - "edsteva", - "probes", - entry_points=True, - ) - - models = catalogue.create( - "edsteva", - "models", - entry_points=True, - ) - - def get( - self, - key: str, - function_name: str, - ): - """ - Get a function from one of the registry - Parameters - ---------- - key : str - The registry's name. The function will be retrieved from self. - function_name : str - The function's name, The function will be retrieved via self..get(function_name). - Can be of the form "function_name.version" - Returns - ------- - Callable - The registered function - """ - - if not hasattr(self, key): - raise ValueError(f"eds-scikit's registry has no {key} key !") - r = getattr(self, key) - candidates = r.get_all().keys() - - if function_name in candidates: - # Exact match - func = r.get(function_name) - - else: - # Looking for a match excluding version string - candidates = [ - func for func in candidates if function_name == func.split(".")[0] - ] - if len(candidates) > 1: - # Multiple versions available, a specific one should be specified - raise ValueError( - ( - f"Multiple functions are available under the name {function_name} :\n" - f"{candidates}\n" - "Please choose one of the implementation listed above." - ) - ) - if not candidates: - # No registered function - raise ValueError( - ( - f"No function registered under the name {function_name} " - f"was found in eds-scikit's {key} registry.\n" - "If you work in AP-HP's ecosystem, you should install " - 'extra resources via `pip install "eds-scikit[aphp]"' - "You can define your own and decorate it as follow:\n" - "from eds_scikit.resources import registry\n" - f"@registry.{key}('{function_name}')" - f"def your_custom_func(args, **kwargs):", - " ...", - ) - ) - func = r.get(candidates[0]) - return func - - -registry = Registry() diff --git a/edsteva/viz/dashboards/probe/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py index dcce3cb8..275b3909 100644 --- a/edsteva/viz/dashboards/probe/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -81,14 +81,30 @@ def probe_dashboard( alt.data_transformers.disable_max_rows() probe_config = deepcopy(probe.get_viz_config("probe_dashboard")) + if fitted_model: + model_config = deepcopy(fitted_model.get_viz_config("probe_dashboard")) + if not model_line_config: + model_line_config = model_config["model_line"] + if not probe_line_config: + probe_line_config = model_config["probe_line"] if not main_chart_config: main_chart_config = probe_config["main_chart"] if not time_line_config: time_line_config = probe_config["time_line"] if not vertical_bar_charts_config: vertical_bar_charts_config = probe_config["vertical_bar_charts"] + if fitted_model: + vertical_bar_charts_config["y"] = ( + vertical_bar_charts_config["y"] + + model_config["extra_vertical_bar_charts"] + ) if not horizontal_bar_charts_config: horizontal_bar_charts_config = probe_config["horizontal_bar_charts"] + if fitted_model: + horizontal_bar_charts_config["x"] = ( + horizontal_bar_charts_config["x"] + + model_config["extra_horizontal_bar_charts"] + ) if not chart_style: chart_style = probe_config["chart_style"] @@ -103,21 +119,6 @@ def probe_dashboard( ) if fitted_model: - model_config = deepcopy(fitted_model.get_viz_config("probe_dashboard")) - if not model_line_config: - model_line_config = model_config["model_line"] - if not probe_line_config: - probe_line_config = model_config["probe_line"] - if not vertical_bar_charts_config: - vertical_bar_charts_config["y"] = ( - vertical_bar_charts_config["y"] - + model_config["extra_vertical_bar_charts"] - ) - if not horizontal_bar_charts_config: - horizontal_bar_charts_config["x"] = ( - horizontal_bar_charts_config["x"] - + model_config["extra_horizontal_bar_charts"] - ) chart = fitted_probe_dashboard( predictor=predictor, legend_predictor=legend_predictor, diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py index 91681231..6a9bdc05 100644 --- a/edsteva/viz/plots/estimates_densities/estimates_densities.py +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -159,7 +159,7 @@ def estimates_densities_plot( quantitative_estimates.append(estimate_density) else: - estimates[estimate] = estimates[estimate].astype("datetime64[s]") + estimates[estimate] = estimates[estimate].astype("datetime64[ns]") estimate_density = ( ( alt.Chart(estimates) diff --git a/edsteva/viz/plots/normalized_probe/normalized_probe.py b/edsteva/viz/plots/normalized_probe/normalized_probe.py index c2a33c57..64db9863 100644 --- a/edsteva/viz/plots/normalized_probe/normalized_probe.py +++ b/edsteva/viz/plots/normalized_probe/normalized_probe.py @@ -103,7 +103,7 @@ def normalized_probe_plot( probe_config = deepcopy(probe.get_viz_config("normalized_probe_plot")) model_config = deepcopy( - fitted_model.get_viz_config("normalized_probe_dashboard", predictor=predictor) + fitted_model.get_viz_config("normalized_probe_plot", predictor=predictor) ) if not probe_line_config: probe_line_config = model_config["probe_line"] diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index 0e83c148..f956d38d 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -8,9 +8,7 @@ import altair as alt import pandas as pd from loguru import logger -from toolz.curried import pipe -from edsteva import CACHE_DIR from edsteva.probes.utils.filter_df import filter_table_by_date from edsteva.probes.utils.utils import CARE_SITE_LEVEL_NAMES @@ -343,16 +341,6 @@ def month_diff(x, y): return end - start -def json_dir(data): - os.makedirs(CACHE_DIR / "data_viz", exist_ok=True) - return pipe( - data, - alt.to_json( - filename=(CACHE_DIR / "data_viz").__str__() + "/{prefix}-{hash}.{extension}" - ), - ) - - def save_html(obj: alt.Chart, filename: str): """Save chart in the specified file diff --git a/mkdocs.yml b/mkdocs.yml index f11451a0..e82d90d2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,17 +11,28 @@ extra: link: https://github.com/aphp theme: + language: en name: material custom_dir: docs/mkdocs_theme palette: - - scheme: default + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" toggle: - icon: material/brightness-4 - name: Switch to dark mode - - scheme: slate + icon: material/brightness-auto + name: Switch to light mode + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default toggle: icon: material/brightness-7 - name: Switch to light mode + name: Switch to dark mode + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to system preference + logo: assets/logo/edsteva_logo.svg favicon: assets/logo/edsteva_logo.svg features: diff --git a/tests/test_convert.py b/tests/test_convert.py index 5b514e9b..9c031167 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -53,7 +53,7 @@ def test_framework_koalas(example_objects): assert converted is obj -def test_unconvertible_objects(): +def test_unconvertible_objects(example_objects): objects = [1, "coucou", {"a": [1, 2]}, [1, 2, 3], 2.5, ks, pd] for obj in objects: with pytest.raises(ValueError): @@ -62,3 +62,6 @@ def test_unconvertible_objects(): for obj in objects: with pytest.raises(ValueError): framework.koalas(obj) + + with pytest.raises(ValueError): + framework.to("Koala", example_objects["pandas"]) diff --git a/tests/test_init.py b/tests/test_init.py new file mode 100644 index 00000000..0ee010e7 --- /dev/null +++ b/tests/test_init.py @@ -0,0 +1,8 @@ +import pytest + +from edsteva import improve_performances + + +@pytest.mark.first +def test_perf(): + improve_performances() diff --git a/tests/test_model.py b/tests/test_model.py index 89acc250..06428060 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -3,27 +3,22 @@ import pandas as pd import pytest -from edsteva import CACHE_DIR +from edsteva import CACHE_DIR, improve_performances from edsteva.io import SyntheticData from edsteva.models.rectangle_function import RectangleFunction from edsteva.models.step_function import StepFunction from edsteva.probes import NoteProbe, VisitProbe from edsteva.utils.loss_functions import l1_loss -from edsteva.viz.dashboards import normalized_probe_dashboard, probe_dashboard -from edsteva.viz.plots import ( - estimates_densities_plot, - normalized_probe_plot, - probe_plot, -) pytestmark = pytest.mark.filterwarnings("ignore") -step_data = SyntheticData(seed=41, mode="step").generate() -rect_data = SyntheticData(seed=41, mode="rect").generate() +improve_performances() +data_step = SyntheticData(seed=41, mode="step").generate() +data_rect = SyntheticData(seed=41, mode="rect").generate() -def test_step_function_visit_occurence(): - data = step_data +def test_base_model(): + data = data_step visit = VisitProbe() visit.compute( data=data, @@ -33,24 +28,21 @@ def test_step_function_visit_occurence(): care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], ) - visit_model = StepFunction(algo="quantile") - visit_model.fit( - probe=visit, - metric_functions=["error", "error_after_t0"], - start_date=data.t_min, - end_date=data.t_max, - ) - - visit_model = StepFunction(algo="loss_minimization") - visit_model.fit(probe=visit, loss_function=l1_loss) - - visit_model.fit( - probe=visit, - start_date=data.t_min, - end_date=data.t_max, - ) - + with pytest.raises(Exception): + visit_model.is_computed_estimates() + with pytest.raises(Exception): + visit_model.estimates = "fail" + visit_model.is_computed_estimates() + with pytest.raises(TypeError): + visit_model.fit(pd.DataFrame({"test": [1, 2]})) + + visit_model.fit(probe=visit) + with pytest.raises(Exception): + visit_model.estimates = visit_model.estimates.iloc[0:0] + visit_model.is_computed_estimates() + + visit_model.reset_estimates() # Test Cache saving visit_model.save() assert os.path.isfile(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") @@ -60,6 +52,12 @@ def test_step_function_visit_occurence(): assert not os.path.isfile(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") # Test target saving + visit_model.save( + name="Test", + ) + assert os.path.isfile(CACHE_DIR / "edsteva" / "models" / "test.pickle") + visit_model.delete() + assert not os.path.isfile(CACHE_DIR / "edsteva" / "models" / "test.pickle") visit_model.save( path="test.pickle", ) @@ -70,16 +68,45 @@ def test_step_function_visit_occurence(): visit_model.delete() assert not os.path.isfile("test.pickle") + +def test_step_function_visit_occurence(): + data = data_step + visit = VisitProbe() + visit.compute( + data=data, + start_date=data.t_min, + end_date=data.t_max, + stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, + care_site_ids=["1", "2"], + care_site_short_names=["Hôpital-1", "Hôpital-2"], + ) + + visit_model = StepFunction(algo="quantile") + visit_model.fit( + probe=visit, + metric_functions=["error", "error_after_t0"], + start_date=data.t_min, + end_date=data.t_max, + ) + visit_model = StepFunction(algo="loss_minimization") + visit_model.fit(probe=visit, loss_function=l1_loss) + visit_model.fit( + probe=visit, + start_date=data.t_min, + end_date=data.t_max, + metric_functions="error_after_t0", + ) + simulation = data.visit_occurrence[ ["care_site_id", "t_0_min", "t_0_max"] ].drop_duplicates() model = visit_model.estimates[["care_site_id", "t_0"]].drop_duplicates() prediction = simulation.merge(model, on="care_site_id") - prediction["t_0_min"] = prediction["t_0_min"].astype( - "datetime64[s]" + prediction["t_0_min"] = pd.to_datetime( + prediction["t_0_min"], unit="s" ) - pd.DateOffset(months=2) - prediction["t_0_max"] = prediction["t_0_max"].astype( - "datetime64[s]" + prediction["t_0_max"] = pd.to_datetime( + prediction["t_0_max"], unit="s" ) + pd.DateOffset(months=2) true_t0_min = prediction["t_0_min"] <= prediction["t_0"] true_t0_max = prediction["t_0_max"] >= prediction["t_0"] @@ -87,7 +114,7 @@ def test_step_function_visit_occurence(): def test_rect_function_visit_occurence(): - data = rect_data + data = data_rect visit = VisitProbe() visit.compute( data=data, @@ -99,36 +126,27 @@ def test_rect_function_visit_occurence(): ) visit_model = RectangleFunction() + visit_model._default_metrics = [] visit_model.fit( probe=visit, start_date=data.t_min, end_date=data.t_max, ) - visit_model.save( - path="test.pickle", - ) - assert os.path.isfile("test.pickle") - - visit_model = RectangleFunction() - visit_model.load("test.pickle") - visit_model.delete() - assert not os.path.isfile("test.pickle") - t_cols = ["t_0_min", "t_0_max", "t_1_min", "t_1_max"] simulation = data.visit_occurrence[["care_site_id", *t_cols]].drop_duplicates() model = visit_model.estimates[["care_site_id", "t_0", "t_1"]].drop_duplicates() prediction = simulation.merge(model, on="care_site_id") - prediction["t_0_min"] = prediction["t_0_min"].astype( - "datetime64[s]" + prediction["t_0_min"] = pd.to_datetime( + prediction["t_0_min"], unit="s" ) - pd.DateOffset(months=2) - prediction["t_0_max"] = prediction["t_0_max"].astype( - "datetime64[s]" + prediction["t_0_max"] = pd.to_datetime( + prediction["t_0_max"], unit="s" ) + pd.DateOffset(months=2) - prediction["t_1_min"] = prediction["t_1_min"].astype( - "datetime64[s]" + prediction["t_1_min"] = pd.to_datetime( + prediction["t_1_min"], unit="s" ) - pd.DateOffset(months=2) - prediction["t_1_max"] = prediction["t_1_max"].astype( - "datetime64[s]" + prediction["t_1_max"] = pd.to_datetime( + prediction["t_1_max"], unit="s" ) + pd.DateOffset(months=2) true_t0_min = prediction["t_0_min"] <= prediction["t_0"] true_t0_max = prediction["t_0_max"] >= prediction["t_0"] @@ -138,7 +156,7 @@ def test_rect_function_visit_occurence(): def test_step_function_note(): - data = step_data + data = data_step note = NoteProbe() note.compute( data=data, @@ -160,10 +178,10 @@ def test_step_function_note(): ["care_site_id", "t_0", "note_class_source_value"] ].drop_duplicates() simulation = simulation.rename(columns={"note_class_source_value": "note_type"}) - simulation["t_0_min"] = simulation["t_0"].astype("datetime64[s]") - pd.DateOffset( + simulation["t_0_min"] = pd.to_datetime(simulation["t_0"], unit="s") - pd.DateOffset( months=2 ) - simulation["t_0_max"] = simulation["t_0"].astype("datetime64[s]") + pd.DateOffset( + simulation["t_0_max"] = pd.to_datetime(simulation["t_0"], unit="s") + pd.DateOffset( months=2 ) model = note_model.estimates[["care_site_id", "t_0", "note_type"]].drop_duplicates() @@ -174,79 +192,3 @@ def test_step_function_note(): (prediction["t_0"] <= prediction["t_0_max"]) & (prediction["t_0_min"] <= prediction["t_0"]) ).all() - - -@pytest.mark.parametrize( - "data,Model", - [ - (step_data, StepFunction), - (rect_data, RectangleFunction), - ], -) -def test_viz_visit(data, Model): - visit = VisitProbe() - visit.compute( - data=data, - start_date=data.t_min, - end_date=data.t_max, - stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, - care_site_ids=["1", "2"], - care_site_short_names=["Hôpital-1", "Hôpital-2"], - ) - - visit_model = Model() - visit_model.fit( - probe=visit, - start_date=data.t_min, - end_date=data.t_max, - ) - - probe_plot( - probe=visit, - care_site_level="Hospital", - start_date=data.t_min, - end_date=data.t_max, - ) - - probe_plot( - probe=visit, - fitted_model=visit_model, - care_site_level="Hospital", - start_date=data.t_min, - end_date=data.t_max, - ) - - normalized_probe_plot( - probe=visit, - fitted_model=visit_model, - care_site_level="Hospital", - start_date=data.t_min, - end_date=data.t_max, - stay_type="ALL", - care_site_id="1", - care_site_short_name="Hôpital-1", - t_min=-24, - t_max=24, - ) - - estimates_densities_plot( - probe=visit, - fitted_model=visit_model, - ) - - probe_dashboard( - probe=visit, - fitted_model=visit_model, - care_site_level="Hospital", - ) - - probe_dashboard( - probe=visit, - care_site_level="Hospital", - ) - - normalized_probe_dashboard( - probe=visit, - fitted_model=visit_model, - care_site_level="Hospital", - ) diff --git a/tests/test_probes.py b/tests/test_probes.py index c37cf722..a3e2b3b2 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -6,40 +6,19 @@ from edsteva import CACHE_DIR, improve_performances from edsteva.io import SyntheticData from edsteva.probes import BiologyProbe, ConditionProbe, NoteProbe, VisitProbe -from edsteva.utils.checks import MissingColumnError, MissingTableError +from edsteva.probes.utils.filter_df import ( + filter_table_by_care_site, + filter_valid_observations, +) +from edsteva.probes.utils.utils import CARE_SITE_LEVEL_NAMES +from edsteva.utils.framework import is_koalas pytestmark = pytest.mark.filterwarnings("ignore") improve_performances() -data_step = SyntheticData(seed=41, mode="step").generate() -data_rect = SyntheticData(seed=41, mode="rect").generate() -data_missing = SyntheticData(seed=41, mode="step").generate() - - -def test_missing_checks(): - with pytest.raises(TypeError): - data_fake = [1, 2, 3] - visit = VisitProbe() - visit.compute( - data=data_fake, - ) - with pytest.raises(MissingColumnError): - data_missing.visit_occurrence = data_missing.visit_occurrence.drop( - columns="visit_occurrence_id" - ) - visit = VisitProbe() - visit.compute( - data=data_missing, - ) - with pytest.raises(MissingTableError): - data_missing.delete_table("unknown_table") # Test typo - data_missing.delete_table("fact_relationship") - visit = VisitProbe() - visit.compute( - data=data_missing, - ) - +data_step = SyntheticData(mean_visit=100, seed=41, mode="step").generate() +data_rect = SyntheticData(mean_visit=100, seed=41, mode="rect").generate() params = [ dict( @@ -49,12 +28,12 @@ def test_missing_checks(): biology_predictor="per_visit_default", only_impute_per_care_site=True, impute_missing_dates=True, - care_site_levels=["UF", "UC", "UH"], + care_site_levels=["Pole", "UF", "UC", "UH"], care_site_short_names=None, care_site_ids=None, - care_site_specialties=["REA ADULTE", "PSYCHIATRIE"], + care_site_specialties="PSYCHIATRIE", specialties_sets=None, - stay_durations=[1], + stay_durations=[1, 30], note_types={"ALL": ".*"}, stay_types=None, diag_types=None, @@ -68,7 +47,7 @@ def test_missing_checks(): "entity 5": "A4", }, start_date=None, - end_date=None, + end_date=datetime(2020, 1, 1), test_save=False, module="koalas", ), @@ -79,12 +58,12 @@ def test_missing_checks(): biology_predictor="per_measurement_default", only_impute_per_care_site=False, impute_missing_dates=True, - care_site_levels="Pole", + care_site_levels=["Hospital", "Pole", "UF"], care_site_ids="1", care_site_short_names="Hôpital-1", - care_site_specialties="PSYCHIATRIE", + care_site_specialties=None, specialties_sets={"All": ".*"}, - stay_durations=None, + stay_durations=[1], note_types="CRH", stay_types="hospitalisés", diag_types="DP", @@ -94,7 +73,7 @@ def test_missing_checks(): start_date="2010-01-03", end_date=None, test_save=False, - module="pandas", + module="koalas", ), dict( visit_predictor="per_visit_default", @@ -103,10 +82,10 @@ def test_missing_checks(): biology_predictor="per_visit_default", only_impute_per_care_site=False, impute_missing_dates=False, - care_site_levels=["Hospital", "UF", "Pole"], + care_site_levels="Hôpital", care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], - care_site_specialties=None, + care_site_specialties=["REA ADULTE", "PSYCHIATRIE"], specialties_sets=None, stay_durations=None, stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, @@ -114,7 +93,7 @@ def test_missing_checks(): diag_types={"ALL": ".*", "DP/DR": "DP|DR"}, condition_types={"ALL": ".*", "Cancer": "C"}, source_systems=["ORBIS"], - concepts_sets={"entity 1": "A0"}, + concepts_sets=None, start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, @@ -123,6 +102,66 @@ def test_missing_checks(): ] +@pytest.mark.parametrize("data", [data_step]) +def test_base_probe(data): + visit = VisitProbe() + with pytest.raises(Exception): + filter_valid_observations(data.care_site, "care_site") + with pytest.raises(AttributeError): + visit.compute(data=data, care_site_levels=["fail"]) + with pytest.raises(TypeError): + visit.compute(data=data, stay_types=45) + with pytest.raises(Exception): + visit.is_computed_probe() + with pytest.raises(TypeError): + visit.predictor = "fail" + visit.is_computed_probe() + visit.compute(data=data) + with pytest.raises(Exception): + visit.predictor = visit.predictor.iloc[0:0] + visit.is_computed_probe() + with pytest.raises(TypeError): + visit.reset_predictor() + visit.predictor.date = visit.predictor.date.astype(str) + visit.predictor.date.iloc[0] = "not a date" + visit.is_computed_probe() + + # Test cache saving + visit.reset_predictor() + visit.save() + assert os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") + visit = VisitProbe() + with pytest.raises(FileNotFoundError): + visit.load("fail.pkl") + visit.load() + visit.delete() + visit.delete("fail.pkl") + assert not os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") + + # Test target saving + visit.save( + name="TEst", + ) + assert os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "test.pickle") + visit.delete() + assert not os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "test.pickle") + visit.save( + path="test.pickle", + ) + assert os.path.isfile("test.pickle") + + visit = VisitProbe() + visit.load("test.pickle") + predictor = visit.predictor.copy() + visit.filter_care_site(care_site_ids="1") + assert visit.predictor.care_site_id.str.startswith("1").all() + visit.filter_care_site(care_site_ids=["1", "2"], care_site_short_names="Hôpital-2") + visit.reset_predictor() + assert predictor.equals(visit.predictor) + visit.delete() + assert not os.path.isfile("test.pickle") + + @pytest.mark.parametrize("data", [data_step, data_rect]) @pytest.mark.parametrize("params", params) def test_compute_visit_probe(data, params): @@ -133,6 +172,7 @@ def test_compute_visit_probe(data, params): visit = VisitProbe(completeness_predictor=params["visit_predictor"]) visit.compute( data=data, + care_site_levels=params["care_site_levels"], only_impute_per_care_site=params["only_impute_per_care_site"], impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], @@ -145,34 +185,118 @@ def test_compute_visit_probe(data, params): stay_durations=params["stay_durations"], ) - if params["test_save"]: - # Test Cache saving - visit.save() - assert os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") - visit = VisitProbe() - visit.load() - visit.delete() - assert not os.path.isfile( - CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle" + # Care site levels + if params["care_site_levels"]: + care_site_levels = [] + if isinstance(params["care_site_levels"], str): + if params["care_site_levels"] in CARE_SITE_LEVEL_NAMES.keys(): + care_site_levels.append( + CARE_SITE_LEVEL_NAMES[params["care_site_levels"]] + ) + elif params["care_site_levels"] in CARE_SITE_LEVEL_NAMES.values(): + care_site_levels.append(params["care_site_levels"]) + if isinstance(params["care_site_levels"], list): + for care_site_level in params["care_site_levels"]: + if care_site_level in CARE_SITE_LEVEL_NAMES.keys(): + care_site_levels.append(CARE_SITE_LEVEL_NAMES[care_site_level]) + elif care_site_level in CARE_SITE_LEVEL_NAMES.values(): + care_site_levels.append(care_site_level) + assert set(visit.predictor.care_site_level.unique()).issubset( + set(care_site_levels) ) - visit.save( - path="test.pickle", - ) - assert os.path.isfile("test.pickle") - - visit = VisitProbe() - visit.load("test.pickle") - predictor = visit.predictor.copy() - visit.filter_care_site(care_site_ids="1") - assert visit.predictor.care_site_id.str.startswith("1").all() - visit.filter_care_site( - care_site_ids=["1", "2"], care_site_short_names="Hôpital-2" - ) - visit.reset_predictor() - assert predictor.equals(visit.predictor) - visit.delete() - assert not os.path.isfile("test.pickle") + # Date + if params["start_date"]: + assert (visit.predictor.date >= params["start_date"]).all() + if params["end_date"]: + assert (visit.predictor.date < params["end_date"]).all() + + # Stay type + if params["stay_types"]: + if isinstance(params["stay_types"], dict): + assert set(visit.predictor.stay_type.unique()).issubset( + set(params["stay_types"].keys()) + ) + elif isinstance(params["stay_types"], str): + assert set(visit.predictor.stay_type.unique()).issubset( + set([params["stay_types"]]) + ) + elif isinstance(params["stay_types"], list): + assert set(visit.predictor.stay_type.unique()).issubset( + set(params["stay_types"]) + ) + + # Care site id + if params["care_site_ids"]: + if isinstance(params["care_site_ids"], str): + assert visit.predictor.care_site_id.str.startswith( + params["care_site_ids"] + ).all() + elif isinstance(params["care_site_ids"], list): + assert visit.predictor.care_site_id.str.startswith( + tuple(params["care_site_ids"]) + ).all() + + # Care site name + if params["care_site_short_names"]: + if isinstance(params["care_site_short_names"], str): + assert visit.predictor.care_site_id.str.startswith( + params["care_site_short_names"].split("-")[-1] + ).all() + elif isinstance(params["care_site_short_names"], list): + assert visit.predictor.care_site_id.str.startswith( + tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) + ).all() + + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=visit.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert visit.predictor.care_site_id.isin(care_site_filters).all() + + # Specialty sets + if params["specialties_sets"]: + if isinstance(params["specialties_sets"], dict): + assert set(visit.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"].keys()) + ) + elif isinstance(params["specialties_sets"], str): + assert set(visit.predictor.specialties_set.unique()).issubset( + set([params["specialties_sets"]]) + ) + elif isinstance(params["specialties_sets"], list): + assert set(visit.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"]) + ) + + # Stay durations + if params["stay_durations"]: + if isinstance(params["stay_durations"], list): + min_duration = params["stay_durations"][0] + max_duration = params["stay_durations"][-1] + specialties_sets = [ + "Incomplete stay", + "<= {} days".format(min_duration), + ">= {} days".format(max_duration), + ] + n_duration = len(params["stay_durations"]) + for i in range(0, n_duration - 1): + min = params["stay_durations"][i] + max = params["stay_durations"][i + 1] + specialties_sets.append("{} days - {} days".format(min, max)) + assert set(visit.predictor.length_of_stay.unique()).issubset( + set(specialties_sets) + ) + + # Viz config + assert isinstance(visit.get_viz_config(viz_type="normalized_probe_plot"), dict) + with pytest.raises(Exception): + visit.get_viz_config(viz_type="unknown_plot") @pytest.mark.parametrize("data", [data_step, data_rect]) @@ -185,6 +309,7 @@ def test_compute_note_probe(data, params): note = NoteProbe(completeness_predictor=params["note_predictor"]) note.compute( data=data, + care_site_levels=params["care_site_levels"], only_impute_per_care_site=params["only_impute_per_care_site"], impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], @@ -198,6 +323,129 @@ def test_compute_note_probe(data, params): note_types=params["note_types"], ) + # Care site levels + if params["care_site_levels"]: + assert set(note.predictor.care_site_level.unique()) == set(["Hôpital"]) + + # Date + if params["start_date"]: + assert (note.predictor.date >= params["start_date"]).all() + if params["end_date"]: + assert (note.predictor.date < params["end_date"]).all() + + # Stay type + if params["stay_types"]: + if isinstance(params["stay_types"], dict): + assert set(note.predictor.stay_type.unique()).issubset( + set(params["stay_types"].keys()) + ) + elif isinstance(params["stay_types"], str): + assert set(note.predictor.stay_type.unique()).issubset( + set([params["stay_types"]]) + ) + elif isinstance(params["stay_types"], list): + assert set(note.predictor.stay_type.unique()).issubset( + set(params["stay_types"]) + ) + + # Care site id + if params["care_site_ids"]: + if isinstance(params["care_site_ids"], str): + assert note.predictor.care_site_id.str.startswith( + params["care_site_ids"] + ).all() + elif isinstance(params["care_site_ids"], list): + assert note.predictor.care_site_id.str.startswith( + tuple(params["care_site_ids"]) + ).all() + + # Care site name + if params["care_site_short_names"]: + if isinstance(params["care_site_short_names"], str): + assert note.predictor.care_site_id.str.startswith( + params["care_site_short_names"].split("-")[-1] + ).all() + elif isinstance(params["care_site_short_names"], list): + assert note.predictor.care_site_id.str.startswith( + tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) + ).all() + + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=note.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert note.predictor.care_site_id.isin(care_site_filters).all() + + # Specialty sets + if params["specialties_sets"]: + if isinstance(params["specialties_sets"], dict): + assert set(note.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"].keys()) + ) + elif isinstance(params["specialties_sets"], str): + assert set(note.predictor.specialties_set.unique()).issubset( + set([params["specialties_sets"]]) + ) + elif isinstance(params["specialties_sets"], list): + assert set(note.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"]) + ) + + # Stay durations + if params["stay_durations"]: + if isinstance(params["stay_durations"], list): + min_duration = params["stay_durations"][0] + max_duration = params["stay_durations"][-1] + specialties_sets = [ + "Incomplete stay", + "<= {} days".format(min_duration), + ">= {} days".format(max_duration), + ] + n_duration = len(params["stay_durations"]) + for i in range(0, n_duration - 1): + min = params["stay_durations"][i] + max = params["stay_durations"][i + 1] + specialties_sets.append("{} days - {} days".format(min, max)) + assert set(note.predictor.length_of_stay.unique()).issubset( + set(specialties_sets) + ) + + # Note type + if params["note_types"]: + if isinstance(params["note_types"], dict): + assert set(note.predictor.note_type.unique()).issubset( + set(params["note_types"].keys()) + ) + elif isinstance(params["note_types"], str): + assert set(note.predictor.note_type.unique()).issubset( + set([params["note_types"]]) + ) + elif isinstance(params["note_types"], list): + assert set(note.predictor.note_type.unique()).issubset( + set(params["note_types"]) + ) + + # Viz config + assert isinstance(note.get_viz_config(viz_type="normalized_probe_plot"), dict) + with pytest.raises(Exception): + note.get_viz_config(viz_type="unknown_plot") + + +@pytest.mark.parametrize("data", [data_step]) +def test_condition(data): + condition = ConditionProbe() + with pytest.raises(AttributeError): + condition.compute(data=data, source_systems=["AREN"]) + with pytest.raises(AttributeError): + condition.compute(data=data, source_systems=[]) + with pytest.raises(AttributeError): + condition.compute(data=data, source_systems=456) + @pytest.mark.parametrize("data", [data_step, data_rect]) @pytest.mark.parametrize("params", params) @@ -209,6 +457,7 @@ def test_compute_condition_probe(data, params): condition = ConditionProbe(completeness_predictor=params["condition_predictor"]) condition.compute( data=data, + care_site_levels=params["care_site_levels"], only_impute_per_care_site=params["only_impute_per_care_site"], impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], @@ -224,6 +473,154 @@ def test_compute_condition_probe(data, params): source_systems=params["source_systems"], ) + # Care site levels + if params["care_site_levels"]: + care_site_levels = [] + care_site_level_names_condition = CARE_SITE_LEVEL_NAMES.copy() + care_site_level_names_condition.pop("UH", None) + care_site_level_names_condition.pop("UC", None) + if isinstance(params["care_site_levels"], str): + if params["care_site_levels"] in care_site_level_names_condition.keys(): + care_site_levels.append( + care_site_level_names_condition[params["care_site_levels"]] + ) + elif params["care_site_levels"] in care_site_level_names_condition.values(): + care_site_levels.append(params["care_site_levels"]) + if isinstance(params["care_site_levels"], list): + for care_site_level in params["care_site_levels"]: + if care_site_level in care_site_level_names_condition.keys(): + care_site_levels.append( + care_site_level_names_condition[care_site_level] + ) + elif care_site_level in care_site_level_names_condition.values(): + care_site_levels.append(care_site_level) + assert set(condition.predictor.care_site_level.unique()).issubset( + set(care_site_levels) + ) + + # Date + if params["start_date"]: + assert (condition.predictor.date >= params["start_date"]).all() + if params["end_date"]: + assert (condition.predictor.date < params["end_date"]).all() + + # Stay type + if params["stay_types"]: + if isinstance(params["stay_types"], dict): + assert set(condition.predictor.stay_type.unique()).issubset( + set(params["stay_types"].keys()) + ) + elif isinstance(params["stay_types"], str): + assert set(condition.predictor.stay_type.unique()).issubset( + set([params["stay_types"]]) + ) + elif isinstance(params["stay_types"], list): + assert set(condition.predictor.stay_type.unique()).issubset( + set(params["stay_types"]) + ) + + # Care site id + if params["care_site_ids"]: + if isinstance(params["care_site_ids"], str): + assert condition.predictor.care_site_id.str.startswith( + params["care_site_ids"] + ).all() + elif isinstance(params["care_site_ids"], list): + assert condition.predictor.care_site_id.str.startswith( + tuple(params["care_site_ids"]) + ).all() + + # Care site name + if params["care_site_short_names"]: + if isinstance(params["care_site_short_names"], str): + assert condition.predictor.care_site_id.str.startswith( + params["care_site_short_names"].split("-")[-1] + ).all() + elif isinstance(params["care_site_short_names"], list): + assert condition.predictor.care_site_id.str.startswith( + tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) + ).all() + + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=condition.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert condition.predictor.care_site_id.isin(care_site_filters).all() + + # Specialty sets + if params["specialties_sets"]: + if isinstance(params["specialties_sets"], dict): + assert set(condition.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"].keys()) + ) + elif isinstance(params["specialties_sets"], str): + assert set(condition.predictor.specialties_set.unique()).issubset( + set()[params["specialties_sets"]] + ) + elif isinstance(params["specialties_sets"], list): + assert set(condition.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"]) + ) + + # Stay durations + if params["stay_durations"]: + if isinstance(params["stay_durations"], list): + min_duration = params["stay_durations"][0] + max_duration = params["stay_durations"][-1] + specialties_sets = [ + "Incomplete stay", + "<= {} days".format(min_duration), + ">= {} days".format(max_duration), + ] + n_duration = len(params["stay_durations"]) + for i in range(0, n_duration - 1): + min = params["stay_durations"][i] + max = params["stay_durations"][i + 1] + specialties_sets.append("{} days - {} days".format(min, max)) + assert set(condition.predictor.length_of_stay.unique()).issubset( + set(specialties_sets) + ) + + # Diag type + if params["diag_types"]: + if isinstance(params["diag_types"], dict): + assert set(condition.predictor.diag_type.unique()).issubset( + set(params["diag_types"].keys()) + ) + elif isinstance(params["diag_types"], str): + assert set(condition.predictor.diag_type.unique()).issubset( + set([params["diag_types"]]) + ) + elif isinstance(params["diag_types"], list): + assert set(condition.predictor.diag_type.unique()).issubset( + set(params["diag_types"]) + ) + + # Condition type + if params["condition_types"]: + if isinstance(params["condition_types"], dict): + assert set(condition.predictor.condition_type.unique()).issubset( + set(params["condition_types"].keys()) + ) + elif isinstance(params["condition_types"], str): + assert set(condition.predictor.condition_type.unique()).issubset( + set([params["condition_types"]]) + ) + elif isinstance(params["condition_types"], list): + assert set(condition.predictor.condition_type.unique()).issubset( + set(params["condition_types"]) + ) + + # Viz config + assert isinstance(condition.get_viz_config(viz_type="normalized_probe_plot"), dict) + with pytest.raises(Exception): + condition.get_viz_config(viz_type="unknown_plot") + @pytest.mark.parametrize("data", [data_step, data_rect]) @pytest.mark.parametrize("params", params) @@ -235,6 +632,7 @@ def test_compute_biology_probe(data, params): biology = BiologyProbe(completeness_predictor=params["biology_predictor"]) biology.compute( data=data, + care_site_levels=params["care_site_levels"], only_impute_per_care_site=params["only_impute_per_care_site"], impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], @@ -247,3 +645,115 @@ def test_compute_biology_probe(data, params): stay_durations=params["stay_durations"], concepts_sets=params["concepts_sets"], ) + + # Care site levels + if params["care_site_levels"]: + assert set(biology.predictor.care_site_level.unique()) == set(["Hôpital"]) + + # Date + if params["start_date"]: + assert (biology.predictor.date >= params["start_date"]).all() + if params["end_date"]: + assert (biology.predictor.date < params["end_date"]).all() + + # Stay type + if params["stay_types"]: + if isinstance(params["stay_types"], dict): + assert set(biology.predictor.stay_type.unique()).issubset( + set(params["stay_types"].keys()) + ) + elif isinstance(params["stay_types"], str): + assert set(biology.predictor.stay_type.unique()).issubset( + set([params["stay_types"]]) + ) + elif isinstance(params["stay_types"], list): + assert set(biology.predictor.stay_type.unique()).issubset( + set(params["stay_types"]) + ) + + # Care site id + if params["care_site_ids"]: + if isinstance(params["care_site_ids"], str): + assert biology.predictor.care_site_id.str.startswith( + params["care_site_ids"] + ).all() + elif isinstance(params["care_site_ids"], list): + assert biology.predictor.care_site_id.str.startswith( + tuple(params["care_site_ids"]) + ).all() + + # Care site name + if params["care_site_short_names"]: + if isinstance(params["care_site_short_names"], str): + assert biology.predictor.care_site_id.str.startswith( + params["care_site_short_names"].split("-")[-1] + ).all() + elif isinstance(params["care_site_short_names"], list): + assert biology.predictor.care_site_id.str.startswith( + tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) + ).all() + + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=biology.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert biology.predictor.care_site_id.isin(care_site_filters).all() + + # Specialty sets + if params["specialties_sets"]: + if isinstance(params["specialties_sets"], dict): + assert set(biology.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"].keys()) + ) + elif isinstance(params["specialties_sets"], str): + assert set(biology.predictor.specialties_set.unique()).issubset( + set([params["specialties_sets"]]) + ) + elif isinstance(params["specialties_sets"], list): + assert set(biology.predictor.specialties_set.unique()).issubset( + set(params["specialties_sets"]) + ) + + # Stay durations + if params["stay_durations"]: + if isinstance(params["stay_durations"], list): + min_duration = params["stay_durations"][0] + max_duration = params["stay_durations"][-1] + specialties_sets = [ + "Incomplete stay", + "<= {} days".format(min_duration), + ">= {} days".format(max_duration), + ] + n_duration = len(params["stay_durations"]) + for i in range(0, n_duration - 1): + min = params["stay_durations"][i] + max = params["stay_durations"][i + 1] + specialties_sets.append("{} days - {} days".format(min, max)) + assert set(biology.predictor.length_of_stay.unique()).issubset( + set(specialties_sets) + ) + + # Concepts sets + if params["concepts_sets"]: + if isinstance(params["concepts_sets"], dict): + assert set(biology.predictor.concepts_set.unique()).issubset( + set(params["concepts_sets"].keys()) + ) + elif isinstance(params["concepts_sets"], str): + assert set(biology.predictor.concepts_set.unique()).issubset( + set([params["concepts_sets"]]) + ) + elif isinstance(params["concepts_sets"], list): + assert set(biology.predictor.concepts_set.unique()).issubset( + set(params["concepts_sets"]) + ) + + # Viz config + assert isinstance(biology.get_viz_config(viz_type="normalized_probe_plot"), dict) + with pytest.raises(Exception): + biology.get_viz_config(viz_type="unknown_plot") diff --git a/tests/test_synthetic.py b/tests/test_synthetic.py new file mode 100644 index 00000000..c30deeb0 --- /dev/null +++ b/tests/test_synthetic.py @@ -0,0 +1,69 @@ +import pandas as pd +import pytest +from databricks import koalas as ks + +from edsteva import improve_performances +from edsteva.io import SyntheticData +from edsteva.probes import VisitProbe +from edsteva.utils.checks import MissingColumnError, MissingTableError, check_tables + +pytestmark = pytest.mark.filterwarnings("ignore") + + +improve_performances() +data_missing = SyntheticData(mean_visit=100, seed=41, mode="step").generate() + + +def test_bad_params(): + with pytest.raises(Exception): + SyntheticData(mean_visit=100, seed=41, mode="fail").generate() + with pytest.raises(Exception): + SyntheticData(mean_visit=100, seed=41, module="fail").generate() + + +def test_convert(): + data_koalas = SyntheticData( + mean_visit=100, seed=41, mode="step", module="koalas" + ).generate() + for table in data_koalas.available_tables: + assert isinstance(getattr(data_koalas, table), type(ks.DataFrame())) + data_koalas.convert_to_koalas() + data_koalas.reset_to_pandas() + for table in data_koalas.available_tables: + assert isinstance(getattr(data_koalas, table), type(pd.DataFrame())) + + data_pandas = SyntheticData( + mean_visit=100, seed=41, mode="step", module="pandas" + ).generate() + for table in data_pandas.available_tables: + isinstance(getattr(data_pandas, table), type(pd.DataFrame())) + data_pandas.reset_to_pandas() + data_pandas.convert_to_koalas() + for table in data_pandas.available_tables: + assert isinstance(getattr(data_pandas, table), type(ks.DataFrame())) + + +def test_missing_checks(): + with pytest.raises(TypeError): + data_fake = [1, 2, 3] + visit = VisitProbe() + visit.compute( + data=data_fake, + ) + with pytest.raises(MissingColumnError): + data_missing.visit_occurrence = data_missing.visit_occurrence.drop( + columns="visit_occurrence_id" + ) + visit = VisitProbe() + visit.compute( + data=data_missing, + ) + with pytest.raises(AttributeError): + check_tables(data=45, required_tables=["fail"]) + with pytest.raises(MissingTableError): + data_missing.delete_table("unknown_table") # Test typo + data_missing.delete_table("fact_relationship") + visit = VisitProbe() + visit.compute( + data=data_missing, + ) diff --git a/tests/test_viz.py b/tests/test_viz.py new file mode 100644 index 00000000..2748b8a9 --- /dev/null +++ b/tests/test_viz.py @@ -0,0 +1,200 @@ +import pytest + +from edsteva import improve_performances +from edsteva.io import SyntheticData +from edsteva.models.rectangle_function import RectangleFunction +from edsteva.models.step_function import StepFunction +from edsteva.probes import BiologyProbe, ConditionProbe, NoteProbe, VisitProbe +from edsteva.viz.dashboards import normalized_probe_dashboard, probe_dashboard +from edsteva.viz.plots import ( + estimates_densities_plot, + normalized_probe_plot, + probe_plot, +) + +pytestmark = pytest.mark.filterwarnings("ignore") + +improve_performances() +data_step = SyntheticData(mean_visit=100, seed=41, mode="step").generate() +data_rect = SyntheticData(mean_visit=100, seed=41, mode="rect").generate() + + +@pytest.fixture(scope="session") +def tmp_dir(tmp_path_factory): + template_dir = tmp_path_factory.mktemp("Test") + return template_dir + + +@pytest.mark.parametrize( + "data,Model", + [ + (data_step, StepFunction), + ], +) +@pytest.mark.parametrize( + "Probe", + [ + VisitProbe, + ], +) +def test_viz_fail(data, Model, Probe, tmp_dir): + probe = Probe() + probe.compute( + data=data, + start_date=data.t_min, + end_date=data.t_max, + stay_types={"HC": "hospitalisés", "Urg": "urgences"}, + care_site_ids=["1", "2"], + ) + model = Model() + model.fit( + probe=probe, + start_date=data.t_min, + end_date=data.t_max, + ) + + with pytest.raises(TypeError): + probe_plot( + probe=probe, + care_site_level="Hospital", + start_date=data.t_min, + end_date=data.t_max, + x_axis_title="x_axis", + y_axis_title="y_axis", + save_path=tmp_dir / "test.html", + care_site_specialty="fail", + ) + with pytest.raises(AttributeError): + probe_plot( + probe=probe, + care_site_level="fail", + start_date=data.t_min, + end_date=data.t_max, + x_axis_title="x_axis", + y_axis_title="y_axis", + save_path=tmp_dir / "test.html", + ) + with pytest.raises(Exception): + model.estimates = model.estimates.iloc[:-1] # Remove last row + probe_plot( + probe=probe, + fitted_model=model, + care_site_level="Hospital", + start_date=data.t_min, + end_date=data.t_max, + ) + model.reset_estimates() + + +@pytest.mark.parametrize( + "data,Model", + [ + (data_step, StepFunction), + (data_rect, RectangleFunction), + ], +) +@pytest.mark.parametrize( + "Probe", + [ + BiologyProbe, + ConditionProbe, + NoteProbe, + VisitProbe, + ], +) +def test_viz_visit(data, Model, Probe, tmp_dir): + probe = Probe() + for completness_predictor in probe.available_completeness_predictors(): + probe._completness_predictor = completness_predictor + probe.compute( + data=data, + start_date=data.t_min, + end_date=data.t_max, + stay_types={"HC": "hospitalisés", "Urg": "urgences"}, + care_site_ids=["1", "2"], + care_site_short_names=["Hôpital-1", "Hôpital-2"], + concepts_sets=None, + note_type=None, + ) + model = Model() + model.fit( + probe=probe, + start_date=data.t_min, + end_date=data.t_max, + ) + with pytest.raises(ValueError): + model.get_viz_config(viz_type="unknown_plot") + viz_configs = [completness_predictor] + if type(probe).__name__ == "BiologyProbe": + viz_configs.append("n_measurement") + elif type(probe).__name__ == "ConditionProbe": + viz_configs.append("n_condition") + elif type(probe).__name__ == "NoteProbe": + viz_configs.append("n_note") + elif type(probe).__name__ == "VisitProbe": + viz_configs.append("n_visit") + for viz_config in viz_configs: + probe._viz_config["probe_plot"] = viz_config + probe_plot( + probe=probe, + care_site_level="Hospital", + start_date=data.t_min, + end_date=data.t_max, + x_axis_title="x_axis", + y_axis_title="y_axis", + save_path=tmp_dir / "test.html", + care_site_specialty="Non Renseigné", + ) + + model.reset_estimates() + probe_plot( + probe=probe, + fitted_model=model, + care_site_level="Hospital", + start_date=data.t_min, + end_date=data.t_max, + save_path=tmp_dir / "test.html", + ) + + probe._viz_config["normalized_probe_plot"] = viz_config + normalized_probe_plot( + probe=probe, + fitted_model=model, + care_site_level="Hospital", + start_date=data.t_min, + end_date=data.t_max, + stay_type="HC", + care_site_id="1", + care_site_short_name="Hôpital-1", + t_min=-24, + t_max=24, + save_path=tmp_dir / "test.html", + ) + + probe._viz_config["estimates_densities_plot"] = viz_config + estimates_densities_plot( + probe=probe, + fitted_model=model, + save_path=tmp_dir / "test.html", + ) + + probe._viz_config["probe_dashboard"] = viz_config + probe_dashboard( + probe=probe, + fitted_model=model, + care_site_level="Hospital", + ) + + probe_dashboard( + probe=probe, + care_site_level="Hospital", + save_path=tmp_dir / "test.html", + ) + + probe._viz_config["normalized_probe_dashboard"] = viz_config + normalized_probe_dashboard( + probe=probe, + fitted_model=model, + care_site_level="Hospital", + save_path=tmp_dir / "test.html", + ) From 8cda3be6301fc3c03d1d0149d5894ad48edd4d5f Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 10 May 2023 14:57:49 +0200 Subject: [PATCH 030/127] Fix test --- binder/postBuild | 2 +- poetry.lock | 1458 ++++++++++++++++++++++---------------------- tests/test_init.py | 8 - tests/test_viz.py | 2 +- 4 files changed, 742 insertions(+), 728 deletions(-) delete mode 100644 tests/test_init.py diff --git a/binder/postBuild b/binder/postBuild index 13d3ae85..38e1829e 100644 --- a/binder/postBuild +++ b/binder/postBuild @@ -1,3 +1,3 @@ pip install edsteva --no-cache-dir pip install nb-black==1.0.7 -pip install jupyterlab-rise==0.1.0 +pip install jupyterlab-rise==0.2.0 diff --git a/poetry.lock b/poetry.lock index 70629985..fad8fc77 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,19 +14,23 @@ files = [ [[package]] name = "aiosqlite" -version = "0.18.0" +version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "aiosqlite-0.18.0-py3-none-any.whl", hash = "sha256:c3511b841e3a2c5614900ba1d179f366826857586f78abd75e7cbeb88e75a557"}, - {file = "aiosqlite-0.18.0.tar.gz", hash = "sha256:faa843ef5fb08bafe9a9b3859012d3d9d6f77ce3637899de20606b7fc39aa213"}, + {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, + {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, ] [package.dependencies] typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} +[package.extras] +dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] +docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] + [[package]] name = "altair" version = "4.2.2" @@ -161,37 +165,40 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "attrs" -version = "22.2.0" +version = "23.1.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + [package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.11.0" +version = "2.12.1" description = "Internationalization utilities" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] [package.dependencies] -pytz = ">=2015.7" +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [[package]] name = "backcall" @@ -207,14 +214,14 @@ files = [ [[package]] name = "beautifulsoup4" -version = "4.11.2" +version = "4.12.2" description = "Screen-scraping library" category = "dev" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, - {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, ] [package.dependencies] @@ -226,37 +233,37 @@ lxml = ["lxml"] [[package]] name = "black" -version = "23.1.0" +version = "23.3.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, - {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, - {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, - {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, - {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, - {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, - {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, - {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, - {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, - {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, - {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, - {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, - {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, - {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] [package.dependencies] @@ -324,14 +331,14 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] [[package]] @@ -425,100 +432,87 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.0.1" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] [[package]] @@ -551,63 +545,63 @@ files = [ [[package]] name = "coverage" -version = "7.1.0" +version = "7.2.5" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, - {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, - {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, - {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, - {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, - {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, - {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, - {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, - {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, - {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, - {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, - {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, - {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, - {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, - {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, + {file = "coverage-7.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c"}, + {file = "coverage-7.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c"}, + {file = "coverage-7.2.5-cp310-cp310-win32.whl", hash = "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5"}, + {file = "coverage-7.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c"}, + {file = "coverage-7.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce"}, + {file = "coverage-7.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6"}, + {file = "coverage-7.2.5-cp311-cp311-win32.whl", hash = "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b"}, + {file = "coverage-7.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068"}, + {file = "coverage-7.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969"}, + {file = "coverage-7.2.5-cp37-cp37m-win32.whl", hash = "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718"}, + {file = "coverage-7.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0"}, + {file = "coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84"}, + {file = "coverage-7.2.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1"}, + {file = "coverage-7.2.5-cp38-cp38-win32.whl", hash = "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813"}, + {file = "coverage-7.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212"}, + {file = "coverage-7.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b"}, + {file = "coverage-7.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1"}, + {file = "coverage-7.2.5-cp39-cp39-win32.whl", hash = "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31"}, + {file = "coverage-7.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252"}, + {file = "coverage-7.2.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3"}, + {file = "coverage-7.2.5.tar.gz", hash = "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47"}, ] [package.dependencies] @@ -618,29 +612,30 @@ toml = ["tomli"] [[package]] name = "debugpy" -version = "1.6.6" +version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.6-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0ea1011e94416e90fb3598cc3ef5e08b0a4dd6ce6b9b33ccd436c1dffc8cd664"}, - {file = "debugpy-1.6.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dff595686178b0e75580c24d316aa45a8f4d56e2418063865c114eef651a982e"}, - {file = "debugpy-1.6.6-cp310-cp310-win32.whl", hash = "sha256:87755e173fcf2ec45f584bb9d61aa7686bb665d861b81faa366d59808bbd3494"}, - {file = "debugpy-1.6.6-cp310-cp310-win_amd64.whl", hash = "sha256:72687b62a54d9d9e3fb85e7a37ea67f0e803aaa31be700e61d2f3742a5683917"}, - {file = "debugpy-1.6.6-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:78739f77c58048ec006e2b3eb2e0cd5a06d5f48c915e2fc7911a337354508110"}, - {file = "debugpy-1.6.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23c29e40e39ad7d869d408ded414f6d46d82f8a93b5857ac3ac1e915893139ca"}, - {file = "debugpy-1.6.6-cp37-cp37m-win32.whl", hash = "sha256:7aa7e103610e5867d19a7d069e02e72eb2b3045b124d051cfd1538f1d8832d1b"}, - {file = "debugpy-1.6.6-cp37-cp37m-win_amd64.whl", hash = "sha256:f6383c29e796203a0bba74a250615ad262c4279d398e89d895a69d3069498305"}, - {file = "debugpy-1.6.6-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:23363e6d2a04d726bbc1400bd4e9898d54419b36b2cdf7020e3e215e1dcd0f8e"}, - {file = "debugpy-1.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b5d1b13d7c7bf5d7cf700e33c0b8ddb7baf030fcf502f76fc061ddd9405d16c"}, - {file = "debugpy-1.6.6-cp38-cp38-win32.whl", hash = "sha256:70ab53918fd907a3ade01909b3ed783287ede362c80c75f41e79596d5ccacd32"}, - {file = "debugpy-1.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:c05349890804d846eca32ce0623ab66c06f8800db881af7a876dc073ac1c2225"}, - {file = "debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771739902b1ae22a120dbbb6bd91b2cae6696c0e318b5007c5348519a4211c6"}, - {file = "debugpy-1.6.6-cp39-cp39-win32.whl", hash = "sha256:549ae0cb2d34fc09d1675f9b01942499751d174381b6082279cf19cdb3c47cbe"}, - {file = "debugpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:de4a045fbf388e120bb6ec66501458d3134f4729faed26ff95de52a754abddb1"}, - {file = "debugpy-1.6.6-py2.py3-none-any.whl", hash = "sha256:be596b44448aac14eb3614248c91586e2bc1728e020e82ef3197189aae556115"}, - {file = "debugpy-1.6.6.zip", hash = "sha256:b9c2130e1c632540fbf9c2c88341493797ddf58016e7cba02e311de9b0a96b67"}, + {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, + {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, + {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, + {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, + {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, + {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, + {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, + {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, + {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, + {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, + {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, + {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, + {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, + {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, + {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, + {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, + {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, + {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, ] [[package]] @@ -693,14 +688,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -708,14 +703,14 @@ test = ["pytest (>=6)"] [[package]] name = "fastjsonschema" -version = "2.16.2" +version = "2.16.3" description = "Fastest Python implementation of JSON schema" category = "dev" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.16.2-py3-none-any.whl", hash = "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"}, - {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"}, + {file = "fastjsonschema-2.16.3-py3-none-any.whl", hash = "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490"}, + {file = "fastjsonschema-2.16.3.tar.gz", hash = "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e"}, ] [package.extras] @@ -723,19 +718,19 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.9.0" +version = "3.12.0" description = "A platform independent file lock." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, - {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, + {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, + {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, ] [package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] [[package]] name = "fqdn" @@ -787,14 +782,14 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.30" -description = "GitPython is a python library used to interact with Git repositories" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.30-py3-none-any.whl", hash = "sha256:cd455b0000615c60e286208ba540271af9fe531fa6a87cc590a7298785ab2882"}, - {file = "GitPython-3.1.30.tar.gz", hash = "sha256:769c2d83e13f5d938b7688479da374c4e3d49f71549aaf462b646db9602ea6f8"}, + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, ] [package.dependencies] @@ -803,33 +798,30 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "griffe" -version = "0.25.4" +version = "0.27.3" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "griffe-0.25.4-py3-none-any.whl", hash = "sha256:919f935a358b31074d16e324e26b041883c60a8cf10504655e394afc3a7caad8"}, - {file = "griffe-0.25.4.tar.gz", hash = "sha256:f190edf8ef58d43c856d2d6761ec324a043ff60deb8c14359263571e8b91fe68"}, + {file = "griffe-0.27.3-py3-none-any.whl", hash = "sha256:094513b209d4acd4b2680c2415d3af5f8ed925714795380c2a7d070e222e0b27"}, + {file = "griffe-0.27.3.tar.gz", hash = "sha256:a3d0f75aa76b80f181f818cf605f658a69fccf287aaeeeafc7a6cf4e6a2ca27e"}, ] [package.dependencies] cached-property = {version = "*", markers = "python_version < \"3.8\""} colorama = ">=0.4" -[package.extras] -async = ["aiofiles (>=0.7,<1.0)"] - [[package]] name = "identify" -version = "2.5.17" +version = "2.5.24" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "identify-2.5.17-py2.py3-none-any.whl", hash = "sha256:7d526dd1283555aafcc91539acc061d8f6f59adb0a7bba462735b0a318bff7ed"}, - {file = "identify-2.5.17.tar.gz", hash = "sha256:93cc61a861052de9d4c541a7acb7e3dcc9c11b398a2144f6e52ae5285f5f4f06"}, + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, ] [package.extras] @@ -849,14 +841,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.0.0" +version = "6.6.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, + {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, + {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, ] [package.dependencies] @@ -870,14 +862,14 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag [[package]] name = "importlib-resources" -version = "5.10.2" +version = "5.12.0" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_resources-5.10.2-py3-none-any.whl", hash = "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6"}, - {file = "importlib_resources-5.10.2.tar.gz", hash = "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484"}, + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, ] [package.dependencies] @@ -1135,36 +1127,39 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.5.0" +version = "0.6.3" description = "Jupyter Event System library" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_events-0.5.0-py3-none-any.whl", hash = "sha256:6f7b67bf42b8a370c992187194ed02847dfa02307a7aebe9913e2d3979b9b6b8"}, - {file = "jupyter_events-0.5.0.tar.gz", hash = "sha256:e27ffdd6138699d47d42cb65ae6d79334ff7c0d923694381c991ce56a140f2cd"}, + {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, + {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, ] [package.dependencies] -jsonschema = {version = ">=4.3.0", extras = ["format-nongpl"]} -python-json-logger = "*" -pyyaml = "*" -traitlets = "*" +jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] -test = ["click", "coverage", "pre-commit", "pytest (>=6.1.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] [[package]] name = "jupyter-server" -version = "1.23.5" +version = "1.24.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_server-1.23.5-py3-none-any.whl", hash = "sha256:d42e520af98af9fbb7f0fb0d069991054d88e4d2ee051eb7110aef35f3756cef"}, - {file = "jupyter_server-1.23.5.tar.gz", hash = "sha256:a2caa759e2a29ece1aad013c58215fe951f38317b97de462b921834955fe3fca"}, + {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, + {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, ] [package.dependencies] @@ -1190,18 +1185,18 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console [[package]] name = "jupyter-server-fileid" -version = "0.6.0" +version = "0.9.0" description = "" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_server_fileid-0.6.0-py3-none-any.whl", hash = "sha256:ac36436611b281cebbb5b9936a6f4850271bb411e13a287780a022dd0d2c3bf7"}, - {file = "jupyter_server_fileid-0.6.0.tar.gz", hash = "sha256:a12209bdef4f2f9d57051b7556a089299fb9f26b501f643946854220c955be14"}, + {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, + {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, ] [package.dependencies] -jupyter-events = ">=0.5.0,<0.6.0" +jupyter-events = ">=0.5.0" jupyter-server = ">=1.15,<3" [package.extras] @@ -1210,14 +1205,14 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] [[package]] name = "jupyter-server-ydoc" -version = "0.6.1" +version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_server_ydoc-0.6.1-py3-none-any.whl", hash = "sha256:18275ff1ce7e93bbda2301ca066273b3951fc50b0d9c8fc33788374134ad7920"}, - {file = "jupyter_server_ydoc-0.6.1.tar.gz", hash = "sha256:ab10864708c81fa41ab9f2ed3626b54ff6926eaf14545d1d439714978dad6e9f"}, + {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, + {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, ] [package.dependencies] @@ -1230,14 +1225,14 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes [[package]] name = "jupyter-ydoc" -version = "0.2.2" +version = "0.2.4" description = "Document structures for collaborative editing using Ypy" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_ydoc-0.2.2-py3-none-any.whl", hash = "sha256:596a9ae5986b59f8776c42430b5ad516405963574078ab801781933c9690be93"}, - {file = "jupyter_ydoc-0.2.2.tar.gz", hash = "sha256:3163bd4745eedd46d4bba6df52ab26be3c5c44c3a8aaf247635062486ea8f84f"}, + {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, + {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, ] [package.dependencies] @@ -1245,18 +1240,19 @@ importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} y-py = ">=0.5.3,<0.6.0" [package.extras] +dev = ["click", "jupyter-releaser"] test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] [[package]] name = "jupyterlab" -version = "3.6.1" +version = "3.6.3" description = "JupyterLab computational environment" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.1-py3-none-any.whl", hash = "sha256:ad6707dd0149b629d0ed5b56916cfcdb816b376c6af3190337faba09e27ea29e"}, - {file = "jupyterlab-3.6.1.tar.gz", hash = "sha256:aee98c174180e98a30470297d10b959e8e64f2288970c0de65f0a6d2b4807034"}, + {file = "jupyterlab-3.6.3-py3-none-any.whl", hash = "sha256:6aba0caa771697d02fbf409f9767b2fdb4ee32ce935940e3b9a0d5d48d994d0f"}, + {file = "jupyterlab-3.6.3.tar.gz", hash = "sha256:373e9cfb8a72edd294be14f16662563a220cecf0fb26de7aab1af9a29b689b82"}, ] [package.dependencies] @@ -1264,8 +1260,8 @@ ipython = "*" jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16.0,<3" -jupyter-server-ydoc = ">=0.6.0,<0.7.0" -jupyter-ydoc = ">=0.2.2,<0.3.0" +jupyter-server-ydoc = ">=0.8.0,<0.9.0" +jupyter-ydoc = ">=0.2.3,<0.3.0" jupyterlab-server = ">=2.19,<3.0" nbclassic = "*" notebook = "<7" @@ -1305,14 +1301,14 @@ test = ["coverage", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync" [[package]] name = "jupyterlab-server" -version = "2.19.0" +version = "2.22.1" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.19.0-py3-none-any.whl", hash = "sha256:51f6922e34f9f3db875051f4f7b57539a04ddd030f42d9ce6062dedf67bf7f2f"}, - {file = "jupyterlab_server-2.19.0.tar.gz", hash = "sha256:9aec21a2183bbedd9f91a86628355449575f1862d88b28ad5f905019d31e6c21"}, + {file = "jupyterlab_server-2.22.1-py3-none-any.whl", hash = "sha256:1c8eb55c7cd70a50a51fef42a7b4e26ef2f7fc48728f0290604bd89b1dd156e6"}, + {file = "jupyterlab_server-2.22.1.tar.gz", hash = "sha256:dfaaf898af84b9d01ae9583b813f378b96ee90c3a66f24c5186ea5d1bbdb2089"}, ] [package.dependencies] @@ -1327,8 +1323,8 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] -openapi = ["openapi-core (>=0.16.1)", "ruamel-yaml"] -test = ["codecov", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "koalas" @@ -1516,26 +1512,26 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"] [[package]] name = "mistune" -version = "2.0.4" +version = "2.0.5" description = "A sane Markdown parser with useful plugins and renderers" category = "dev" optional = false python-versions = "*" files = [ - {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"}, - {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, + {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, + {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, ] [[package]] name = "mkdocs" -version = "1.4.2" +version = "1.4.3" description = "Project documentation with Markdown." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs-1.4.2-py3-none-any.whl", hash = "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"}, - {file = "mkdocs-1.4.2.tar.gz", hash = "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5"}, + {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, + {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, ] [package.dependencies] @@ -1574,13 +1570,13 @@ mkdocs = ">=1.1" [[package]] name = "mkdocs-bibtex" -version = "2.8.12" +version = "2.8.16" description = "An MkDocs plugin that enables managing citations with BibTex" category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "mkdocs-bibtex-2.8.12.tar.gz", hash = "sha256:921cd25cbe2e3266e36f6bb6770f74057b138bd9ca88d4651ed8bbac9bfc5b14"}, + {file = "mkdocs-bibtex-2.8.16.tar.gz", hash = "sha256:d4f4d284a72a7a943ab427fff58e74409fb26eb0536f89f202c891fdda2eb50a"}, ] [package.dependencies] @@ -1667,14 +1663,14 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -version = "9.0.11" +version = "9.1.11" description = "Documentation that simply works" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.0.11-py3-none-any.whl", hash = "sha256:90a1e1ed41e90de5d0ab97c874b7bf6af488d0faf4aaea8e5868e01f3f1ed923"}, - {file = "mkdocs_material-9.0.11.tar.gz", hash = "sha256:aff49e4ce622a107ed563b3a6a37dc3660a45a0e4d9e7d4d2c13ce9dc02a7faf"}, + {file = "mkdocs_material-9.1.11-py3-none-any.whl", hash = "sha256:fbc86d50ec2cf34d40d5c4365780f290ceedde23f1a0704323b34e7f16b0c0dd"}, + {file = "mkdocs_material-9.1.11.tar.gz", hash = "sha256:f5d473eb79d6640a5e668d4b2ab5b9de5e76ae0a0e2d864112df0cfe9016dc1d"}, ] [package.dependencies] @@ -1788,14 +1784,14 @@ files = [ [[package]] name = "nbclassic" -version = "0.5.1" +version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbclassic-0.5.1-py3-none-any.whl", hash = "sha256:32c235e1f22f4048f3b877d354c198202898797cf9c2085856827598cead001b"}, - {file = "nbclassic-0.5.1.tar.gz", hash = "sha256:8e8ffce7582bb7a4baf11fa86a3d88b184e8e7df78eed4ead69f15aa4fc0e323"}, + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, ] [package.dependencies] @@ -1805,11 +1801,11 @@ ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=6.1.1" jupyter-core = ">=4.6.1" -jupyter-server = ">=1.17.0" +jupyter-server = ">=1.8" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" -notebook-shim = ">=0.1.0" +notebook-shim = ">=0.2.3" prometheus-client = "*" pyzmq = ">=17" Send2Trash = ">=1.8.0" @@ -1824,14 +1820,14 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p [[package]] name = "nbclient" -version = "0.7.2" +version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "dev" optional = false python-versions = ">=3.7.0" files = [ - {file = "nbclient-0.7.2-py3-none-any.whl", hash = "sha256:d97ac6257de2794f5397609df754fcbca1a603e94e924eb9b99787c031ae2e7c"}, - {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"}, + {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, + {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, ] [package.dependencies] @@ -1842,19 +1838,19 @@ traitlets = ">=5.3" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme"] -test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.2.9" +version = "7.4.0" description = "Converting Jupyter Notebooks" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbconvert-7.2.9-py3-none-any.whl", hash = "sha256:495638c5e06005f4a5ce828d8a81d28e34f95c20f4384d5d7a22254b443836e7"}, - {file = "nbconvert-7.2.9.tar.gz", hash = "sha256:a42c3ac137c64f70cbe4d763111bf358641ea53b37a01a5c202ed86374af5234"}, + {file = "nbconvert-7.4.0-py3-none-any.whl", hash = "sha256:af5064a9db524f9f12f4e8be7f0799524bd5b14c1adea37e34e83c95127cc818"}, + {file = "nbconvert-7.4.0.tar.gz", hash = "sha256:51b6c77b507b177b73f6729dba15676e42c4e92bcb00edc8cc982ee72e7d89d7"}, ] [package.dependencies] @@ -1886,14 +1882,14 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.7.3" +version = "5.8.0" description = "The Jupyter Notebook format" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbformat-5.7.3-py3-none-any.whl", hash = "sha256:22a98a6516ca216002b0a34591af5bcb8072ca6c63910baffc901cfa07fefbf0"}, - {file = "nbformat-5.7.3.tar.gz", hash = "sha256:4b021fca24d3a747bf4e626694033d792d594705829e5e35b14ee3369f9f6477"}, + {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, + {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, ] [package.dependencies] @@ -1936,14 +1932,14 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.2" +version = "6.5.4" description = "A web-based notebook environment for interactive computing" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, - {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, ] [package.dependencies] @@ -1971,21 +1967,21 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs [[package]] name = "notebook-shim" -version = "0.2.2" +version = "0.2.3" description = "A shim layer for notebook traits and config" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "notebook_shim-0.2.2-py3-none-any.whl", hash = "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"}, - {file = "notebook_shim-0.2.2.tar.gz", hash = "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f"}, + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, ] [package.dependencies] jupyter-server = ">=1.8,<3" [package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] [[package]] name = "numpy" @@ -2033,14 +2029,14 @@ files = [ [[package]] name = "packaging" -version = "23.0" +version = "23.1" description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -2158,14 +2154,14 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.0" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] @@ -2221,22 +2217,22 @@ files = [ [[package]] name = "platformdirs" -version = "2.6.2" +version = "3.5.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, - {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, + {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"}, + {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"}, ] [package.dependencies] -typing-extensions = {version = ">=4.4", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.5", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -2294,14 +2290,14 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.38" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, ] [package.dependencies] @@ -2309,26 +2305,26 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.4" +version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, - {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, - {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, - {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, - {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, - {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, - {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, - {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, ] [package.extras] @@ -2336,83 +2332,74 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psycopg2-binary" -version = "2.9.5" +version = "2.9.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-binary-2.9.5.tar.gz", hash = "sha256:33e632d0885b95a8b97165899006c40e9ecdc634a529dca7b991eb7de4ece41c"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-macosx_10_15_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:0775d6252ccb22b15da3b5d7adbbf8cfe284916b14b6dc0ff503a23edb01ee85"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ec46ed947801652c9643e0b1dc334cfb2781232e375ba97312c2fc256597632"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3520d7af1ebc838cc6084a3281145d5cd5bdd43fdef139e6db5af01b92596cb7"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cbc554ba47ecca8cd3396ddaca85e1ecfe3e48dd57dc5e415e59551affe568e"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:5d28ecdf191db558d0c07d0f16524ee9d67896edf2b7990eea800abeb23ebd61"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:b9c33d4aef08dfecbd1736ceab8b7b3c4358bf10a0121483e5cd60d3d308cc64"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:05b3d479425e047c848b9782cd7aac9c6727ce23181eb9647baf64ffdfc3da41"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1e491e6489a6cb1d079df8eaa15957c277fdedb102b6a68cfbf40c4994412fd0"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:9e32cedc389bcb76d9f24ea8a012b3cb8385ee362ea437e1d012ffaed106c17d"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46850a640df62ae940e34a163f72e26aca1f88e2da79148e1862faaac985c302"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-win32.whl", hash = "sha256:3d790f84201c3698d1bfb404c917f36e40531577a6dda02e45ba29b64d539867"}, - {file = "psycopg2_binary-2.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:1764546ffeaed4f9428707be61d68972eb5ede81239b46a45843e0071104d0dd"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-macosx_10_9_universal2.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:426c2ae999135d64e6a18849a7d1ad0e1bd007277e4a8f4752eaa40a96b550ff"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cf1d44e710ca3a9ce952bda2855830fe9f9017ed6259e01fcd71ea6287565f5"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024030b13bdcbd53d8a93891a2cf07719715724fc9fee40243f3bd78b4264b8f"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcda1c84a1c533c528356da5490d464a139b6e84eb77cc0b432e38c5c6dd7882"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:2ef892cabdccefe577088a79580301f09f2a713eb239f4f9f62b2b29cafb0577"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-manylinux_2_24_ppc64le.whl", hash = "sha256:af0516e1711995cb08dc19bbd05bec7dbdebf4185f68870595156718d237df3e"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e72c91bda9880f097c8aa3601a2c0de6c708763ba8128006151f496ca9065935"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e67b3c26e9b6d37b370c83aa790bbc121775c57bfb096c2e77eacca25fd0233b"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5fc447058d083b8c6ac076fc26b446d44f0145308465d745fba93a28c14c9e32"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d892bfa1d023c3781a3cab8dd5af76b626c483484d782e8bd047c180db590e4c"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-win32.whl", hash = "sha256:2abccab84d057723d2ca8f99ff7b619285d40da6814d50366f61f0fc385c3903"}, - {file = "psycopg2_binary-2.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:bef7e3f9dc6f0c13afdd671008534be5744e0e682fb851584c8c3a025ec09720"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:6e63814ec71db9bdb42905c925639f319c80e7909fb76c3b84edc79dadef8d60"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:212757ffcecb3e1a5338d4e6761bf9c04f750e7d027117e74aa3cd8a75bb6fbd"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f8a9bcab7b6db2e3dbf65b214dfc795b4c6b3bb3af922901b6a67f7cb47d5f8"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:56b2957a145f816726b109ee3d4e6822c23f919a7d91af5a94593723ed667835"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:f95b8aca2703d6a30249f83f4fe6a9abf2e627aa892a5caaab2267d56be7ab69"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:70831e03bd53702c941da1a1ad36c17d825a24fbb26857b40913d58df82ec18b"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:dbc332beaf8492b5731229a881807cd7b91b50dbbbaf7fe2faf46942eda64a24"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:2d964eb24c8b021623df1c93c626671420c6efadbdb8655cb2bd5e0c6fa422ba"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:95076399ec3b27a8f7fa1cc9a83417b1c920d55cf7a97f718a94efbb96c7f503"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-win32.whl", hash = "sha256:3fc33295cfccad697a97a76dec3f1e94ad848b7b163c3228c1636977966b51e2"}, - {file = "psycopg2_binary-2.9.5-cp36-cp36m-win_amd64.whl", hash = "sha256:02551647542f2bf89073d129c73c05a25c372fc0a49aa50e0de65c3c143d8bd0"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-macosx_10_15_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:63e318dbe52709ed10d516a356f22a635e07a2e34c68145484ed96a19b0c4c68"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7e518a0911c50f60313cb9e74a169a65b5d293770db4770ebf004245f24b5c5"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9d38a4656e4e715d637abdf7296e98d6267df0cc0a8e9a016f8ba07e4aa3eeb"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:68d81a2fe184030aa0c5c11e518292e15d342a667184d91e30644c9d533e53e1"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:7ee3095d02d6f38bd7d9a5358fcc9ea78fcdb7176921528dd709cc63f40184f5"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:46512486be6fbceef51d7660dec017394ba3e170299d1dc30928cbedebbf103a"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b911dfb727e247340d36ae20c4b9259e4a64013ab9888ccb3cbba69b77fd9636"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:422e3d43b47ac20141bc84b3d342eead8d8099a62881a501e97d15f6addabfe9"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c5682a45df7d9642eff590abc73157c887a68f016df0a8ad722dcc0f888f56d7"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-win32.whl", hash = "sha256:b8104f709590fff72af801e916817560dbe1698028cd0afe5a52d75ceb1fce5f"}, - {file = "psycopg2_binary-2.9.5-cp37-cp37m-win_amd64.whl", hash = "sha256:7b3751857da3e224f5629400736a7b11e940b5da5f95fa631d86219a1beaafec"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-macosx_10_15_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:043a9fd45a03858ff72364b4b75090679bd875ee44df9c0613dc862ca6b98460"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9ffdc51001136b699f9563b1c74cc1f8c07f66ef7219beb6417a4c8aaa896c28"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c15ba5982c177bc4b23a7940c7e4394197e2d6a424a2d282e7c236b66da6d896"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc85b3777068ed30aff8242be2813038a929f2084f69e43ef869daddae50f6ee"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:215d6bf7e66732a514f47614f828d8c0aaac9a648c46a831955cb103473c7147"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:7d07f552d1e412f4b4e64ce386d4c777a41da3b33f7098b6219012ba534fb2c2"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a0adef094c49f242122bb145c3c8af442070dc0e4312db17e49058c1702606d4"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:00475004e5ed3e3bf5e056d66e5dcdf41a0dc62efcd57997acd9135c40a08a50"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7d88db096fa19d94f433420eaaf9f3c45382da2dd014b93e4bf3215639047c16"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:902844f9c4fb19b17dfa84d9e2ca053d4a4ba265723d62ea5c9c26b38e0aa1e6"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-win32.whl", hash = "sha256:4e7904d1920c0c89105c0517dc7e3f5c20fb4e56ba9cdef13048db76947f1d79"}, - {file = "psycopg2_binary-2.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:a36a0e791805aa136e9cbd0ffa040d09adec8610453ee8a753f23481a0057af5"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-macosx_10_15_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:25382c7d174c679ce6927c16b6fbb68b10e56ee44b1acb40671e02d29f2fce7c"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9c38d3869238e9d3409239bc05bc27d6b7c99c2a460ea337d2814b35fb4fea1b"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c6527c8efa5226a9e787507652dd5ba97b62d29b53c371a85cd13f957fe4d42"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e59137cdb970249ae60be2a49774c6dfb015bd0403f05af1fe61862e9626642d"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:d4c7b3a31502184e856df1f7bbb2c3735a05a8ce0ade34c5277e1577738a5c91"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:b9a794cef1d9c1772b94a72eec6da144c18e18041d294a9ab47669bc77a80c1d"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5254cbd4f4855e11cebf678c1a848a3042d455a22a4ce61349c36aafd4c2267"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c5e65c6ac0ae4bf5bef1667029f81010b6017795dcb817ba5c7b8a8d61fab76f"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:74eddec4537ab1f701a1647214734bc52cee2794df748f6ae5908e00771f180a"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:01ad49d68dd8c5362e4bfb4158f2896dc6e0c02e87b8a3770fc003459f1a4425"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-win32.whl", hash = "sha256:937880290775033a743f4836aa253087b85e62784b63fd099ee725d567a48aa1"}, - {file = "psycopg2_binary-2.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:484405b883630f3e74ed32041a87456c5e0e63a8e3429aa93e8714c366d62bd1"}, + {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, ] [[package]] @@ -2525,14 +2512,14 @@ files = [ [[package]] name = "pygments" -version = "2.14.0" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, ] [package.extras] @@ -2556,18 +2543,19 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "pymdown-extensions" -version = "9.9.2" +version = "9.11" description = "Extension pack for Python Markdown." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-9.9.2-py3-none-any.whl", hash = "sha256:c3d804eb4a42b85bafb5f36436342a5ad38df03878bb24db8855a4aa8b08b765"}, - {file = "pymdown_extensions-9.9.2.tar.gz", hash = "sha256:ebb33069bafcb64d5f5988043331d4ea4929325dc678a6bcf247ddfcf96499f8"}, + {file = "pymdown_extensions-9.11-py3-none-any.whl", hash = "sha256:a499191d8d869f30339de86fcf072a787e86c42b6f16f280f5c2cf174182b7f3"}, + {file = "pymdown_extensions-9.11.tar.gz", hash = "sha256:f7e86c1d3981f23d9dc43294488ecb54abadd05b0be4bf8f0e15efc90f7853ff"}, ] [package.dependencies] markdown = ">=3.2" +pyyaml = "*" [[package]] name = "pypandoc" @@ -2638,18 +2626,17 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] [[package]] name = "pytest" -version = "7.2.1" +version = "7.3.1" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, - {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, + {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, + {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} @@ -2659,7 +2646,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "pytest-cov" @@ -2729,50 +2716,50 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "2.0.4" +version = "2.0.7" description = "A python library adding a json log formatter" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"}, - {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"}, + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] [[package]] name = "pytz" -version = "2022.7.1" +version = "2023.3" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, ] [[package]] name = "pywin32" -version = "305" +version = "306" description = "Python for Window Extensions" category = "dev" optional = false python-versions = "*" files = [ - {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, - {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, - {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, - {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, - {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, - {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, - {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, - {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, - {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, - {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, - {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, - {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, - {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, - {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] [[package]] @@ -2851,89 +2838,89 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.0.0" +version = "25.0.2" description = "Python bindings for 0MQ" category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2d05d904f03ddf1e0d83d97341354dfe52244a619b5a1440a5f47a5b3451e84e"}, - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a154ef810d44f9d28868be04641f837374a64e7449df98d9208e76c260c7ef1"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487305c2a011fdcf3db1f24e8814bb76d23bc4d2f46e145bc80316a59a9aa07d"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e7b87638ee30ab13230e37ce5331b3e730b1e0dda30120b9eeec3540ed292c8"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75243e422e85a62f0ab7953dc315452a56b2c6a7e7d1a3c3109ac3cc57ed6b47"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:31e523d067ce44a04e876bed3ff9ea1ff8d1b6636d16e5fcace9d22f8c564369"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8539216173135e9e89f6b1cc392e74e6b935b91e8c76106cf50e7a02ab02efe5"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2754fa68da08a854f4816e05160137fa938a2347276471103d31e04bcee5365c"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1bc30f0c18444d51e9b0d0dd39e3a4e7c53ee74190bebef238cd58de577ea9"}, - {file = "pyzmq-25.0.0-cp310-cp310-win32.whl", hash = "sha256:01d53958c787cfea34091fcb8ef36003dbb7913b8e9f8f62a0715234ebc98b70"}, - {file = "pyzmq-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:58fc3ad5e1cfd2e6d24741fbb1e216b388115d31b0ca6670f894187f280b6ba6"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4bba04ea779a3d7ef25a821bb63fd0939142c88e7813e5bd9c6265a20c523a2"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1fbfb7ad6ac0009ccee33c90a1d303431c7fb594335eb97760988727a37577"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85456f0d8f3268eecd63dede3b99d5bd8d3b306310c37d4c15141111d22baeaf"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0645b5a2d2a06fd8eb738018490c514907f7488bf9359c6ee9d92f62e844b76f"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f72ea279b2941a5203e935a4588b9ba8a48aeb9a926d9dfa1986278bd362cb8"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4e295f7928a31ae0f657e848c5045ba6d693fe8921205f408ca3804b1b236968"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ac97e7d647d5519bcef48dd8d3d331f72975afa5c4496c95f6e854686f45e2d9"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:656281d496aaf9ca4fd4cea84e6d893e3361057c4707bd38618f7e811759103c"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f6116991568aac48b94d6d8aaed6157d407942ea385335a6ed313692777fb9d"}, - {file = "pyzmq-25.0.0-cp311-cp311-win32.whl", hash = "sha256:0282bba9aee6e0346aa27d6c69b5f7df72b5a964c91958fc9e0c62dcae5fdcdc"}, - {file = "pyzmq-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:526f884a27e8bba62fe1f4e07c62be2cfe492b6d432a8fdc4210397f8cf15331"}, - {file = "pyzmq-25.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ccb3e1a863222afdbda42b7ca8ac8569959593d7abd44f5a709177d6fa27d266"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4046d03100aca266e70d54a35694cb35d6654cfbef633e848b3c4a8d64b9d187"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3100dddcada66ec5940ed6391ebf9d003cc3ede3d320748b2737553019f58230"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7877264aa851c19404b1bb9dbe6eed21ea0c13698be1eda3784aab3036d1c861"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5049e75cc99db65754a3da5f079230fb8889230cf09462ec972d884d1704a3ed"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:81f99fb1224d36eb91557afec8cdc2264e856f3464500b55749020ce4c848ef2"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1cd4a95f176cdc0ee0a82d49d5830f13ae6015d89decbf834c273bc33eeb3d3"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win32.whl", hash = "sha256:926236ca003aec70574754f39703528947211a406f5c6c8b3e50eca04a9e87fc"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:94f0a7289d0f5c80807c37ebb404205e7deb737e8763eb176f4770839ee2a287"}, - {file = "pyzmq-25.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3f96d452e9580cb961ece2e5a788e64abaecb1232a80e61deffb28e105ff84a"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:930e6ad4f2eaac31a3d0c2130619d25db754b267487ebc186c6ad18af2a74018"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1081d7030a1229c8ff90120346fb7599b54f552e98fcea5170544e7c6725aab"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:531866c491aee5a1e967c286cfa470dffac1e2a203b1afda52d62b58782651e9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc7c1421c5b1c916acf3128bf3cc7ea7f5018b58c69a6866d70c14190e600ce9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9a2d5e419bd39a1edb6cdd326d831f0120ddb9b1ff397e7d73541bf393294973"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:183e18742be3621acf8908903f689ec520aee3f08449bfd29f583010ca33022b"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win32.whl", hash = "sha256:02f5cb60a7da1edd5591a15efa654ffe2303297a41e1b40c3c8942f8f11fc17c"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cac602e02341eaaf4edfd3e29bd3fdef672e61d4e6dfe5c1d065172aee00acee"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:e14df47c1265356715d3d66e90282a645ebc077b70b3806cf47efcb7d1d630cb"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:293a7c2128690f496057f1f1eb6074f8746058d13588389981089ec45d8fdc77"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:731b208bc9412deeb553c9519dca47136b5a01ca66667cafd8733211941b17e4"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b055a1cddf8035966ad13aa51edae5dc8f1bba0b5d5e06f7a843d8b83dc9b66b"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e1cb97d573ea84d7cd97188b42ca6f611ab3ee600f6a75041294ede58e3d20"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:60ecbfe7669d3808ffa8a7dd1487d6eb8a4015b07235e3b723d4b2a2d4de7203"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c25c95416133942280faaf068d0fddfd642b927fb28aaf4ab201a738e597c1e"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:be05504af0619d1cffa500af1e0ede69fb683f301003851f5993b5247cc2c576"}, - {file = "pyzmq-25.0.0-cp38-cp38-win32.whl", hash = "sha256:6bf3842af37af43fa953e96074ebbb5315f6a297198f805d019d788a1021dbc8"}, - {file = "pyzmq-25.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b90bb8dfbbd138558f1f284fecfe328f7653616ff9a972433a00711d9475d1a9"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:62b9e80890c0d2408eb42d5d7e1fc62a5ce71be3288684788f74cf3e59ffd6e2"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484c2c4ee02c1edc07039f42130bd16e804b1fe81c4f428e0042e03967f40c20"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9ca6db34b26c4d3e9b0728841ec9aa39484eee272caa97972ec8c8e231b20c7e"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:610d2d112acd4e5501fac31010064a6c6efd716ceb968e443cae0059eb7b86de"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3594c0ff604e685d7e907860b61d0e10e46c74a9ffca168f6e9e50ea934ee440"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c21a5f4e54a807df5afdef52b6d24ec1580153a6bcf0607f70a6e1d9fa74c5c3"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4725412e27612f0d7d7c2f794d89807ad0227c2fc01dd6146b39ada49c748ef9"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d3d604fe0a67afd1aff906e54da557a5203368a99dcc50a70eef374f1d2abef"}, - {file = "pyzmq-25.0.0-cp39-cp39-win32.whl", hash = "sha256:3670e8c5644768f214a3b598fe46378a4a6f096d5fb82a67dfd3440028460565"}, - {file = "pyzmq-25.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e99629a976809fe102ef73e856cf4b2660acd82a412a51e80ba2215e523dfd0a"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:66509c48f7446b640eeae24b60c9c1461799a27b1b0754e438582e36b5af3315"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c464cc508177c09a5a6122b67f978f20e2954a21362bf095a0da4647e3e908"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28bcb2e66224a7ac2843eb632e4109d6b161479e7a2baf24e37210461485b4f1"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e7ef9ac807db50b4eb6f534c5dcc22f998f5dae920cc28873d2c1d080a4fc9"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5050f5c50b58a6e38ccaf9263a356f74ef1040f5ca4030225d1cb1a858c5b7b6"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2a73af6504e0d2805e926abf136ebf536735a13c22f709be7113c2ec65b4bec3"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e8d00228db627ddd1b418c7afd81820b38575f237128c9650365f2dd6ac3443"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5605621f2181f20b71f13f698944deb26a0a71af4aaf435b34dd90146092d530"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6136bfb0e5a9cf8c60c6ac763eb21f82940a77e6758ea53516c8c7074f4ff948"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0a90b2480a26aef7c13cff18703ba8d68e181facb40f78873df79e6d42c1facc"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00c94fd4c9dd3c95aace0c629a7fa713627a5c80c1819326b642adf6c4b8e2a2"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20638121b0bdc80777ce0ec8c1f14f1ffec0697a1f88f0b564fa4a23078791c4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f75b4b8574f3a8a0d6b4b52606fc75b82cb4391471be48ab0b8677c82f9ed4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cbb885f347eba7ab7681c450dee5b14aed9f153eec224ec0c3f299273d9241f"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c48f257da280b3be6c94e05bd575eddb1373419dbb1a72c3ce64e88f29d1cd6d"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:866eabf7c1315ef2e93e34230db7cbf672e0d7c626b37c11f7e870c8612c3dcc"}, - {file = "pyzmq-25.0.0.tar.gz", hash = "sha256:f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"}, + {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315"}, + {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485"}, + {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc"}, + {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354"}, + {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd"}, + {file = "pyzmq-25.0.2-cp310-cp310-win32.whl", hash = "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca"}, + {file = "pyzmq-25.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e"}, + {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128"}, + {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a"}, + {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7"}, + {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8"}, + {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177"}, + {file = "pyzmq-25.0.2-cp311-cp311-win32.whl", hash = "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413"}, + {file = "pyzmq-25.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182"}, + {file = "pyzmq-25.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9"}, + {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714"}, + {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695"}, + {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff"}, + {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220"}, + {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145"}, + {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa"}, + {file = "pyzmq-25.0.2-cp36-cp36m-win32.whl", hash = "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117"}, + {file = "pyzmq-25.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388"}, + {file = "pyzmq-25.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef"}, + {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20"}, + {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d"}, + {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7"}, + {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810"}, + {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6"}, + {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc"}, + {file = "pyzmq-25.0.2-cp37-cp37m-win32.whl", hash = "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228"}, + {file = "pyzmq-25.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d"}, + {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0"}, + {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a"}, + {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3"}, + {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2"}, + {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e"}, + {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149"}, + {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39"}, + {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56"}, + {file = "pyzmq-25.0.2-cp38-cp38-win32.whl", hash = "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0"}, + {file = "pyzmq-25.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee"}, + {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6"}, + {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689"}, + {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5"}, + {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9"}, + {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c"}, + {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc"}, + {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0"}, + {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af"}, + {file = "pyzmq-25.0.2-cp39-cp39-win32.whl", hash = "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff"}, + {file = "pyzmq-25.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4"}, + {file = "pyzmq-25.0.2.tar.gz", hash = "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149"}, ] [package.dependencies] @@ -2941,119 +2928,119 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2022.10.31" +version = "2023.5.5" description = "Alternative regular expression module, to replace re." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "regex-2022.10.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f"}, - {file = "regex-2022.10.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66"}, - {file = "regex-2022.10.31-cp310-cp310-win32.whl", hash = "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1"}, - {file = "regex-2022.10.31-cp310-cp310-win_amd64.whl", hash = "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5"}, - {file = "regex-2022.10.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe"}, - {file = "regex-2022.10.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7"}, - {file = "regex-2022.10.31-cp311-cp311-win32.whl", hash = "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af"}, - {file = "regex-2022.10.31-cp311-cp311-win_amd64.whl", hash = "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61"}, - {file = "regex-2022.10.31-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4"}, - {file = "regex-2022.10.31-cp36-cp36m-win32.whl", hash = "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066"}, - {file = "regex-2022.10.31-cp36-cp36m-win_amd64.whl", hash = "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6"}, - {file = "regex-2022.10.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95"}, - {file = "regex-2022.10.31-cp37-cp37m-win32.whl", hash = "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394"}, - {file = "regex-2022.10.31-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0"}, - {file = "regex-2022.10.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d"}, - {file = "regex-2022.10.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c"}, - {file = "regex-2022.10.31-cp38-cp38-win32.whl", hash = "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc"}, - {file = "regex-2022.10.31-cp38-cp38-win_amd64.whl", hash = "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453"}, - {file = "regex-2022.10.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49"}, - {file = "regex-2022.10.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892"}, - {file = "regex-2022.10.31-cp39-cp39-win32.whl", hash = "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1"}, - {file = "regex-2022.10.31-cp39-cp39-win_amd64.whl", hash = "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692"}, - {file = "regex-2022.10.31.tar.gz", hash = "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83"}, + {file = "regex-2023.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309"}, + {file = "regex-2023.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9"}, + {file = "regex-2023.5.5-cp310-cp310-win32.whl", hash = "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66"}, + {file = "regex-2023.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810"}, + {file = "regex-2023.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd"}, + {file = "regex-2023.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a"}, + {file = "regex-2023.5.5-cp311-cp311-win32.whl", hash = "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22"}, + {file = "regex-2023.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80"}, + {file = "regex-2023.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3"}, + {file = "regex-2023.5.5-cp36-cp36m-win32.whl", hash = "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46"}, + {file = "regex-2023.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926"}, + {file = "regex-2023.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2"}, + {file = "regex-2023.5.5-cp37-cp37m-win32.whl", hash = "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c"}, + {file = "regex-2023.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a"}, + {file = "regex-2023.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e"}, + {file = "regex-2023.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb"}, + {file = "regex-2023.5.5-cp38-cp38-win32.whl", hash = "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91"}, + {file = "regex-2023.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e"}, + {file = "regex-2023.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0"}, + {file = "regex-2023.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e"}, + {file = "regex-2023.5.5-cp39-cp39-win32.whl", hash = "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac"}, + {file = "regex-2023.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764"}, + {file = "regex-2023.5.5.tar.gz", hash = "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e"}, ] [[package]] name = "requests" -version = "2.28.2" +version = "2.30.0" description = "Python HTTP for Humans." category = "dev" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, + {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -3114,14 +3101,14 @@ files = [ [[package]] name = "send2trash" -version = "1.8.0" -description = "Send file to trash natively under Mac OS X, Windows and Linux." +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" category = "dev" optional = false -python-versions = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, - {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, ] [package.extras] @@ -3131,14 +3118,14 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.1.0" +version = "67.7.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.1.0-py3-none-any.whl", hash = "sha256:a7687c12b444eaac951ea87a9627c4f904ac757e7abdc5aac32833234af90378"}, - {file = "setuptools-67.1.0.tar.gz", hash = "sha256:e261cdf010c11a41cb5cb5f1bf3338a7433832029f559a6a7614bd42a967c300"}, + {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, + {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, ] [package.extras] @@ -3184,14 +3171,14 @@ files = [ [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, ] [[package]] @@ -3361,14 +3348,14 @@ files = [ [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] @@ -3388,20 +3375,21 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas [[package]] name = "urllib3" -version = "1.26.14" +version = "2.0.2" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, + {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "validators" @@ -3437,62 +3425,61 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "virtualenv" -version = "20.17.1" +version = "20.23.0" description = "Virtual Python Environment builder" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, - {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, + {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, + {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, ] [package.dependencies] distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.8\""} -platformdirs = ">=2.4,<3" +filelock = ">=3.11,<4" +importlib-metadata = {version = ">=6.4.1", markers = "python_version < \"3.8\""} +platformdirs = ">=3.2,<4" [package.extras] -docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] -testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] [[package]] name = "watchdog" -version = "2.2.1" +version = "3.0.0" description = "Filesystem events monitoring" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:102a60093090fc3ff76c983367b19849b7cc24ec414a43c0333680106e62aae1"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:748ca797ff59962e83cc8e4b233f87113f3cf247c23e6be58b8a2885c7337aa3"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ccd8d84b9490a82b51b230740468116b8205822ea5fdc700a553d92661253a3"}, - {file = "watchdog-2.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e01d699cd260d59b84da6bda019dce0a3353e3fcc774408ae767fe88ee096b7"}, - {file = "watchdog-2.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8586d98c494690482c963ffb24c49bf9c8c2fe0589cec4dc2f753b78d1ec301d"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:adaf2ece15f3afa33a6b45f76b333a7da9256e1360003032524d61bdb4c422ae"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a7cead445008e880dbde833cb9e5cc7b9a0958edb697a96b936621975f15b9"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8ac23ff2c2df4471a61af6490f847633024e5aa120567e08d07af5718c9d092"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d0f29fd9f3f149a5277929de33b4f121a04cf84bb494634707cfa8ea8ae106a8"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:967636031fa4c4955f0f3f22da3c5c418aa65d50908d31b73b3b3ffd66d60640"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96cbeb494e6cbe3ae6aacc430e678ce4b4dd3ae5125035f72b6eb4e5e9eb4f4e"}, - {file = "watchdog-2.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61fdb8e9c57baf625e27e1420e7ca17f7d2023929cd0065eb79c83da1dfbeacd"}, - {file = "watchdog-2.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb5ecc332112017fbdb19ede78d92e29a8165c46b68a0b8ccbd0a154f196d5e"}, - {file = "watchdog-2.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a480d122740debf0afac4ddd583c6c0bb519c24f817b42ed6f850e2f6f9d64a8"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:978a1aed55de0b807913b7482d09943b23a2d634040b112bdf31811a422f6344"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:8c28c23972ec9c524967895ccb1954bc6f6d4a557d36e681a36e84368660c4ce"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_i686.whl", hash = "sha256:c27d8c1535fd4474e40a4b5e01f4ba6720bac58e6751c667895cbc5c8a7af33c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d6b87477752bd86ac5392ecb9eeed92b416898c30bd40c7e2dd03c3146105646"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cece1aa596027ff56369f0b50a9de209920e1df9ac6d02c7f9e5d8162eb4f02b"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:8b5cde14e5c72b2df5d074774bdff69e9b55da77e102a91f36ef26ca35f9819c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e038be858425c4f621900b8ff1a3a1330d9edcfeaa1c0468aeb7e330fb87693e"}, - {file = "watchdog-2.2.1-py3-none-win32.whl", hash = "sha256:bc43c1b24d2f86b6e1cc15f68635a959388219426109233e606517ff7d0a5a73"}, - {file = "watchdog-2.2.1-py3-none-win_amd64.whl", hash = "sha256:17f1708f7410af92ddf591e94ae71a27a13974559e72f7e9fde3ec174b26ba2e"}, - {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, - {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, ] [package.extras] @@ -3512,16 +3499,20 @@ files = [ [[package]] name = "webcolors" -version = "1.12" -description = "A library for working with color names and color values formats defined by HTML and CSS." +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "webcolors-1.12-py3-none-any.whl", hash = "sha256:d98743d81d498a2d3eaf165196e65481f0d2ea85281463d856b1e51b09f62dce"}, - {file = "webcolors-1.12.tar.gz", hash = "sha256:16d043d3a08fd6a1b1b7e3e9e62640d09790dce80d2bdd4792a175b35fe794a9"}, + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, ] +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + [[package]] name = "webencodings" version = "0.5.1" @@ -3568,47 +3559,78 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [[package]] name = "y-py" -version = "0.5.5" +version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" category = "dev" optional = false python-versions = "*" files = [ - {file = "y_py-0.5.5-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:f61d173bbe980b35f5720d94a9537bc09aec8621f8bba61d5f4db236679940d1"}, - {file = "y_py-0.5.5-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e66d9145d122339502ddb80d5aaed10592310c776b07f19f28e3391521cd19ec"}, - {file = "y_py-0.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23285cb734a8036dbba07323a96f858e040b31fde888fc19daf2904ec62524f6"}, - {file = "y_py-0.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f5b5ea683cb1cebb30c2a0a04a8b15cf01eccf4e1aee9406c97c8830d5913e64"}, - {file = "y_py-0.5.5-cp310-none-win32.whl", hash = "sha256:36558e6e117e70c7af47e5b07614abff481dd549d97394759ff513398add6363"}, - {file = "y_py-0.5.5-cp310-none-win_amd64.whl", hash = "sha256:b4ccbd7e9e9ffab54bd5e1debe933dee495cf93783e1bfd0811ede9527a6c12d"}, - {file = "y_py-0.5.5-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:df64934fe00bf10c1afb1a1b6ecf487b71fb233678faf075f4c0a9f384f99c70"}, - {file = "y_py-0.5.5-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a15182ffc4d68659aea49374f7a7057e708dac8f49a9a5d8966482cef9c1cba2"}, - {file = "y_py-0.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95969ae8f9158cc8ba73ae631213e7030eac080330cb4aaa58a033932ee807a4"}, - {file = "y_py-0.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:90bcfd4de15063b41cb451911f67c0be2dafe701e66cf59c54c549ec309a3d48"}, - {file = "y_py-0.5.5-cp311-none-win32.whl", hash = "sha256:9be9a3981f4ed0983339b883d7eb1414a253ddcf248fb3b420e4d82da38b42e2"}, - {file = "y_py-0.5.5-cp311-none-win_amd64.whl", hash = "sha256:a7668feef5734a769a5cff120b9bf79338b35dedbd5e6dfa99ac0c70640e11d4"}, - {file = "y_py-0.5.5-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:1258dd7ab1a03895b493bc6683d888adff8521b0d44d17b963be432395555f43"}, - {file = "y_py-0.5.5-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:77e7a3e73e0fd71b016247a2d7dda21eeccb3ac53783c264fe13ea7801497084"}, - {file = "y_py-0.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52f03aa7bda1e862560fec043cc8580633dff811949d7df86ee3aa313d89ee78"}, - {file = "y_py-0.5.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d318e922a8a193e2b7761594f0aa90a2e6d559dfdc96db4812995050887e9c5"}, - {file = "y_py-0.5.5-cp37-none-win32.whl", hash = "sha256:b36cd7b8d43782d932e7476b5381c13ecc02dcaabb988fdf920c2c30c8c93148"}, - {file = "y_py-0.5.5-cp37-none-win_amd64.whl", hash = "sha256:df1fe3118d66127eacca14916d398099ff1016e2f003a5dab5f3fba4b449e7eb"}, - {file = "y_py-0.5.5-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:a8ccd6baf2ac27e92a0c5bc05ee03528d897f9b86e2ae8fc27b04dcf0c462655"}, - {file = "y_py-0.5.5-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:44a1e40582386309b873c6ab8a24e47f02fe2482359a85cf4b0a65353c00702c"}, - {file = "y_py-0.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0edfa91505e3de0276daa44cf1f00a059c0cfc460e3fbb3f5188fefab30358ea"}, - {file = "y_py-0.5.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:822c04279e14a178c3726c9ccb16b447c5d03ebedb3410028f4aeb399f482d1f"}, - {file = "y_py-0.5.5-cp38-none-win32.whl", hash = "sha256:f4f1dd115c9493b4dc054521f85c69da15b9a036227199706757adf14013e3a7"}, - {file = "y_py-0.5.5-cp38-none-win_amd64.whl", hash = "sha256:17dac9b53cc7c1c9845d6fb028e8f59b44da673f0dda9bb4a73eb86944181ce0"}, - {file = "y_py-0.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b7d4150fb775a97d5454ca0e3eb2527ba83ec0e67a9244e4061abb7d91b16f"}, - {file = "y_py-0.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ff13618977bd24031387e32ba3c90e795992a5a8bac55707ff58e4c0839301d"}, - {file = "y_py-0.5.5-cp39-none-win32.whl", hash = "sha256:6cd577e7a1b777c78127f6d89707b91b9a5935c632ebfa1791624d11c462a874"}, - {file = "y_py-0.5.5-cp39-none-win_amd64.whl", hash = "sha256:00c81e71abbbeab3b29ccc806176677a11397e637b2fd60c1fede24b0a7b4f32"}, - {file = "y_py-0.5.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e6ec7744ec1614fbcd5fdd9cfe2b1b7755c8fc9e2766782d0c3960b1f71fb4f"}, - {file = "y_py-0.5.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:400691bdf3be9ee950d73806a18fa81128b8ed3c74fde6b12f9d26ef311df877"}, - {file = "y_py-0.5.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:410bfd166c8fcd6384655471e02449abc6051f0510d75954c3fa7f0aa43cf8aa"}, - {file = "y_py-0.5.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:743b69a1920fa38696961d04e2921621f5794945b95e43797110830732c9f092"}, - {file = "y_py-0.5.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0abfffed321b63850bbafb6223815db7336e86068f8ac841c2dbf5bf6326cd"}, - {file = "y_py-0.5.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a14b9293a94a75d4659001fb6d7dba9c5386c8b752968f32a573830645c4e14"}, - {file = "y_py-0.5.5.tar.gz", hash = "sha256:f222bab71d8d3df9a40b2e5ab3a767d734c6ce11998e9a30a02fb83ab3e090b3"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, + {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, + {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, + {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, + {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, + {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, + {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, + {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, + {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, + {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, + {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, + {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, + {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, ] [[package]] @@ -3633,19 +3655,19 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] [[package]] name = "zipp" -version = "3.12.1" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.12.1-py3-none-any.whl", hash = "sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3"}, - {file = "zipp-3.12.1.tar.gz", hash = "sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02"}, + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "2.0" diff --git a/tests/test_init.py b/tests/test_init.py deleted file mode 100644 index 0ee010e7..00000000 --- a/tests/test_init.py +++ /dev/null @@ -1,8 +0,0 @@ -import pytest - -from edsteva import improve_performances - - -@pytest.mark.first -def test_perf(): - improve_performances() diff --git a/tests/test_viz.py b/tests/test_viz.py index 2748b8a9..a241ddd5 100644 --- a/tests/test_viz.py +++ b/tests/test_viz.py @@ -114,7 +114,7 @@ def test_viz_visit(data, Model, Probe, tmp_dir): care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], concepts_sets=None, - note_type=None, + note_types=None, ) model = Model() model.fit( From 5389c6a9a4cb4bdda9183af2394d7ee3332b3082 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 May 2023 10:14:23 +0200 Subject: [PATCH 031/127] Fix the model --- edsteva/models/rectangle_function/algos/loss_minimization.py | 2 +- edsteva/models/step_function/algos/loss_minimization.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index a6e70e48..0dc32a21 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -82,7 +82,7 @@ def _compute_one_double_threshold( target = group[[x_col, y_col]].values best_x0 = best_y0 = best_x1 = None best_loss = np.inf - for idx in range(1, len(target) - min_rect_month_width): + for idx in range(len(target) - min_rect_month_width): x0 = target[idx, 0] y_before_x0 = target[:idx, 1] for jdx in range(idx + min_rect_month_width, len(target)): diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index fa3dd9a9..3fb848db 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -76,7 +76,7 @@ def _compute_one_threshold( ): target = group[[x_col, y_col]].values best_loss, best_x0, best_y0 = np.inf, None, None - for idx in range(1, len(target)): + for idx in range(len(target)): x0 = target[idx, 0] y_before_x0 = target[:idx, 1] y_after_x0 = target[idx:, 1] From c50e7a366f70d2b6e970d5f8a784a9d2a29a082e Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 May 2023 12:07:55 +0200 Subject: [PATCH 032/127] Fix impute missing event --- .../completeness_predictors/per_visit.py | 7 +++--- .../completeness_predictors/per_visit.py | 25 +++++++++++-------- edsteva/probes/utils/__init__.py | 0 3 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 edsteva/probes/utils/__init__.py diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 5d254c09..4df05ba4 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -168,10 +168,11 @@ def compute_completeness( biology_predictor.n_visit_with_measurement > 0 ] for partition, _ in biology_predictor.groupby(missing_column): - for i in range(len(missing_column)): - missing_measurement[missing_column[i]] = partition[i] + missing_measurement[missing_column] = partition biology_predictor = pd.concat([biology_predictor, missing_measurement]) - + biology_predictor = biology_predictor.drop_duplicates( + subset=self._index.copy() + ["date"], keep="first" + ) return biology_predictor diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 8ca634b9..89ac210d 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -99,15 +99,19 @@ def compute_completeness_predictor_per_visit( visit_detail = prepare_visit_detail(data, start_date, end_date) uf_visit = get_uf_visit( - condition_occurrence, - visit_occurrence, - visit_detail, - care_site, + condition_occurrence=condition_occurrence, + visit_occurrence=visit_occurrence, + visit_detail=visit_detail, + care_site=care_site, ) uf_name = CARE_SITE_LEVEL_NAMES["UF"] condition_predictor_by_level[uf_name] = uf_visit - pole_visit = get_pole_visit(uf_visit, care_site, care_site_relationship) + pole_visit = get_pole_visit( + uf_visit=uf_visit, + care_site=care_site, + care_site_relationship=care_site_relationship, + ) pole_name = CARE_SITE_LEVEL_NAMES["Pole"] condition_predictor_by_level[pole_name] = pole_visit @@ -177,10 +181,11 @@ def compute_completeness( condition_predictor.n_visit_with_condition > 0 ] for partition, _ in condition_predictor.groupby(missing_column): - for i in range(len(missing_column)): - missing_condition[missing_column[i]] = partition[i] + missing_condition[missing_column] = partition condition_predictor = pd.concat([condition_predictor, missing_condition]) - + condition_predictor = condition_predictor.drop_duplicates( + subset=self._index.copy() + ["date"], keep="first" + ) return condition_predictor @@ -232,13 +237,13 @@ def get_uf_visit( visit_occurrence[["visit_occurrence_id", "stay_type", "length_of_stay"]], on="visit_occurrence_id", ) - visit_detail = visit_detail.merge( + uf_visit = visit_detail.merge( condition_uf, on="visit_id", how="left", ).drop(columns=["visit_occurrence_id"]) - uf_visit = visit_detail.merge(care_site, on="care_site_id") + uf_visit = uf_visit.merge(care_site, on="care_site_id") uf_name = CARE_SITE_LEVEL_NAMES["UF"] uf_visit = uf_visit[uf_visit["care_site_level"] == uf_name] diff --git a/edsteva/probes/utils/__init__.py b/edsteva/probes/utils/__init__.py new file mode 100644 index 00000000..e69de29b From 9ecd3fdaf1682e9a011accf1f0001131b54c257c Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 May 2023 17:58:15 +0200 Subject: [PATCH 033/127] Separate concepts set and concept codes --- edsteva/probes/biology/biology.py | 13 ++++--- .../per_measurement.py | 8 ++-- .../completeness_predictors/per_visit.py | 24 ++++-------- .../biology/viz_configs/per_visit/defaults.py | 15 ++++--- .../completeness_predictors/per_condition.py | 8 +--- .../completeness_predictors/per_visit.py | 10 +---- edsteva/probes/condition/condition.py | 4 -- .../note/completeness_predictors/per_note.py | 6 +-- .../note/completeness_predictors/per_visit.py | 6 +-- edsteva/probes/note/note.py | 4 -- edsteva/probes/utils/filter_df.py | 4 +- edsteva/probes/utils/prepare_df.py | 13 +++++++ .../completeness_predictors/per_visit.py | 6 +-- edsteva/probes/visit/visit.py | 4 -- edsteva/utils/framework.py | 39 ++++++++----------- pyproject.toml | 2 +- 16 files changed, 71 insertions(+), 95 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index f0d70658..aa4e361e 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -78,13 +78,14 @@ def compute_process( care_site_ids: List[int], care_site_short_names: List[str] = None, care_site_specialties: List[str] = None, + concept_codes: List[str] = None, specialties_sets: Union[str, Dict[str, str]] = None, concepts_sets: Union[str, Dict[str, str]] = { "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", "Plaquettes": "E4812|C0326|A1636|A0230|H6751|A1598|G7728|G7727|G7833|A2538|A2539|J4463", "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", "Potassium": "A1656|C8757|C8758|A2380|E2073|L5014|F2618|E2337|J1178|A3819|J1181", - "Sodium": "A1772|C8759|C8760|A0262|J1177|F8162|L5013|F2617|K9086|J1180 ", + "Sodium": "A1772|C8759|C8760|A0262|J1177|F8162|L5013|F2617|K9086|J1180", "Chlorure": "B5597|F2359|A0079|J1179|F2619|J1182|F2358|A0079|J1179|F2619|J1182", "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", "Bicarbonate": "A0422|H9622|C6408|F4161", @@ -103,7 +104,6 @@ def compute_process( ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], - hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -140,13 +140,16 @@ def compute_process( mapping : List[Tuple[str, str, str]], optional List of values to filter in the column `relationship_id` in order to map between 2 terminologies. **EXAMPLE**: `[("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to")]` - hdfs_user_path : str, optional - **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") if concepts_sets is None and "concepts_set" in self._index: self._index.remove("concepts_set") + else: + for terminology in self._standard_terminologies: + if "{}_concept_code".format(terminology) in self._index: + self._index.remove("{}_concept_code".format(terminology)) + return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -158,12 +161,12 @@ def compute_process( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, + concept_codes=concept_codes, specialties_sets=specialties_sets, concepts_sets=concepts_sets, stay_durations=stay_durations, source_terminologies=source_terminologies, mapping=mapping, - hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index f841f8fe..ced6366e 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -31,12 +31,12 @@ def compute_completeness_predictor_per_measurement( care_site_ids: List[int], care_site_short_names: List[str], care_site_specialties: List[str], + concept_codes: List[str], specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], stay_durations: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -68,6 +68,7 @@ def compute_completeness_predictor_per_measurement( measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, + concept_codes=concept_codes, concepts_sets=concepts_sets, start_date=start_date, end_date=end_date, @@ -112,13 +113,12 @@ def compute_completeness_predictor_per_measurement( care_site_levels=care_site_levels, ) - return compute_completeness(self, biology_predictor, hdfs_user_path) + return compute_completeness(self, biology_predictor) def compute_completeness( self, biology_predictor: DataFrame, - hdfs_user_path: str = None, ): partition_cols = self._index.copy() + ["date"] n_measurement = ( @@ -131,7 +131,7 @@ def compute_completeness( .rename(columns={"measurement_id": "n_measurement"}) ) - n_measurement = to("pandas", n_measurement, hdfs_user_path=hdfs_user_path) + n_measurement = to("pandas", n_measurement) partition_cols = list(set(partition_cols) - {"date"}) q_99_measurement = ( n_measurement.groupby( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 4df05ba4..1fcd6ba4 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -31,12 +31,12 @@ def compute_completeness_predictor_per_visit( care_site_ids: List[int], care_site_short_names: List[str], care_site_specialties: List[str], + concept_codes: List[str], specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], stay_durations: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -75,6 +75,7 @@ def compute_completeness_predictor_per_visit( measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, + concept_codes=concept_codes, concepts_sets=concepts_sets, root_terminology=root_terminology, standard_terminologies=standard_terminologies, @@ -91,10 +92,10 @@ def compute_completeness_predictor_per_visit( ) hospital_visit = get_hospital_visit( + self, measurement=measurement, visit_occurrence=visit_occurrence, care_site=care_site, - standard_terminologies=standard_terminologies, ) hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] biology_predictor_by_level = {hospital_name: hospital_visit} @@ -110,13 +111,12 @@ def compute_completeness_predictor_per_visit( care_site_levels=care_site_levels, ) - return compute_completeness(self, biology_predictor, hdfs_user_path) + return compute_completeness(self, biology_predictor) def compute_completeness( self, biology_predictor: DataFrame, - hdfs_user_path: str = None, ): partition_cols = self._index.copy() + ["date"] n_visit_with_measurement = ( @@ -150,7 +150,7 @@ def compute_completeness( on=partition_cols, ) - biology_predictor = to("pandas", biology_predictor, hdfs_user_path=hdfs_user_path) + biology_predictor = to("pandas", biology_predictor) biology_predictor["c"] = biology_predictor["n_visit"].where( biology_predictor["n_visit"] == 0, @@ -177,24 +177,14 @@ def compute_completeness( def get_hospital_visit( + self, measurement: DataFrame, visit_occurrence: DataFrame, care_site: DataFrame, - standard_terminologies: List[str], ): hospital_measurement = measurement[ set(measurement.columns).intersection( - set( - ["visit_occurrence_id", "concepts_set"] - + [ - "{}_concept_code".format(terminology) - for terminology in standard_terminologies - ] - + [ - "{}_concept_name".format(terminology) - for terminology in standard_terminologies - ] - ) + set(["visit_occurrence_id"] + self._index) ) ].drop_duplicates() hospital_measurement["has_measurement"] = True diff --git a/edsteva/probes/biology/viz_configs/per_visit/defaults.py b/edsteva/probes/biology/viz_configs/per_visit/defaults.py index ff1bfed9..edad85fd 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/biology/viz_configs/per_visit/defaults.py @@ -94,12 +94,12 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): groupby=["value", "date"], ), dict( - max_visit="max(sum_visit)", - groupby=["value"], + sum_visit_with_measurement="sum(n_visit_with_measurement)", + groupby=["value", "date"], ), ], calculates=[ - dict(completeness=alt.datum.sum_visit / alt.datum.max_visit), + dict(completeness=alt.datum.sum_visit_with_measurement / alt.datum.sum_visit), ], encode=dict( x=alt.X( @@ -131,12 +131,15 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): groupby=["value", "date"], ), dict( - max_visit="max(sum_visit)", - groupby=["value"], + sum_visit_with_measurement="sum(n_visit_with_measurement)", + groupby=["value", "date"], ), ], calculates=[ - dict(normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) / alt.datum.c_0) + dict( + normalized_c=(alt.datum.sum_visit_with_measurement / alt.datum.sum_visit) + / alt.datum.c_0 + ) ], legend_title="Mean", encode=dict( diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index c2b76d47..228fea03 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -38,7 +38,6 @@ def compute_completeness_predictor_per_condition( condition_types: Union[str, Dict[str, str]], source_systems: List[str], stay_durations: List[float], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -122,15 +121,12 @@ def compute_completeness_predictor_per_condition( care_site_levels=care_site_levels, ) - return compute_completeness( - self, condition_predictor, hdfs_user_path=hdfs_user_path - ) + return compute_completeness(self, condition_predictor) def compute_completeness( self, condition_predictor: DataFrame, - hdfs_user_path: str, ): partition_cols = self._index.copy() + ["date"] @@ -143,7 +139,7 @@ def compute_completeness( .agg({"condition_occurrence_id": "nunique"}) .rename(columns={"condition_occurrence_id": "n_condition"}) ) - n_condition = to("pandas", n_condition, hdfs_user_path=hdfs_user_path) + n_condition = to("pandas", n_condition) partition_cols = list(set(partition_cols) - {"date"}) max_n_condition = ( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 89ac210d..63dca1ec 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -38,7 +38,6 @@ def compute_completeness_predictor_per_visit( condition_types: Union[str, Dict[str, str]], source_systems: List[str], stay_durations: List[float], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -120,15 +119,12 @@ def compute_completeness_predictor_per_visit( care_site_levels=care_site_levels, ) - return compute_completeness( - self, condition_predictor, hdfs_user_path=hdfs_user_path - ) + return compute_completeness(self, condition_predictor) def compute_completeness( self, condition_predictor: DataFrame, - hdfs_user_path: str = None, ): partition_cols = self._index.copy() + ["date"] n_visit_with_condition = ( @@ -159,9 +155,7 @@ def compute_completeness( on=partition_cols, ) - condition_predictor = to( - "pandas", condition_predictor, hdfs_user_path=hdfs_user_path - ) + condition_predictor = to("pandas", condition_predictor) condition_predictor["c"] = condition_predictor["n_visit"].where( condition_predictor["n_visit"] == 0, diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index f163b4a8..99511dfe 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -69,7 +69,6 @@ def compute_process( condition_types: Union[str, Dict[str, str]] = None, source_systems: List[str] = ["ORBIS"], stay_durations: List[float] = None, - hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -104,8 +103,6 @@ def compute_process( **EXAMPLE**: `["AREM", "ORBIS"]` stay_durations : List[float], optional **EXAMPLE**: `[1, 30]` - hdfs_user_path : str, optional - **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") @@ -128,7 +125,6 @@ def compute_process( stay_durations=stay_durations, condition_types=condition_types, source_systems=source_systems, - hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 6b74bd3f..7845a355 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -36,7 +36,6 @@ def compute_completeness_predictor_per_note( extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -110,13 +109,12 @@ def compute_completeness_predictor_per_note( if is_koalas(note_predictor): note_predictor.spark.cache() - return compute_completeness(self, note_predictor, hdfs_user_path=hdfs_user_path) + return compute_completeness(self, note_predictor) def compute_completeness( self, note_predictor: DataFrame, - hdfs_user_path: str = None, ): partition_cols = self._index.copy() + ["date"] @@ -129,7 +127,7 @@ def compute_completeness( .agg({"note_id": "nunique"}) .rename(columns={"note_id": "n_note"}) ) - n_note = to("pandas", n_note, hdfs_user_path=hdfs_user_path) + n_note = to("pandas", n_note) partition_cols = list(set(partition_cols) - {"date"}) max_note = ( diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 81f45ccb..f1ee809a 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -37,7 +37,6 @@ def compute_completeness_predictor_per_visit( extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -112,13 +111,12 @@ def compute_completeness_predictor_per_visit( if is_koalas(note_predictor): note_predictor.spark.cache() - return compute_completeness(self, note_predictor, hdfs_user_path=hdfs_user_path) + return compute_completeness(self, note_predictor) def compute_completeness( self, note_predictor: DataFrame, - hdfs_user_path: str = None, ): partition_cols = self._index.copy() + ["date"] @@ -148,7 +146,7 @@ def compute_completeness( on=partition_cols, ) - note_predictor = to("pandas", note_predictor, hdfs_user_path=hdfs_user_path) + note_predictor = to("pandas", note_predictor) note_predictor["c"] = note_predictor["n_visit"].where( note_predictor["n_visit"] == 0, diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index b47412fb..8dbeddb0 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -69,7 +69,6 @@ def compute_process( "Ordonnance": "ordo", "CRH": "crh", }, - hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -104,8 +103,6 @@ def compute_process( **EXAMPLE**: `[1, 30]` note_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"CRH": "crh", "Urgence": "urge"}` - hdfs_user_path : str, optional - **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") @@ -126,7 +123,6 @@ def compute_process( specialties_sets=specialties_sets, note_types=note_types, stay_durations=stay_durations, - hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index 162d699c..6c5f6ee2 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -25,7 +25,9 @@ def filter_table_by_type( table_per_types = [] for type_name, type_value in type_groups.items(): table_per_type_element = table[ - table[source_col].str.contains( + table[source_col] + .astype(str) + .str.contains( type_value, case=False, regex=True, diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 40057be0..17c57d1b 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -76,6 +76,7 @@ def prepare_visit_occurrence( def prepare_measurement( data: Data, biology_relationship: pd.DataFrame, + concept_codes: List[str], concepts_sets: Union[str, Dict[str, str]], root_terminology: str, standard_terminologies: List[str], @@ -131,6 +132,18 @@ def prepare_measurement( end_date=end_date, ) + if concept_codes: + measurement_by_terminology = [] + for standard_terminology in standard_terminologies: + measurement_by_terminology.append( + measurement[ + measurement["{}_concept_code".format(standard_terminology)].isin( + concept_codes + ) + ] + ) + measurement = get_framework(measurement).concat(measurement_by_terminology) + if concepts_sets: measurement_by_terminology = [] for standard_terminology in standard_terminologies: diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 79efbb71..4d8cbadd 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -32,7 +32,6 @@ def compute_completeness_predictor_per_visit( care_site_specialties: List[str], specialties_sets: Union[str, Dict[str, str]], stay_durations: List[float], - hdfs_user_path: str, **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -110,13 +109,12 @@ def compute_completeness_predictor_per_visit( care_site_levels=care_site_levels, ) - return compute_completeness(self, visit_predictor, hdfs_user_path) + return compute_completeness(self, visit_predictor) def compute_completeness( self, visit_predictor: DataFrame, - hdfs_user_path: str, ): partition_cols = self._index.copy() + ["date"] @@ -130,7 +128,7 @@ def compute_completeness( .rename(columns={"visit_id": "n_visit"}) ) - n_visit = to("pandas", n_visit, hdfs_user_path=hdfs_user_path) + n_visit = to("pandas", n_visit) partition_cols = list(set(partition_cols) - {"date"}) max_n_visit = ( diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 5135a70b..fb3d88a6 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -62,7 +62,6 @@ def compute_process( care_site_specialties: List[str] = None, specialties_sets: Union[str, Dict[str, str]] = None, stay_durations: List[float] = None, - hdfs_user_path: str = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -91,8 +90,6 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` stay_durations : List[float], optional **EXAMPLE**: `[1, 30]` - hdfs_user_path : str, optional - **EXAMPLE**: `"hdfs://bbsedsi/user/"` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") @@ -109,7 +106,6 @@ def compute_process( care_site_specialties=care_site_specialties, specialties_sets=specialties_sets, stay_durations=stay_durations, - hdfs_user_path=hdfs_user_path, **kwargs, ) diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index 1bfe4443..4df53479 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -3,7 +3,7 @@ from typing import Optional import pandas as _pandas -import pyarrow as pa +import pyarrow.parquet as pq from databricks import koalas as _koalas from loguru import logger @@ -31,39 +31,32 @@ def is_koalas(obj: DataObject) -> bool: return get_framework(obj) == _koalas -def to(framework: str, obj: DataObject, hdfs_user_path: str = None) -> DataObject: +def to(framework: str, obj: DataObject) -> DataObject: if framework == "koalas" or framework is _koalas: return koalas(obj) elif framework == "pandas" or framework is _pandas: - return pandas(obj, hdfs_user_path) + return pandas(obj) else: raise ValueError(f"Unknown framework: {framework}") -def pandas(obj: DataObject, hdfs_user_path: str = None) -> DataObject: +def pandas(obj: DataObject) -> DataObject: if get_framework(obj) is _pandas: return obj - elif hdfs_user_path: # pragma: no cover - parquet_path = hdfs_user_path + "/object.parquet" - try: - obj.to_parquet(parquet_path) - obj = pa.parquet.read_table(parquet_path) - except Exception as e: - logger.warning( - "Cannot convert object to parquet. It will skip this step and convert directly to pandas if possible. /n Following error: {}", - e, - ) + # Try using pyarrow via HDFS to convert object to pandas as it is way faster. + user = os.environ["USER"] + parquet_path = f"hdfs://bbsedsi/user/{user}/temp.parquet" try: - error = False - pandas_obj = obj.to_pandas() - except AttributeError: - error = True - if hdfs_user_path and os.path.exists(parquet_path): # pragma: no cover - os.remove(parquet_path) - if error: - raise ValueError("Could not convert object to pandas.") - + obj.to_parquet(parquet_path) + obj = pq.read_table(parquet_path) + except Exception as e: + logger.debug( + "Cannot convert object to parquet. It will skip this step and convert directly to pandas if possible. /n Following error: {}", + e, + ) + + pandas_obj = obj.to_pandas() return pandas_obj diff --git a/pyproject.toml b/pyproject.toml index ad099fa1..3f5656c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ pyspark = "~2.4.3" pandas = "^1.3" altair = "^4.2" numpy = "<1.20.0" # https://github.com/databricks/koalas/pull/2166 -loguru = "0.6.0" +loguru = "0.7.0" ipython = "^7.31.0" koalas = "^1.8.2" pgpasslib = "^1.1.0" From 1ecd8da03300018fada0ef1651473751b77d9792 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 2 Jun 2023 16:24:43 +0200 Subject: [PATCH 034/127] Hot fix --- .gitignore | 1 + edsteva/probes/base.py | 17 +- .../viz_configs/per_visit/defaults.py | 2 +- edsteva/utils/framework.py | 7 +- poetry.lock | 582 +++++++----------- tests/test_probes.py | 3 + 6 files changed, 235 insertions(+), 377 deletions(-) diff --git a/.gitignore b/.gitignore index 651684c9..452a50b9 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ site/ .nfs* venv/ .venv/ +.vscode/ # PyBuilder target/ diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index c29ecf66..23b0f25e 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -312,7 +312,7 @@ def filter_care_site( logger.info("Use probe.reset_predictor() to get back the initial predictor") def add_names_columns(self, df: DataFrame): - if hasattr(self, "care_site_relationship"): + if hasattr(self, "care_site_relationship") and "care_site_id" in df.columns: df = df.merge( self.care_site_relationship[ ["care_site_id", "care_site_short_name"] @@ -329,13 +329,14 @@ def add_names_columns(self, df: DataFrame): "{}_concept_name".format(terminology) for terminology in self._standard_terminologies ] - df = df.merge( - self.biology_relationship[ - concept_codes + concept_names - ].drop_duplicates(), - on=concept_codes, - how="left", - ) + if set(concept_codes).issubset(df.columns): + df = df.merge( + self.biology_relationship[ + concept_codes + concept_names + ].drop_duplicates(), + on=concept_codes, + how="left", + ) return df.reset_index(drop=True) def load(self, path=None) -> None: diff --git a/edsteva/probes/condition/viz_configs/per_visit/defaults.py b/edsteva/probes/condition/viz_configs/per_visit/defaults.py index dd3d71ac..1dc77714 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/condition/viz_configs/per_visit/defaults.py @@ -92,7 +92,7 @@ dict( x=alt.Y( "sum(n_visit):Q", - title="Number of administrative", + title="Number of administrative records", axis=alt.Axis(format="s"), ), tooltip=alt.Tooltip( diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index 4df53479..13c71484 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -56,8 +56,11 @@ def pandas(obj: DataObject) -> DataObject: e, ) - pandas_obj = obj.to_pandas() - return pandas_obj + try: + return obj.to_pandas() + except AttributeError: + pass + raise ValueError("Could not convert object to pandas.") def koalas(obj: DataObject) -> DataObject: diff --git a/poetry.lock b/poetry.lock index fad8fc77..623fff39 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiofiles" version = "22.1.0" description = "File support for asyncio." -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -35,7 +33,6 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] name = "altair" version = "4.2.2" description = "Altair: A declarative statistical visualization library for Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -56,31 +53,30 @@ dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pyt [[package]] name = "anyio" -version = "3.6.2" +version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, + {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, + {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, ] [package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] +doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] [[package]] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = "*" files = [ @@ -92,7 +88,6 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -113,7 +108,6 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -151,7 +145,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -167,7 +160,6 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -189,7 +181,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -204,7 +195,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -216,7 +206,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -235,7 +224,6 @@ lxml = ["lxml"] name = "black" version = "23.3.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -286,7 +274,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -305,7 +292,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cached-property" version = "1.5.2" description = "A decorator for caching properties in classes." -category = "dev" optional = false python-versions = "*" files = [ @@ -317,7 +303,6 @@ files = [ name = "catalogue" version = "2.0.8" description = "Super lightweight function registries for your library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -333,7 +318,6 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -345,7 +329,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false python-versions = "*" files = [ @@ -422,7 +405,6 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -434,7 +416,6 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -519,7 +500,6 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -535,7 +515,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -545,63 +524,71 @@ files = [ [[package]] name = "coverage" -version = "7.2.5" +version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c"}, - {file = "coverage-7.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c"}, - {file = "coverage-7.2.5-cp310-cp310-win32.whl", hash = "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5"}, - {file = "coverage-7.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c"}, - {file = "coverage-7.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce"}, - {file = "coverage-7.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6"}, - {file = "coverage-7.2.5-cp311-cp311-win32.whl", hash = "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b"}, - {file = "coverage-7.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068"}, - {file = "coverage-7.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969"}, - {file = "coverage-7.2.5-cp37-cp37m-win32.whl", hash = "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718"}, - {file = "coverage-7.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0"}, - {file = "coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84"}, - {file = "coverage-7.2.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1"}, - {file = "coverage-7.2.5-cp38-cp38-win32.whl", hash = "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813"}, - {file = "coverage-7.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212"}, - {file = "coverage-7.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b"}, - {file = "coverage-7.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1"}, - {file = "coverage-7.2.5-cp39-cp39-win32.whl", hash = "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31"}, - {file = "coverage-7.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252"}, - {file = "coverage-7.2.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3"}, - {file = "coverage-7.2.5.tar.gz", hash = "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47"}, +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, ] [package.dependencies] @@ -614,7 +601,6 @@ toml = ["tomli"] name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -642,7 +628,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -654,7 +639,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -666,7 +650,6 @@ files = [ name = "distlib" version = "0.3.6" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -678,7 +661,6 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -690,7 +672,6 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -703,14 +684,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastjsonschema" -version = "2.16.3" +version = "2.17.1" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.16.3-py3-none-any.whl", hash = "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490"}, - {file = "fastjsonschema-2.16.3.tar.gz", hash = "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e"}, + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, ] [package.extras] @@ -720,7 +700,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.12.0" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -736,7 +715,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "p name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -751,7 +729,6 @@ cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." -category = "dev" optional = false python-versions = "*" files = [ @@ -769,7 +746,6 @@ dev = ["flake8", "markdown", "twine", "wheel"] name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -784,7 +760,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.31" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -798,14 +773,13 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "griffe" -version = "0.27.3" +version = "0.29.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "griffe-0.27.3-py3-none-any.whl", hash = "sha256:094513b209d4acd4b2680c2415d3af5f8ed925714795380c2a7d070e222e0b27"}, - {file = "griffe-0.27.3.tar.gz", hash = "sha256:a3d0f75aa76b80f181f818cf605f658a69fccf287aaeeeafc7a6cf4e6a2ca27e"}, + {file = "griffe-0.29.0-py3-none-any.whl", hash = "sha256:e62ff34b04630c2382e2e277301cb2c29221fb09c04028e62ef35afccc64344b"}, + {file = "griffe-0.29.0.tar.gz", hash = "sha256:6fc892aaa251b3761e3a8d2f5893758e1850ec5d81d4605c4557be0666202a0b"}, ] [package.dependencies] @@ -816,7 +790,6 @@ colorama = ">=0.4" name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -831,7 +804,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -843,7 +815,6 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -864,7 +835,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -883,7 +853,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -895,7 +864,6 @@ files = [ name = "ipykernel" version = "6.16.2" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -924,7 +892,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "p name = "ipython" version = "7.34.0" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -961,7 +928,6 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "dev" optional = false python-versions = "*" files = [ @@ -973,7 +939,6 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -988,7 +953,6 @@ arrow = ">=0.15.0" name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1008,7 +972,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.0.3" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1024,14 +987,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.11" +version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "dev" optional = false python-versions = "*" files = [ - {file = "json5-0.9.11-py2.py3-none-any.whl", hash = "sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd"}, - {file = "json5-0.9.11.tar.gz", hash = "sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b"}, + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, ] [package.extras] @@ -1041,7 +1003,6 @@ dev = ["hypothesis"] name = "jsonpointer" version = "2.3" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1053,7 +1014,6 @@ files = [ name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1085,7 +1045,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1110,7 +1069,6 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com name = "jupyter-core" version = "4.12.0" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1129,7 +1087,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1154,7 +1111,6 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-server" version = "1.24.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1167,7 +1123,7 @@ anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbconvert = ">=6.4.4" nbformat = ">=5.2.0" packaging = "*" @@ -1187,7 +1143,6 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console name = "jupyter-server-fileid" version = "0.9.0" description = "" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1207,7 +1162,6 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1227,7 +1181,6 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.4" description = "Document structures for collaborative editing using Ypy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1245,14 +1198,13 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we [[package]] name = "jupyterlab" -version = "3.6.3" +version = "3.6.4" description = "JupyterLab computational environment" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.3-py3-none-any.whl", hash = "sha256:6aba0caa771697d02fbf409f9767b2fdb4ee32ce935940e3b9a0d5d48d994d0f"}, - {file = "jupyterlab-3.6.3.tar.gz", hash = "sha256:373e9cfb8a72edd294be14f16662563a220cecf0fb26de7aab1af9a29b689b82"}, + {file = "jupyterlab-3.6.4-py3-none-any.whl", hash = "sha256:8a4e495a096ae2315af2b07acaac9d38917b6927ebd891834ddf83b28f53e881"}, + {file = "jupyterlab-3.6.4.tar.gz", hash = "sha256:862fb4a06c759a9b0a12de6bf434a8681a42e52fff0593c120e3fbad6847889f"}, ] [package.dependencies] @@ -1261,7 +1213,7 @@ jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16.0,<3" jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.3,<0.3.0" +jupyter-ydoc = ">=0.2.4,<0.3.0" jupyterlab-server = ">=2.19,<3.0" nbclassic = "*" notebook = "<7" @@ -1276,7 +1228,6 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1288,7 +1239,6 @@ files = [ name = "jupyterlab-rise" version = "0.1.0" description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1303,7 +1253,6 @@ test = ["coverage", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync" name = "jupyterlab-server" version = "2.22.1" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1330,7 +1279,6 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "koalas" version = "1.8.2" description = "Koalas: pandas API on Apache Spark" -category = "main" optional = false python-versions = ">=3.5,<3.10" files = [ @@ -1353,7 +1301,6 @@ spark = ["pyspark (>=2.4.0)"] name = "latexcodec" version = "2.0.1" description = "A lexer and codec to work with LaTeX code in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1366,14 +1313,13 @@ six = ">=1.4.1" [[package]] name = "loguru" -version = "0.6.0" +version = "0.7.0" description = "Python logging made (stupidly) simple" -category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, - {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, + {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, + {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, ] [package.dependencies] @@ -1381,13 +1327,12 @@ colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] -dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)"] +dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] [[package]] name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1405,7 +1350,6 @@ testing = ["coverage", "pyyaml"] name = "markupsafe" version = "2.1.2" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1465,7 +1409,6 @@ files = [ name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1480,7 +1423,6 @@ traitlets = "*" name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1492,7 +1434,6 @@ files = [ name = "mike" version = "1.1.2" description = "Manage multiple versions of your MkDocs-powered documentation" -category = "dev" optional = false python-versions = "*" files = [ @@ -1514,7 +1455,6 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"] name = "mistune" version = "2.0.5" description = "A sane Markdown parser with useful plugins and renderers" -category = "dev" optional = false python-versions = "*" files = [ @@ -1526,7 +1466,6 @@ files = [ name = "mkdocs" version = "1.4.3" description = "Project documentation with Markdown." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1556,7 +1495,6 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp name = "mkdocs-autorefs" version = "0.4.1" description = "Automatically link across pages in MkDocs." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1572,7 +1510,6 @@ mkdocs = ">=1.1" name = "mkdocs-bibtex" version = "2.8.16" description = "An MkDocs plugin that enables managing citations with BibTex" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1590,7 +1527,6 @@ validators = ">=0.19.0" name = "mkdocs-charts-plugin" version = "0.0.8" description = "MkDocs plugin to add charts from data" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1606,7 +1542,6 @@ pymdown-extensions = ">=9.2" name = "mkdocs-gen-files" version = "0.3.5" description = "MkDocs plugin to programmatically generate documentation pages during the build" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -1621,7 +1556,6 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-img2fig-plugin" version = "0.9.3" description = "A MkDocs plugin that converts markdown encoded images into
elements." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1635,7 +1569,6 @@ mkdocs = "*" name = "mkdocs-literate-nav" version = "0.4.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1650,7 +1583,6 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-markdown-filter" version = "0.1.1" description = "A MkDocs plugin to add a markdown filter to jinja templates." -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -1663,14 +1595,13 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -version = "9.1.11" +version = "9.1.15" description = "Documentation that simply works" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.11-py3-none-any.whl", hash = "sha256:fbc86d50ec2cf34d40d5c4365780f290ceedde23f1a0704323b34e7f16b0c0dd"}, - {file = "mkdocs_material-9.1.11.tar.gz", hash = "sha256:f5d473eb79d6640a5e668d4b2ab5b9de5e76ae0a0e2d864112df0cfe9016dc1d"}, + {file = "mkdocs_material-9.1.15-py3-none-any.whl", hash = "sha256:b49e12869ab464558e2dd3c5792da5b748a7e0c48ee83b4d05715f98125a7a39"}, + {file = "mkdocs_material-9.1.15.tar.gz", hash = "sha256:8513ab847c9a541ed3d11a3a7eed556caf72991ee786c31c5aac6691a121088a"}, ] [package.dependencies] @@ -1688,7 +1619,6 @@ requests = ">=2.26" name = "mkdocs-material-extensions" version = "1.1.1" description = "Extension pack for Python Markdown and MkDocs Material." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1700,7 +1630,6 @@ files = [ name = "mkdocs-section-index" version = "0.3.4" description = "MkDocs plugin to allow clickable sections that lead to an index page" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1715,7 +1644,6 @@ mkdocs = ">=1.1,<2.0" name = "mkdocstrings" version = "0.19.0" description = "Automatic documentation from sources, for MkDocs." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1740,7 +1668,6 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] name = "mkdocstrings-python" version = "0.8.2" description = "A Python handler for mkdocstrings." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1756,7 +1683,6 @@ mkdocstrings = ">=0.19" name = "mknotebooks" version = "0.7.1" description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." -category = "dev" optional = false python-versions = "*" files = [ @@ -1774,7 +1700,6 @@ nbconvert = ">=6.0.0" name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1786,7 +1711,6 @@ files = [ name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1822,7 +1746,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1832,7 +1755,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.3" @@ -1845,7 +1768,6 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p name = "nbconvert" version = "7.4.0" description = "Converting Jupyter Notebooks" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1884,7 +1806,6 @@ webpdf = ["pyppeteer (>=1,<1.1)"] name = "nbformat" version = "5.8.0" description = "The Jupyter Notebook format" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1907,7 +1828,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1917,14 +1837,13 @@ files = [ [[package]] name = "nodeenv" -version = "1.7.0" +version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, ] [package.dependencies] @@ -1934,7 +1853,6 @@ setuptools = "*" name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1969,7 +1887,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1987,7 +1904,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.19.5" description = "NumPy is the fundamental package for array computing with Python." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2031,7 +1947,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2043,7 +1958,6 @@ files = [ name = "pandas" version = "1.3.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2082,7 +1996,6 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandas" version = "1.3.5" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2115,7 +2028,7 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.17.3", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, ] python-dateutil = ">=2.7.3" @@ -2128,7 +2041,6 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2140,7 +2052,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2156,7 +2067,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2168,7 +2078,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -2183,7 +2092,6 @@ ptyprocess = ">=0.5" name = "pgpasslib" version = "1.1.0" description = "Library for getting passwords from PostgreSQL password files" -category = "main" optional = false python-versions = "*" files = [ @@ -2195,7 +2103,6 @@ files = [ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -2207,7 +2114,6 @@ files = [ name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2217,28 +2123,26 @@ files = [ [[package]] name = "platformdirs" -version = "3.5.0" +version = "3.5.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"}, - {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"}, + {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, + {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, ] [package.dependencies] typing-extensions = {version = ">=4.5", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2257,7 +2161,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2275,14 +2178,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.16.0" +version = "0.17.0" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.16.0-py3-none-any.whl", hash = "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab"}, - {file = "prometheus_client-0.16.0.tar.gz", hash = "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48"}, + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, ] [package.extras] @@ -2292,7 +2194,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.38" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -2307,7 +2208,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2334,7 +2234,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psycopg2-binary" version = "2.9.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2406,7 +2305,6 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -2418,7 +2316,6 @@ files = [ name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2430,7 +2327,6 @@ files = [ name = "py4j" version = "0.10.7" description = "Enables Python programs to dynamically access arbitrary Java objects" -category = "main" optional = false python-versions = "*" files = [ @@ -2442,7 +2338,6 @@ files = [ name = "pyarrow" version = "0.16.0" description = "Python library for Apache Arrow" -category = "main" optional = false python-versions = "*" files = [ @@ -2482,7 +2377,6 @@ six = ">=1.0.0" name = "pybtex" version = "0.24.0" description = "A BibTeX-compatible bibliography processor in Python" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" files = [ @@ -2502,7 +2396,6 @@ test = ["pytest"] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2514,7 +2407,6 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2529,7 +2421,6 @@ plugins = ["importlib-metadata"] name = "pylic" version = "3.5.0" description = "A Python license checker" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -2543,14 +2434,13 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "pymdown-extensions" -version = "9.11" +version = "10.0.1" description = "Extension pack for Python Markdown." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-9.11-py3-none-any.whl", hash = "sha256:a499191d8d869f30339de86fcf072a787e86c42b6f16f280f5c2cf174182b7f3"}, - {file = "pymdown_extensions-9.11.tar.gz", hash = "sha256:f7e86c1d3981f23d9dc43294488ecb54abadd05b0be4bf8f0e15efc90f7853ff"}, + {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, + {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, ] [package.dependencies] @@ -2561,7 +2451,6 @@ pyyaml = "*" name = "pypandoc" version = "1.7.5" description = "Thin wrapper for pandoc." -category = "dev" optional = false python-versions = "^2.7 || ^3.6" files = [ @@ -2572,7 +2461,6 @@ files = [ name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2609,7 +2497,6 @@ files = [ name = "pyspark" version = "2.4.8" description = "Apache Spark Python API" -category = "main" optional = false python-versions = "*" files = [ @@ -2628,7 +2515,6 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] name = "pytest" version = "7.3.1" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2652,7 +2538,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2671,7 +2556,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-html" version = "3.2.0" description = "pytest plugin for generating HTML reports" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2686,24 +2570,25 @@ pytest-metadata = "*" [[package]] name = "pytest-metadata" -version = "2.0.4" +version = "3.0.0" description = "pytest plugin for test session metadata" -category = "dev" optional = false -python-versions = ">=3.7,<4.0" +python-versions = ">=3.7" files = [ - {file = "pytest_metadata-2.0.4-py3-none-any.whl", hash = "sha256:acb739f89fabb3d798c099e9e0c035003062367a441910aaaf2281bc1972ee14"}, - {file = "pytest_metadata-2.0.4.tar.gz", hash = "sha256:fcc653f65fe3035b478820b5284fbf0f52803622ee3f60a2faed7a7d3ba1f41e"}, + {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, + {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, ] [package.dependencies] -pytest = ">=3.0.0,<8.0.0" +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] [[package]] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2718,7 +2603,6 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2730,7 +2614,6 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -2742,7 +2625,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ @@ -2766,7 +2648,6 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2782,7 +2663,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2793,6 +2673,13 @@ files = [ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, @@ -2825,7 +2712,6 @@ files = [ name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2838,89 +2724,88 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.0.2" +version = "25.1.0" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315"}, - {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd"}, - {file = "pyzmq-25.0.2-cp310-cp310-win32.whl", hash = "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca"}, - {file = "pyzmq-25.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e"}, - {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128"}, - {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177"}, - {file = "pyzmq-25.0.2-cp311-cp311-win32.whl", hash = "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413"}, - {file = "pyzmq-25.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182"}, - {file = "pyzmq-25.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa"}, - {file = "pyzmq-25.0.2-cp36-cp36m-win32.whl", hash = "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117"}, - {file = "pyzmq-25.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388"}, - {file = "pyzmq-25.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc"}, - {file = "pyzmq-25.0.2-cp37-cp37m-win32.whl", hash = "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228"}, - {file = "pyzmq-25.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d"}, - {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0"}, - {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56"}, - {file = "pyzmq-25.0.2-cp38-cp38-win32.whl", hash = "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0"}, - {file = "pyzmq-25.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee"}, - {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6"}, - {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af"}, - {file = "pyzmq-25.0.2-cp39-cp39-win32.whl", hash = "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff"}, - {file = "pyzmq-25.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4"}, - {file = "pyzmq-25.0.2.tar.gz", hash = "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, ] [package.dependencies] @@ -2930,7 +2815,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "regex" version = "2023.5.5" description = "Alternative regular expression module, to replace re." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3026,14 +2910,13 @@ files = [ [[package]] name = "requests" -version = "2.30.0" +version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, - {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] @@ -3050,7 +2933,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3065,7 +2947,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3077,7 +2958,6 @@ files = [ name = "ruff" version = "0.0.241" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3103,7 +2983,6 @@ files = [ name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -3118,26 +2997,24 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.7.2" +version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, + {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, + {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3149,7 +3026,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3161,7 +3037,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3173,7 +3048,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3185,7 +3059,6 @@ files = [ name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3206,7 +3079,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "termynal" version = "0.2.0" description = "" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -3224,7 +3096,6 @@ mkdocs = ["mkdocs"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3243,7 +3114,6 @@ test = ["flake8", "isort", "pytest"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3255,7 +3125,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3267,7 +3136,6 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3279,7 +3147,6 @@ files = [ name = "tornado" version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false python-versions = ">= 3.7" files = [ @@ -3300,7 +3167,6 @@ files = [ name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3316,7 +3182,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "typed-ast" version = "1.5.4" description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3348,21 +3213,19 @@ files = [ [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, + {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, ] [[package]] name = "uri-template" version = "1.2.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3377,7 +3240,6 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas name = "urllib3" version = "2.0.2" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3395,7 +3257,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." -category = "dev" optional = false python-versions = ">=3.4" files = [ @@ -3412,7 +3273,6 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "verspec" version = "0.1.0" description = "Flexible version handling" -category = "dev" optional = false python-versions = "*" files = [ @@ -3427,7 +3287,6 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3449,7 +3308,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3489,7 +3347,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -3501,7 +3358,6 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3517,7 +3373,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -3527,14 +3382,13 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.1" +version = "1.5.2" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.1.tar.gz", hash = "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40"}, - {file = "websocket_client-1.5.1-py3-none-any.whl", hash = "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e"}, + {file = "websocket-client-1.5.2.tar.gz", hash = "sha256:c7d67c13b928645f259d9b847ab5b57fd2d127213ca41ebd880de1f553b7c23b"}, + {file = "websocket_client-1.5.2-py3-none-any.whl", hash = "sha256:f8c64e28cd700e7ba1f04350d66422b6833b82a796b525a51e740b8cc8dab4b1"}, ] [package.extras] @@ -3546,7 +3400,6 @@ test = ["websockets"] name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3561,7 +3414,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] name = "y-py" version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "dev" optional = false python-versions = "*" files = [ @@ -3637,7 +3489,6 @@ files = [ name = "ypy-websocket" version = "0.8.2" description = "WebSocket connector for Ypy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3657,7 +3508,6 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3672,4 +3522,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -content-hash = "daf24e7e76cbd9f71fd77e801b570bed0c74102d915e38a0385ffe0645048ff4" +content-hash = "c1eb00276e019071c706ec6fbe398d2eb6699afff1a1d5ccec7bcac502fbeae4" diff --git a/tests/test_probes.py b/tests/test_probes.py index a3e2b3b2..73971bdb 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -46,6 +46,7 @@ "entity 4": "A3", "entity 5": "A4", }, + concepts_codes=None, start_date=None, end_date=datetime(2020, 1, 1), test_save=False, @@ -63,6 +64,7 @@ care_site_short_names="Hôpital-1", care_site_specialties=None, specialties_sets={"All": ".*"}, + concepts_codes=["A0009", "A0209", "A3109"], stay_durations=[1], note_types="CRH", stay_types="hospitalisés", @@ -94,6 +96,7 @@ condition_types={"ALL": ".*", "Cancer": "C"}, source_systems=["ORBIS"], concepts_sets=None, + concepts_codes=["A0009", "A0209", "A3109"], start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, From 16112e7c19f3872a7d35ce3d0eb573dc667433af Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Jun 2023 14:18:30 +0200 Subject: [PATCH 035/127] Fix impute missing column for note probe --- docs/components/probe.md | 359 +++++++++++++----- docs/index.md | 333 ++++++++++++---- edsteva/probes/biology/biology.py | 2 + .../per_measurement.py | 2 +- .../completeness_predictors/per_visit.py | 25 +- .../completeness_predictors/per_visit.py | 23 +- .../note/completeness_predictors/per_visit.py | 13 +- edsteva/probes/utils/utils.py | 15 + 8 files changed, 564 insertions(+), 208 deletions(-) diff --git a/docs/components/probe.md b/docs/components/probe.md index 0e305610..73a4cb11 100644 --- a/docs/components/probe.md +++ b/docs/components/probe.md @@ -122,16 +122,16 @@ We list hereafter the Probes that have already been implemented in the library. === "VisitProbe" - The [``VisitProbe``][edsteva.probes.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative data related to visits for each care site according to time: + The [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative data related to visits for each care site and each stay type according to time: $$ - c_{visit}(t) = \frac{n_{visit}(t)}{n_{99}} + c(t) = \frac{n_{visit}(t)}{n_{max}} $$ - Where $n_{visit}(t)$ is the number of visits, $n_{99}$ is the $99^{th}$ percentile of visits and $t$ is the month. + Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. !!!info "" - If the $99^{th}$ percentile of visits $n_{99}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the monthly maximum visit $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. ```python from edsteva.probes import VisitProbe @@ -140,7 +140,6 @@ We list hereafter the Probes that have already been implemented in the library. visit.compute( data, stay_types={ - "All": ".*", "Urg": "urgence", "Hospit": "hospitalisés", "Urg_Hospit": "urgence|hospitalisés", @@ -152,97 +151,275 @@ We list hereafter the Probes that have already been implemented in the library. | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'All' | 2021-04-01 | 393.0 | 0.640 | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | - | Pôle/DMU | 8312027648 | Care site 2 | 'All' | 2018-08-01 | 22.0 | 0.274 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | === "NoteProbe" - The [``NoteProbe``][edsteva.probes.note.NoteProbe] computes $c_{note}(t)$ the availability of clinical documents linked to patients' administrative visit for each care site, stay type and note type according to time: - - $$ - c_{note}(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. - - !!!info "" - If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. - - ```python - from edsteva.probes import NoteProbe - - note = Note() - note.compute( - data, - stay_types={ - "All": ".*", - "Urg": "urgence", - "Hospit": "hospitalisés", - "Urg_Hospit": "urgence|hospitalisés", - }, - note_types={ - "All": ".*", - "CRH": "crh", - "Ordonnance": "ordo", - "CR Passage Urgences": "urge", - }, - ) - note.predictor.head() - ``` - - | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_visit | c | - | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :------ | :----- | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | '0.841 | - | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'All' | 'CRH' | 2011-04-01 | 393.0 | 0.640 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 0.497 | - | Pôle/DMU | 8312056379 | Care site 2 | 'All' | 'Ordonnance' | 2018-08-01 | 22.0 | 0.274 | - | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 0.769 | + The [``NoteProbe``][edsteva.probes.note.note.NoteProbe] computes $c_{note}(t)$ the availability of clinical documents: + + === "per_visit_default" + + The [``per_visit_default``][edsteva.probes.note.completeness_predictors.per_visit] algorithm computes $c_(t)$ the availability of clinical documents linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. + + !!!info "" + If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + ```python + from edsteva.probes import NoteProbe + + note = Note(completeness_predictor="per_visit_default") + note.compute( + data, + stay_types={ + "Urg": "urgence", + "Hospit": "hospitalisés", + "Urg_Hospit": "urgence|hospitalisés", + }, + note_types={ + "All": ".*", + "CRH": "crh", + "Ordonnance": "ordo", + "CR Passage Urgences": "urge", + }, + ) + note.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_visit | n_visit_with_note | c | + | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :------ | :---------------- | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | 196.0 | 0.841 | + | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2011-04-01 | 393.0 | 252.0 | 0.640 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 101.0 | 0.497 | + | Pôle/DMU | 8312056379 | Care site 2 | 'Urg' | 'Ordonnance' | 2018-08-01 | 22.0 | 6.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | + + === "per_note_default" + + The [``per_note_default``][edsteva.probes.note.completeness_predictors.per_note] algorithm computes $c_(t)$ the availability of clinical documents as follow: + + $$ + c(t) = \frac{n_{note}(t)}{n_{max}} + $$ + + Where $n_{note}(t)$ is the number of clinical documents, $t$ is the month and $n_{max} = \max_{t}(n_{note}(t))$. + + !!!info "" + If the monthly maximum number of notes $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + ```python + from edsteva.probes import NoteProbe + + note = Note(completeness_predictor="per_note_default") + note.compute( + data, + stay_types={ + "Urg": "urgence", + "Hospit": "hospitalisés", + "Urg_Hospit": "urgence|hospitalisés", + }, + note_types={ + "All": ".*", + "CRH": "crh", + "Ordonnance": "ordo", + "CR Passage Urgences": "urge", + }, + ) + note.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_note | c | + | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :----- | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | 0.841 | + | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2011-04-01 | 393.0 | 0.640 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 0.497 | + | Pôle/DMU | 8312056379 | Care site 2 | 'Urg' | 'Ordonnance' | 2018-08-01 | 22.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 0.769 | === "ConditionProbe" - The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data in patients' administrative visit for each care site, stay type, diag type and condition type according to time: - - $$ - c_{condition}(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} - $$ - - Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. - - !!!info "" - If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. - - !!!Warning "Care site level" - AREM claim data are only available at hospital level. - - ```python - from edsteva.probes import ConditionProbe - - condition = ConditionProbe() - condition.compute( - data, - stay_types={ - "All": ".*", - "Hospit": "hospitalisés", - }, - diag_types={ - "All": ".*", - "DP/DR": "DP|DR", - }, - condition_types={ - "All": ".*", - "Pulmonary_embolism": "I26", - }, - source_systems=["AREM", "ORBIS"], - ) - condition.predictor.head() - ``` - - | care_site_level | care_site_id | care_site_short_name | stay_type | diag_type | condition_type | source_systems | date | n_visit | c | - | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :------ | :---- | - | Hôpital | 8312057527 | Care site 1 | 'All' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 0.841 | - | Hôpital | 8312057527 | Care site 1 | 'All' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 0.640 | - | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 0.497 | - | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'All' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 0.274 | - | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 0.769 | + The [``ConditionProbe``][edsteva.probes.condition.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data: + + === "per_visit_default" + + The [``per_visit_default``][edsteva.probes.condition.completeness_predictors.per_visit] algorithm computes $c_(t)$ the availability of claim data linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. + + !!!info "" + If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + !!!Warning "Care site level" + AREM claim data are only available at hospital level. + + ```python + from edsteva.probes import ConditionProbe + + condition = ConditionProbe(completeness_predictor="per_visit_default") + condition.compute( + data, + stay_types={ + "Hospit": "hospitalisés", + }, + diag_types={ + "All": ".*", + "DP/DR": "DP|DR", + }, + condition_types={ + "All": ".*", + "Pulmonary_embolism": "I26", + }, + source_systems=["AREM", "ORBIS"], + ) + condition.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | diag_type | condition_type | source_systems | date | n_visit | n_visit_with_condition | c | + | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :------ | :--------------------- | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 196.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 252.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 101.0 | 0.497 | + | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 6.0 | 0.274 | + | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | + + === "per_condition_default" + + The [``per_condition_default``][edsteva.probes.condition.completeness_predictors.per_condition] algorithm computes $c_(t)$ the availability of claim data as follow: + + $$ + c(t) = \frac{n_{condition}(t)}{n_{max}} + $$ + + Where $n_{condition}(t)$ is the number of claim codes (e.g. ICD-10) recorded, $t$ is the month and $n_{max} = \max_{t}(n_{condition}(t))$. + + !!!info "" + If the monthly maximum number of conditions recorded $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + ```python + from edsteva.probes import ConditionProbe + + condition = ConditionProbe(completeness_predictor="per_condition_default") + condition.compute( + data, + stay_types={ + "All": ".*", + "Hospit": "hospitalisés", + }, + diag_types={ + "All": ".*", + "DP/DR": "DP|DR", + }, + condition_types={ + "All": ".*", + "Pulmonary_embolism": "I26", + }, + source_systems=["AREM", "ORBIS"], + ) + condition.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | diag_type | condition_type | source_systems | date | n_condition | c | + | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :---------- | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 0.497 | + | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 0.274 | + | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 0.769 | + +=== "BiologyProbe" + + The [``BiologyProbe``][edsteva.probes.biology.biology.BiologyProbe] computes $c_(t)$ the availability of laboratory data: + + === "per_visit_default" + + The [``per_visit_default``][edsteva.probes.biology.completeness_predictors.per_visit] algorithm computes $c_(t)$ the availability of laboratory data linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,biology}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,biology}$ the number of stays having at least one biological measurement recorded and $t$ is the month. + + !!!info "" + If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + !!!Warning "Care site level" + Laboratory data are only available at hospital level. + + ```python + from edsteva.probes import BiologyProbe + + biology = BiologyProbe(completeness_predictor="per_visit_default") + biology.compute( + data, + stay_types={ + "Hospit": "hospitalisés", + }, + concepts_sets={ + "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", + "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", + }, + ) + biology.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | concepts_sets | date | n_visit | n_visit_with_measurement | c | + | :-------------- | :----------- | :------------------- | :-------- | :------------ | :--------- | :------ | :----------------------- | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Créatinine' | 2019-05-01 | 233.0 | 196.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Leucocytes' | 2021-04-01 | 393.0 | 252.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2011-03-01 | 204.0 | 101.0 | 0.497 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Leucocytes' | 2018-08-01 | 22.0 | 6.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Hospit' | 'Leucocytes' | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | + + === "per_measurement_default" + + The [``per_measurement_default``][edsteva.probes.biology.completeness_predictors.per_measurement] algorithm computes $c_(t)$ the availability of biological measurements: + + $$ + c(t) = \frac{n_{biology}(t)}{n_{max}} + $$ + + Where $n_{biology}(t)$ is the number of biological measurements, $t$ is the month and $n_{max} = \max_{t}(n_{biology}(t))$. + + !!!info "" + If the monthly maximum number of biological measurements $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + !!!Warning "Care site level" + Laboratory data are only available at hospital level. + + ```python + from edsteva.probes import BiologyProbe + + biology = BiologyProbe(completeness_predictor="per_measurement_default") + biology.compute( + data, + stay_types={ + "Hospit": "hospitalisés", + }, + concepts_sets={ + "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", + "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", + }, + ) + biology.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | concepts_sets | date | n_measurement | c | + | :----------------------- | :----------- | :------------------- | :-------- | :------------ | :--------- | :------------ | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Créatinine' | 2019-05-01 | 233.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Leucocytes' | 2021-04-01 | 393.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2011-03-01 | 204.0 | 0.497 | + | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'Leucocytes' | 2018-08-01 | 22.0 | 0.274 | + | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'Leucocytes' | 2022-02-01 | 9746.0 | 0.769 | diff --git a/docs/index.md b/docs/index.md index 8fd085c0..286adac3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -441,16 +441,16 @@ The working example above describes the canonical usage workflow. However, you w === "VisitProbe" - The [``VisitProbe``][edsteva.probes.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative data related to visits for each care site and each stay type according to time: + The [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative data related to visits for each care site and each stay type according to time: $$ - c_{visit}(t) = \frac{n_{visit}(t)}{n_{99}} + c(t) = \frac{n_{visit}(t)}{n_{max}} $$ - Where $n_{visit}(t)$ is the number of visits, $n_{99}$ is the $99^{th}$ percentile of visits and $t$ is the month. + Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. !!!info "" - If the $99^{th}$ percentile of visits $n_{99}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the monthly maximum visit $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. ```python from edsteva.probes import VisitProbe @@ -459,7 +459,6 @@ The working example above describes the canonical usage workflow. However, you w visit.compute( data, stay_types={ - "All": ".*", "Urg": "urgence", "Hospit": "hospitalisés", "Urg_Hospit": "urgence|hospitalisés", @@ -471,100 +470,278 @@ The working example above describes the canonical usage workflow. However, you w | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'All' | 2021-04-01 | 393.0 | 0.640 | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | - | Pôle/DMU | 8312027648 | Care site 2 | 'All' | 2018-08-01 | 22.0 | 0.274 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | === "NoteProbe" - The [``NoteProbe``][edsteva.probes.note.NoteProbe] computes $c_{note}(t)$ the availability of clinical documents linked to patients' administrative visit for each care site, stay type and note type according to time: + The [``NoteProbe``][edsteva.probes.note.note.NoteProbe] computes $c_{note}(t)$ the availability of clinical documents: - $$ - c_{note}(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} - $$ + === "per_visit_default" - Where $n_{visit}(t)$ is the number of visits, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. + The [``per_visit_default``][edsteva.probes.note.completeness_predictors.per_visit] algorithm computes $c_(t)$ the availability of clinical documents linked to patients' administrative stays: - !!!info "" - If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + $$ + c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} + $$ - ```python - from edsteva.probes import NoteProbe + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. - note = Note() - note.compute( - data, - stay_types={ - "All": ".*", - "Urg": "urgence", - "Hospit": "hospitalisés", - "Urg_Hospit": "urgence|hospitalisés", - }, - note_types={ - "All": ".*", - "CRH": "crh", - "Ordonnance": "ordo", - "CR Passage Urgences": "urge", - }, - ) - note.predictor.head() - ``` + !!!info "" + If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. - | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_visit | c | - | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :------ | :----- | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | '0.841 | - | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'All' | 'CRH' | 2011-04-01 | 393.0 | 0.640 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 0.497 | - | Pôle/DMU | 8312056379 | Care site 2 | 'All' | 'Ordonnance' | 2018-08-01 | 22.0 | 0.274 | - | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 0.769 | + ```python + from edsteva.probes import NoteProbe + + note = Note(completeness_predictor="per_visit_default") + note.compute( + data, + stay_types={ + "Urg": "urgence", + "Hospit": "hospitalisés", + "Urg_Hospit": "urgence|hospitalisés", + }, + note_types={ + "All": ".*", + "CRH": "crh", + "Ordonnance": "ordo", + "CR Passage Urgences": "urge", + }, + ) + note.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_visit | n_visit_with_note | c | + | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :------ | :---------------- | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | 196.0 | 0.841 | + | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2011-04-01 | 393.0 | 252.0 | 0.640 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 101.0 | 0.497 | + | Pôle/DMU | 8312056379 | Care site 2 | 'Urg' | 'Ordonnance' | 2018-08-01 | 22.0 | 6.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | + + === "per_note_default" + + The [``per_note_default``][edsteva.probes.note.completeness_predictors.per_note] algorithm computes $c_(t)$ the availability of clinical documents as follow: + + $$ + c(t) = \frac{n_{note}(t)}{n_{max}} + $$ + + Where $n_{note}(t)$ is the number of clinical documents, $t$ is the month and $n_{max} = \max_{t}(n_{note}(t))$. + + !!!info "" + If the monthly maximum number of notes $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + ```python + from edsteva.probes import NoteProbe + + note = Note(completeness_predictor="per_note_default") + note.compute( + data, + stay_types={ + "Urg": "urgence", + "Hospit": "hospitalisés", + "Urg_Hospit": "urgence|hospitalisés", + }, + note_types={ + "All": ".*", + "CRH": "crh", + "Ordonnance": "ordo", + "CR Passage Urgences": "urge", + }, + ) + note.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_note | c | + | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :----- | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | 0.841 | + | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2011-04-01 | 393.0 | 0.640 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 0.497 | + | Pôle/DMU | 8312056379 | Care site 2 | 'Urg' | 'Ordonnance' | 2018-08-01 | 22.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 0.769 | === "ConditionProbe" - The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data in patients' administrative visit for each care site, stay type, diag type and condition type according to time: + The [``ConditionProbe``][edsteva.probes.condition.condition.ConditionProbe] computes $c_{condition}(t)$ the availability of claim data: - $$ - c_{condition}(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} - $$ + === "per_visit_default" - Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. + The [``per_visit_default``][edsteva.probes.condition.completeness_predictors.per_visit] algorithm computes $c_(t)$ the availability of claim data linked to patients' administrative stays: - !!!info "" - If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + $$ + c(t) = \frac{n_{with\,condition}(t)}{n_{visit}(t)} + $$ - !!!Warning "Care site level" - AREM claim data are only available at hospital level. + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one claim code (e.g. ICD-10) recorded and $t$ is the month. - ```python - from edsteva.probes import ConditionProbe + !!!info "" + If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. - condition = ConditionProbe() - condition.compute( - data, - stay_types={ - "All": ".*", - "Hospit": "hospitalisés", - }, - diag_types={ - "All": ".*", - "DP/DR": "DP|DR", - }, - condition_types={ - "All": ".*", - "Pulmonary_embolism": "I26", - }, - source_systems=["AREM", "ORBIS"], - ) - condition.predictor.head() - ``` + !!!Warning "Care site level" + AREM claim data are only available at hospital level. + + ```python + from edsteva.probes import ConditionProbe + + condition = ConditionProbe(completeness_predictor="per_visit_default") + condition.compute( + data, + stay_types={ + "Hospit": "hospitalisés", + }, + diag_types={ + "All": ".*", + "DP/DR": "DP|DR", + }, + condition_types={ + "All": ".*", + "Pulmonary_embolism": "I26", + }, + source_systems=["AREM", "ORBIS"], + ) + condition.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | diag_type | condition_type | source_systems | date | n_visit | n_visit_with_condition | c | + | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :------ | :--------------------- | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 196.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 252.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 101.0 | 0.497 | + | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 6.0 | 0.274 | + | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | + + === "per_condition_default" + + The [``per_condition_default``][edsteva.probes.condition.completeness_predictors.per_condition] algorithm computes $c_(t)$ the availability of claim data as follow: + + $$ + c(t) = \frac{n_{condition}(t)}{n_{max}} + $$ + + Where $n_{condition}(t)$ is the number of claim codes (e.g. ICD-10) recorded, $t$ is the month and $n_{max} = \max_{t}(n_{condition}(t))$. + + !!!info "" + If the monthly maximum number of conditions recorded $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + ```python + from edsteva.probes import ConditionProbe + + condition = ConditionProbe(completeness_predictor="per_condition_default") + condition.compute( + data, + stay_types={ + "All": ".*", + "Hospit": "hospitalisés", + }, + diag_types={ + "All": ".*", + "DP/DR": "DP|DR", + }, + condition_types={ + "All": ".*", + "Pulmonary_embolism": "I26", + }, + source_systems=["AREM", "ORBIS"], + ) + condition.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | diag_type | condition_type | source_systems | date | n_condition | c | + | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :---------- | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 0.497 | + | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 0.274 | + | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 0.769 | + + === "BiologyProbe" + + The [``BiologyProbe``][edsteva.probes.biology.biology.BiologyProbe] computes $c_(t)$ the availability of laboratory data: + + === "per_visit_default" + + The [``per_visit_default``][edsteva.probes.biology.completeness_predictors.per_visit] algorithm computes $c_(t)$ the availability of laboratory data linked to patients' administrative stays: + + $$ + c(t) = \frac{n_{with\,biology}(t)}{n_{visit}(t)} + $$ + + Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,biology}$ the number of stays having at least one biological measurement recorded and $t$ is the month. + + !!!info "" + If the number of visits $n_{visit}(t)$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + !!!Warning "Care site level" + Laboratory data are only available at hospital level. + + ```python + from edsteva.probes import BiologyProbe + + biology = BiologyProbe(completeness_predictor="per_visit_default") + biology.compute( + data, + stay_types={ + "Hospit": "hospitalisés", + }, + concepts_sets={ + "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", + "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", + }, + ) + biology.predictor.head() + ``` + + | care_site_level | care_site_id | care_site_short_name | stay_type | concepts_sets | date | n_visit | n_visit_with_measurement | c | + | :-------------- | :----------- | :------------------- | :-------- | :------------ | :--------- | :------ | :----------------------- | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Créatinine' | 2019-05-01 | 233.0 | 196.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Leucocytes' | 2021-04-01 | 393.0 | 252.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2011-03-01 | 204.0 | 101.0 | 0.497 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Leucocytes' | 2018-08-01 | 22.0 | 6.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Hospit' | 'Leucocytes' | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | + + === "per_measurement_default" + + The [``per_measurement_default``][edsteva.probes.biology.completeness_predictors.per_measurement] algorithm computes $c_(t)$ the availability of biological measurements: + + $$ + c(t) = \frac{n_{biology}(t)}{n_{max}} + $$ + + Where $n_{biology}(t)$ is the number of biological measurements, $t$ is the month and $n_{max} = \max_{t}(n_{biology}(t))$. + + !!!info "" + If the monthly maximum number of biological measurements $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + + !!!Warning "Care site level" + Laboratory data are only available at hospital level. + + ```python + from edsteva.probes import BiologyProbe + + biology = BiologyProbe(completeness_predictor="per_measurement_default") + biology.compute( + data, + stay_types={ + "Hospit": "hospitalisés", + }, + concepts_sets={ + "Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", + "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", + }, + ) + biology.predictor.head() + ``` - | care_site_level | care_site_id | care_site_short_name | stay_type | diag_type | condition_type | source_systems | date | n_visit | c | - | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :------ | :---- | - | Hôpital | 8312057527 | Care site 1 | 'All' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 0.841 | - | Hôpital | 8312057527 | Care site 1 | 'All' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 0.640 | - | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 0.497 | - | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'All' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 0.274 | - | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 0.769 | + | care_site_level | care_site_id | care_site_short_name | stay_type | concepts_sets | date | n_measurement | c | + | :----------------------- | :----------- | :------------------- | :-------- | :------------ | :--------- | :------------ | :---- | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Créatinine' | 2019-05-01 | 233.0 | 0.841 | + | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Leucocytes' | 2021-04-01 | 393.0 | 0.640 | + | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2011-03-01 | 204.0 | 0.497 | + | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'Leucocytes' | 2018-08-01 | 22.0 | 0.274 | + | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'Leucocytes' | 2022-02-01 | 9746.0 | 0.769 | === "Model" diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index aa4e361e..44c29be5 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -128,6 +128,8 @@ def compute_process( **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` care_site_specialties : List[str], optional **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` + concepts_codes : List[str], optional + **EXAMPLE**: ['E3180', 'G1974', 'J1002', 'A7813', 'A0094', 'G1975', 'J1172', 'G7834', 'F9409', 'F9410', 'C0697', 'H4038']` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` concepts_sets : Union[str, Dict[str, str]], optional diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index ced6366e..267bd008 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -41,7 +41,7 @@ def compute_completeness_predictor_per_measurement( ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] - The ``per_visit`` algorithm computes $c_(t)$ the availability of biological measurements: + The ``per_measurement`` algorithm computes $c_(t)$ the availability of biological measurements: $$ c(t) = \frac{n_{biology}(t)}{n_{max}} diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 1fcd6ba4..df04774b 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -14,6 +14,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, + impute_missing_columns, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to @@ -128,14 +129,14 @@ def compute_completeness( .agg({"has_measurement": "count"}) .rename(columns={"has_measurement": "n_visit_with_measurement"}) ) - biology_column = set( + biology_columns = set( ["concepts_set"] + [ "{}_concept_code".format(terminology) for terminology in self._standard_terminologies ] ) - partition_cols = list(set(partition_cols) - set(biology_column)) + partition_cols = list(set(partition_cols) - set(biology_columns)) n_visit = ( biology_predictor.groupby( partition_cols, @@ -158,21 +159,13 @@ def compute_completeness( ) # Impute missing columns for visit without measurement - missing_column = list( - set(biology_predictor.columns).intersection(set(biology_column)) - ) - missing_measurement = biology_predictor[ - biology_predictor.n_visit_with_measurement == 0 - ].copy() - biology_predictor = biology_predictor[ - biology_predictor.n_visit_with_measurement > 0 - ] - for partition, _ in biology_predictor.groupby(missing_column): - missing_measurement[missing_column] = partition - biology_predictor = pd.concat([biology_predictor, missing_measurement]) - biology_predictor = biology_predictor.drop_duplicates( - subset=self._index.copy() + ["date"], keep="first" + biology_predictor = impute_missing_columns( + predictor=biology_predictor, + target_column="n_visit_with_measurement", + missing_columns=biology_columns, + index=self._index.copy(), ) + return biology_predictor diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 63dca1ec..69afacd0 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -15,6 +15,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, + impute_missing_columns, ) from edsteva.utils.checks import check_condition_source_systems, check_tables from edsteva.utils.framework import is_koalas, to @@ -163,23 +164,13 @@ def compute_completeness( ) # Impute missing diag type, condition type and source for visit without condition - missing_column = list( - set(condition_predictor.columns).intersection( - set(["diag_type", "condition_type", "source_system"]) - ) - ) - missing_condition = condition_predictor[ - condition_predictor.n_visit_with_condition == 0 - ].copy() - condition_predictor = condition_predictor[ - condition_predictor.n_visit_with_condition > 0 - ] - for partition, _ in condition_predictor.groupby(missing_column): - missing_condition[missing_column] = partition - condition_predictor = pd.concat([condition_predictor, missing_condition]) - condition_predictor = condition_predictor.drop_duplicates( - subset=self._index.copy() + ["date"], keep="first" + condition_predictor = impute_missing_columns( + predictor=condition_predictor, + target_column="n_visit_with_condition", + missing_columns=["diag_type", "condition_type", "source_system"], + index=self._index.copy(), ) + return condition_predictor diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index f1ee809a..65245769 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -16,6 +16,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, + impute_missing_columns, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to @@ -154,12 +155,12 @@ def compute_completeness( ) # Impute missing note type for visit without note - if "note_type" in note_predictor.columns: - for note_type in note_predictor.note_type.dropna().unique(): - missing_note = note_predictor[note_predictor.note_type.isna()].copy() - missing_note["note_type"] = note_type - note_predictor = pd.concat([note_predictor, missing_note]) - note_predictor = note_predictor[~note_predictor.note_type.isna()] + note_predictor = impute_missing_columns( + predictor=note_predictor, + target_column="n_visit_with_note", + missing_columns=["note_type"], + index=self._index.copy(), + ) return note_predictor diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index 2b0851c6..f0301b6c 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -21,6 +21,21 @@ } +def impute_missing_columns( + predictor: DataFrame, + target_column: str, + missing_columns: List[str], + index: List[str], +): + missing_columns = list(set(predictor.columns).intersection(set(missing_columns))) + missing_predictor = predictor[predictor[target_column] == 0].copy() + full_predictor = predictor[predictor[target_column] > 0] + for partition, _ in full_predictor.groupby(missing_columns): + missing_predictor[missing_columns] = partition + full_predictor = pd.concat([full_predictor, missing_predictor]) + return full_predictor.drop_duplicates(subset=index + ["date"], keep="first") + + def hospital_only(care_site_levels: List[str]): if not isinstance(care_site_levels, list): care_site_levels = [care_site_levels] From ff1e4a1286bfb47e72d91055d07aec86af720cf4 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Jun 2023 14:31:30 +0200 Subject: [PATCH 036/127] Hot fix --- edsteva/probes/utils/utils.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index f0301b6c..28535679 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -28,12 +28,15 @@ def impute_missing_columns( index: List[str], ): missing_columns = list(set(predictor.columns).intersection(set(missing_columns))) - missing_predictor = predictor[predictor[target_column] == 0].copy() - full_predictor = predictor[predictor[target_column] > 0] - for partition, _ in full_predictor.groupby(missing_columns): - missing_predictor[missing_columns] = partition - full_predictor = pd.concat([full_predictor, missing_predictor]) - return full_predictor.drop_duplicates(subset=index + ["date"], keep="first") + if missing_columns: + missing_predictor = predictor[predictor[target_column] == 0].copy() + full_predictor = predictor[predictor[target_column] > 0] + for partition, _ in full_predictor.groupby(missing_columns): + missing_predictor[missing_columns] = partition + full_predictor = pd.concat([full_predictor, missing_predictor]) + return full_predictor.drop_duplicates(subset=index + ["date"], keep="first") + else: + return predictor def hospital_only(care_site_levels: List[str]): From 6dcc92ebf52bf6ea9b1dd6a32da96df50d1e36ed Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 7 Jun 2023 18:16:14 +0200 Subject: [PATCH 037/127] Update impute missing date --- edsteva/probes/base.py | 85 ++++--------------- .../per_measurement.py | 13 ++- .../completeness_predictors/per_visit.py | 46 ++++++---- .../completeness_predictors/per_condition.py | 8 +- .../completeness_predictors/per_visit.py | 30 ++++--- .../note/completeness_predictors/per_note.py | 8 +- .../note/completeness_predictors/per_visit.py | 35 +++++--- edsteva/probes/utils/utils.py | 41 ++++++--- .../completeness_predictors/per_visit.py | 8 +- tests/test_probes.py | 1 + 10 files changed, 144 insertions(+), 131 deletions(-) diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index 23b0f25e..c0265f21 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -99,59 +99,23 @@ def is_computed_probe(self) -> None: "Predictor has not been computed, please use the compute method as follow: Predictor.compute()" ) - def impute_missing_date( - self, - only_impute_per_care_site: bool = False, - ) -> pd.DataFrame: - """Impute missing date with 0 on the predictor of a probe. - - Parameters - ---------- - only_impute_per_care_site : bool, optional - If True it will only impute missing date between the first and the last observation of each care site. - If False it will impute missing data on the entire study period whatever the care site - """ - # Check if probe has been computed. - self.is_computed_probe() - - # Set start_date to the beginning of the month. - date_index = pd.date_range( - start=self.start_date, - end=self.end_date, - freq="MS", - closed="left", + def filter_date_per_care_site(self, target_column: str): + filtered_predictor = self.predictor.copy() + predictor_activity = self.predictor[self.predictor[target_column] > 0].copy() + predictor_activity = ( + predictor_activity.groupby("care_site_id") + .agg({"date": ["min", "max"]}) + .droplevel(axis="columns", level=0) + .reset_index() ) - date_index = pd.DataFrame({"date": date_index}) - - # Precompute the mapping: - # {'Hôpital-1': {'min': Timestamp('2010-06-01'), 'max': Timestamp('2019-11-01')} - if only_impute_per_care_site: - site_to_min_max_ds = ( - self.predictor.groupby(["care_site_id"])["date"] - .agg([min, max]) - .to_dict("index") - ) - - partition_cols = self._index.copy() - groups = [] - for partition, group in self.predictor.groupby(partition_cols): - group_with_dates = date_index.merge(group, on="date", how="left") - - # Filter on each care site timeframe. - if only_impute_per_care_site: - care_site_id = group["care_site_id"].iloc[0] - ds_min = site_to_min_max_ds[care_site_id]["min"] - ds_max = site_to_min_max_ds[care_site_id]["max"] - group = group.loc[(group["date"] >= ds_min) & (group["date"] <= ds_max)] - - # Fill specific partition values. - for key, val in zip(partition_cols, partition): - group_with_dates[key] = val - # Fill remaining NaN from counts values with 0. - group_with_dates.fillna(0, inplace=True) - groups.append(group_with_dates) - - self.predictor = pd.concat(groups) + filtered_predictor = filtered_predictor.merge( + predictor_activity, on="care_site_id" + ) + filtered_predictor = filtered_predictor[ + (filtered_predictor["date"] >= filtered_predictor["min"]) + & (filtered_predictor["date"] <= filtered_predictor["max"]) + ].drop(columns=["min", "max"]) + self.predictor = filtered_predictor @abstractmethod def compute_process( @@ -175,8 +139,6 @@ def compute( care_site_levels: List[str] = None, stay_types: Union[str, Dict[str, str]] = None, care_site_ids: List[int] = None, - impute_missing_dates: bool = True, - only_impute_per_care_site: bool = False, with_cache: bool = True, **kwargs, ) -> None: @@ -243,7 +205,8 @@ def compute( self.validate_input_data(data=data) self._reset_index() care_site_relationship = prepare_care_site_relationship(data=data) - + self.start_date = pd.to_datetime(start_date) if start_date else None + self.end_date = pd.to_datetime(end_date) if end_date else None self.predictor = self.compute_process( data=data, care_site_relationship=care_site_relationship, @@ -255,18 +218,6 @@ def compute( **kwargs, ) self.is_computed_probe() - - self.start_date = ( - pd.to_datetime(start_date) if start_date else self.predictor["date"].min() - ) - self.end_date = ( - pd.to_datetime(end_date) if end_date else self.predictor["date"].max() - ) - - if impute_missing_dates: - self.impute_missing_date( - only_impute_per_care_site=only_impute_per_care_site, - ) self.care_site_relationship = care_site_relationship self.predictor = self.add_names_columns(self.predictor) if with_cache: diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 267bd008..0bb7a716 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -14,6 +14,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, + impute_missing_dates, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to @@ -130,10 +131,16 @@ def compute_completeness( .agg({"measurement_id": "nunique"}) .rename(columns={"measurement_id": "n_measurement"}) ) - n_measurement = to("pandas", n_measurement) + n_measurement = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_measurement, + partition_cols=partition_cols, + ) + partition_cols = list(set(partition_cols) - {"date"}) - q_99_measurement = ( + max_measurement = ( n_measurement.groupby( partition_cols, as_index=False, @@ -144,7 +151,7 @@ def compute_completeness( ) biology_predictor = n_measurement.merge( - q_99_measurement, + max_measurement, on=partition_cols, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index df04774b..7de35ed4 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -14,7 +14,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, - impute_missing_columns, + impute_missing_dates, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to @@ -119,6 +119,7 @@ def compute_completeness( self, biology_predictor: DataFrame, ): + # Visit with measurement partition_cols = self._index.copy() + ["date"] n_visit_with_measurement = ( biology_predictor.groupby( @@ -129,13 +130,20 @@ def compute_completeness( .agg({"has_measurement": "count"}) .rename(columns={"has_measurement": "n_visit_with_measurement"}) ) - biology_columns = set( - ["concepts_set"] - + [ - "{}_concept_code".format(terminology) - for terminology in self._standard_terminologies - ] + n_visit_with_measurement = to("pandas", n_visit_with_measurement) + biology_columns = ["concepts_set"] + [ + "{}_concept_code".format(terminology) + for terminology in self._standard_terminologies + ] + n_visit_with_measurement = n_visit_with_measurement.dropna(subset=biology_columns) + n_visit_with_measurement = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit_with_measurement, + partition_cols=partition_cols, ) + + # Visit total partition_cols = list(set(partition_cols) - set(biology_columns)) n_visit = ( biology_predictor.groupby( @@ -146,26 +154,30 @@ def compute_completeness( .agg({"visit_id": "nunique"}) .rename(columns={"visit_id": "n_visit"}) ) + n_visit = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit, + partition_cols=partition_cols, + ) + n_visit = to("pandas", n_visit) + n_visit = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit, + partition_cols=partition_cols, + ) + biology_predictor = n_visit_with_measurement.merge( n_visit, on=partition_cols, ) - biology_predictor = to("pandas", biology_predictor) - biology_predictor["c"] = biology_predictor["n_visit"].where( biology_predictor["n_visit"] == 0, biology_predictor["n_visit_with_measurement"] / biology_predictor["n_visit"], ) - # Impute missing columns for visit without measurement - biology_predictor = impute_missing_columns( - predictor=biology_predictor, - target_column="n_visit_with_measurement", - missing_columns=biology_columns, - index=self._index.copy(), - ) - return biology_predictor diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 228fea03..452a1251 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -15,6 +15,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, + impute_missing_dates, ) from edsteva.utils.checks import check_condition_source_systems, check_tables from edsteva.utils.framework import is_koalas, to @@ -140,6 +141,12 @@ def compute_completeness( .rename(columns={"condition_occurrence_id": "n_condition"}) ) n_condition = to("pandas", n_condition) + n_condition = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_condition, + partition_cols=partition_cols, + ) partition_cols = list(set(partition_cols) - {"date"}) max_n_condition = ( @@ -157,7 +164,6 @@ def compute_completeness( on=partition_cols, ) - condition_predictor = to("pandas", condition_predictor) condition_predictor["c"] = condition_predictor["max_n_condition"].where( condition_predictor["max_n_condition"] == 0, condition_predictor["n_condition"] / condition_predictor["max_n_condition"], diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 69afacd0..92c7d0dd 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -15,7 +15,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, - impute_missing_columns, + impute_missing_dates, ) from edsteva.utils.checks import check_condition_source_systems, check_tables from edsteva.utils.framework import is_koalas, to @@ -137,9 +137,16 @@ def compute_completeness( .agg({"has_condition": "count"}) .rename(columns={"has_condition": "n_visit_with_condition"}) ) - partition_cols = list( - set(partition_cols) - {"diag_type", "condition_type", "source_system"} + n_visit_with_condition = to("pandas", n_visit_with_condition) + condition_columns = ["diag_type", "condition_type", "source_system"] + n_visit_with_condition = n_visit_with_condition.dropna(subset=condition_columns) + n_visit_with_condition = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit_with_condition, + partition_cols=partition_cols, ) + partition_cols = list(set(partition_cols) - set(condition_columns)) n_visit = ( condition_predictor.groupby( @@ -150,27 +157,24 @@ def compute_completeness( .agg({"visit_id": "nunique"}) .rename(columns={"visit_id": "n_visit"}) ) + n_visit = to("pandas", n_visit) + n_visit = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit, + partition_cols=partition_cols, + ) condition_predictor = n_visit_with_condition.merge( n_visit, on=partition_cols, ) - condition_predictor = to("pandas", condition_predictor) - condition_predictor["c"] = condition_predictor["n_visit"].where( condition_predictor["n_visit"] == 0, condition_predictor["n_visit_with_condition"] / condition_predictor["n_visit"], ) - # Impute missing diag type, condition type and source for visit without condition - condition_predictor = impute_missing_columns( - predictor=condition_predictor, - target_column="n_visit_with_condition", - missing_columns=["diag_type", "condition_type", "source_system"], - index=self._index.copy(), - ) - return condition_predictor diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 7845a355..dba94a68 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -15,6 +15,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, + impute_missing_dates, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to @@ -128,6 +129,12 @@ def compute_completeness( .rename(columns={"note_id": "n_note"}) ) n_note = to("pandas", n_note) + n_note = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_note, + partition_cols=partition_cols, + ) partition_cols = list(set(partition_cols) - {"date"}) max_note = ( @@ -145,7 +152,6 @@ def compute_completeness( on=partition_cols, ) - note_predictor = to("pandas", note_predictor) note_predictor["c"] = note_predictor["max_n_note"].where( note_predictor["max_n_note"] == 0, note_predictor["n_note"] / note_predictor["max_n_note"], diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 65245769..5ecf786d 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -16,7 +16,7 @@ CARE_SITE_LEVEL_NAMES, concatenate_predictor_by_level, hospital_only, - impute_missing_columns, + impute_missing_dates, ) from edsteva.utils.checks import check_tables from edsteva.utils.framework import is_koalas, to @@ -119,8 +119,8 @@ def compute_completeness( self, note_predictor: DataFrame, ): + # Visit with note partition_cols = self._index.copy() + ["date"] - n_visit_with_note = ( note_predictor.groupby( partition_cols, @@ -130,8 +130,18 @@ def compute_completeness( .agg({"has_note": "count"}) .rename(columns={"has_note": "n_visit_with_note"}) ) + n_visit_with_note = to("pandas", n_visit_with_note) + note_columns = ["note_type"] + n_visit_with_note = n_visit_with_note.dropna(subset=note_columns) + n_visit_with_note = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit_with_note, + partition_cols=partition_cols, + ) - partition_cols = list(set(partition_cols) - {"note_type"}) + # Visit total + partition_cols = list(set(partition_cols) - set(note_columns)) n_visit = ( note_predictor.groupby( partition_cols, @@ -141,27 +151,24 @@ def compute_completeness( .agg({"visit_id": "nunique"}) .rename(columns={"visit_id": "n_visit"}) ) - + n_visit = to("pandas", n_visit) + n_visit = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit, + partition_cols=partition_cols, + ) note_predictor = n_visit_with_note.merge( n_visit, on=partition_cols, ) - note_predictor = to("pandas", note_predictor) - + # Compute completeness note_predictor["c"] = note_predictor["n_visit"].where( note_predictor["n_visit"] == 0, note_predictor["n_visit_with_note"] / note_predictor["n_visit"], ) - # Impute missing note type for visit without note - note_predictor = impute_missing_columns( - predictor=note_predictor, - target_column="n_visit_with_note", - missing_columns=["note_type"], - index=self._index.copy(), - ) - return note_predictor diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index 28535679..315ca62a 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import Dict, List import pandas as pd @@ -21,22 +22,34 @@ } -def impute_missing_columns( +def impute_missing_dates( + start_date: datetime, + end_date: datetime, predictor: DataFrame, - target_column: str, - missing_columns: List[str], - index: List[str], + partition_cols: List[str], ): - missing_columns = list(set(predictor.columns).intersection(set(missing_columns))) - if missing_columns: - missing_predictor = predictor[predictor[target_column] == 0].copy() - full_predictor = predictor[predictor[target_column] > 0] - for partition, _ in full_predictor.groupby(missing_columns): - missing_predictor[missing_columns] = partition - full_predictor = pd.concat([full_predictor, missing_predictor]) - return full_predictor.drop_duplicates(subset=index + ["date"], keep="first") - else: - return predictor + if not start_date: + start_date = predictor["date"].min() + if not end_date: + end_date = predictor["date"].max() + date_index = pd.date_range( + start=start_date, + end=end_date, + freq="MS", + closed="left", + ) + date_index = pd.DataFrame({"date": date_index}) + all_partitions = ( + predictor[list(set(partition_cols) - {"date"})] + .drop_duplicates() + .merge(date_index, how="cross") + ) + filled_predictor = all_partitions.merge( + predictor, + on=partition_cols, + how="left", + ).fillna(0) + return filled_predictor def hospital_only(care_site_levels: List[str]): diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 4d8cbadd..83d3a8c7 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -14,6 +14,7 @@ VISIT_DETAIL_TYPE, concatenate_predictor_by_level, hospital_only, + impute_missing_dates, ) from edsteva.utils.framework import is_koalas, to from edsteva.utils.typing import Data, DataFrame @@ -127,8 +128,13 @@ def compute_completeness( .agg({"visit_id": "nunique"}) .rename(columns={"visit_id": "n_visit"}) ) - n_visit = to("pandas", n_visit) + n_visit = impute_missing_dates( + start_date=self.start_date, + end_date=self.end_date, + predictor=n_visit, + partition_cols=partition_cols, + ) partition_cols = list(set(partition_cols) - {"date"}) max_n_visit = ( diff --git a/tests/test_probes.py b/tests/test_probes.py index 73971bdb..1ba209d2 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -157,6 +157,7 @@ def test_base_probe(data): visit.load("test.pickle") predictor = visit.predictor.copy() visit.filter_care_site(care_site_ids="1") + visit.filter_date_per_care_site(target_column="n_visit") assert visit.predictor.care_site_id.str.startswith("1").all() visit.filter_care_site(care_site_ids=["1", "2"], care_site_short_names="Hôpital-2") visit.reset_predictor() From bb9d4a12a1c65547815e0a7c5b75093217810e49 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 9 Jun 2023 10:54:37 +0200 Subject: [PATCH 038/127] Improve missing dates algo --- docs/components/model.md | 10 +-- docs/components/probe.md | 76 ++++++++--------- docs/components/visualization.md | 8 +- docs/index.md | 81 ++++++++++--------- edsteva/models/base.py | 11 +++ .../rectangle_function/rectangle_function.py | 27 ++++--- edsteva/models/step_function/step_function.py | 27 ++++--- edsteva/probes/base.py | 4 +- edsteva/probes/biology/biology.py | 2 +- .../per_measurement.py | 5 +- .../completeness_predictors/per_visit.py | 16 ++-- .../completeness_predictors/per_condition.py | 17 ++-- .../completeness_predictors/per_visit.py | 26 ++++-- edsteva/probes/condition/condition.py | 2 +- .../note/completeness_predictors/per_note.py | 20 +++-- .../note/completeness_predictors/per_visit.py | 20 +++-- edsteva/probes/utils/utils.py | 5 +- .../completeness_predictors/per_visit.py | 19 +++-- edsteva/viz/dashboards/probe/fitted_probe.py | 4 +- edsteva/viz/dashboards/probe/probe.py | 2 +- edsteva/viz/plots/probe/fitted_probe.py | 2 +- edsteva/viz/plots/probe/probe.py | 6 +- tests/test_probes.py | 26 ++---- 23 files changed, 224 insertions(+), 192 deletions(-) diff --git a/docs/components/model.md b/docs/components/model.md index 5982f214..2b1d9d3c 100644 --- a/docs/components/model.md +++ b/docs/components/model.md @@ -16,15 +16,15 @@ A **Model** is a python class designed to characterize the temporal variability The Model class is expecting a [**``Probe``**][probe] object in order to estimate the Model coefficients $\Theta$ and some metrics if desired. ### Attributes -- [**`estimates`**][edsteva.models.base.BaseModel] is a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) computed by the [`fit()`][edsteva.models.base.BaseModel.fit] method. It contains the estimated coefficients $\Theta$ and metrics for each column given by the [`Probe._index`][edsteva.probes.visit.VisitProbe] (e.g. care site, stay type, etc.). +- [**`estimates`**][edsteva.models.base.BaseModel] is a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) computed by the [`fit()`][edsteva.models.base.BaseModel.fit] method. It contains the estimated coefficients $\Theta$ and metrics for each column given by the [`Probe._index`][edsteva.probes.visit.visit.VisitProbe] (e.g. care site, stay type, etc.). - [**`_coefs`**][edsteva.models.step_function.step_function.StepFunction] is the list of the Model coefficients $\Theta$ that are estimated by the [`fit()`][edsteva.models.base.BaseModel.fit] method. ### Methods - [**`fit()`**][edsteva.models.base.BaseModel.fit] method calls the [`fit_process()`][edsteva.models.step_function.step_function.StepFunction.fit_process] method to compute the estimated coefficients $\Theta$ and metrics and store them in the [`estimates`][edsteva.models.base.BaseModel] attribute. - [**`fit_process()`**][edsteva.models.step_function.step_function.StepFunction.fit_process] method computes the estimated coefficients $\Theta$ and metrics from a [`Probe.predictor`][edsteva.probes.base.BaseProbe] DataFrame. -- [**`predict()`**][edsteva.models.base.BaseModel.predict] method applies the [`predict_process()`][edsteva.models.step_function.step_function.StepFunction.predict_process] on a [`Probe.predictor`][edsteva.probes.base.BaseProbe] DataFrame and returns a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) of the estimated prediction $\hat{c}(t)$ for each columns given by [`Probe._index`][edsteva.probes.visit.VisitProbe]. -- [**`predict_process()`**][edsteva.models.step_function.step_function.StepFunction.predict_process] method computes the estimated completeness predictor $\hat{c}(t)$ for each column given by [`Probe._index`][edsteva.probes.visit.VisitProbe]. +- [**`predict()`**][edsteva.models.base.BaseModel.predict] method applies the [`predict_process()`][edsteva.models.step_function.step_function.StepFunction.predict_process] on a [`Probe.predictor`][edsteva.probes.base.BaseProbe] DataFrame and returns a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) of the estimated prediction $\hat{c}(t)$ for each columns given by [`Probe._index`][edsteva.probes.visit.visit.VisitProbe]. +- [**`predict_process()`**][edsteva.models.step_function.step_function.StepFunction.predict_process] method computes the estimated completeness predictor $\hat{c}(t)$ for each column given by [`Probe._index`][edsteva.probes.visit.visit.VisitProbe]. - [**`save()`**][edsteva.models.base.BaseModel.save] method saves the [`Model`][edsteva.models.base.BaseModel] in the desired path. By default it is saved in the cache directory (~/.cache/edsteva/models). - [**`load()`**][edsteva.models.base.BaseModel.load] method loads the [`Model`][edsteva.models.base.BaseModel] from the desired path. By default it is loaded from the cache directory (~/.cache/edsteva/models). @@ -36,7 +36,7 @@ Data stored in the `estimates` attribute follows a specific schema: ### Indexes -The estimates are computed for each column given by the [`Probe._index`][edsteva.probes.visit.VisitProbe]. For example, if you fit your Model on the [``VisitProbe``][edsteva.probes.visit.VisitProbe], the estimates will be computed for each: +The estimates are computed for each column given by the [`Probe._index`][edsteva.probes.visit.visit.VisitProbe]. For example, if you fit your Model on the [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe], the estimates will be computed for each: - **`care_site_level`**: care site hierarchic level (`uf`, `pole`, ``hospital``). - **`care_site_id`**: care site unique identifier. @@ -60,7 +60,7 @@ $$ ### Example -When considering the [`StepFunction.estimates`][edsteva.models.step_function.step_function.StepFunction] fitted on a [``VisitProbe``][edsteva.probes.visit.VisitProbe], it may for instance look like this: +When considering the [`StepFunction.estimates`][edsteva.models.step_function.step_function.StepFunction] fitted on a [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe], it may for instance look like this: | care_site_level | care_site_id | stay_type | t_0 | c_0 | error | | :----------------------- | :----------- | :-------- | :--------- | :---- | :---- | diff --git a/docs/components/probe.md b/docs/components/probe.md index 73a4cb11..bf233fd7 100644 --- a/docs/components/probe.md +++ b/docs/components/probe.md @@ -16,13 +16,13 @@ As detailled in [the dedicated section][loading-data], the Probe class is expect ### Attributes -- [**``predictor``**][edsteva.probes.base.BaseProbe] is a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) computed by the [`compute()`][edsteva.probes.base.BaseProbe.compute] method. It contains the desired completeness predictor $c(t)$ for each column in the [`_index`][edsteva.probes.visit.VisitProbe] attribute (care site, stay type and any other needed column). -- [**`_index`**][edsteva.probes.visit.VisitProbe] is the list of columns that are used to aggregate the data in the [`compute()`][edsteva.probes.base.BaseProbe.compute] method. +- [**``predictor``**][edsteva.probes.base.BaseProbe] is a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) computed by the [`compute()`][edsteva.probes.base.BaseProbe.compute] method. It contains the desired completeness predictor $c(t)$ for each column in the [`_index`][edsteva.probes.visit.visit.VisitProbe] attribute (care site, stay type and any other needed column). +- [**`_index`**][edsteva.probes.visit.visit.VisitProbe] is the list of columns that are used to aggregate the data in the [`compute()`][edsteva.probes.base.BaseProbe.compute] method. ### Methods -- [**`compute()`**][edsteva.probes.base.BaseProbe.compute] method calls the [`compute_process()`][edsteva.probes.visit.VisitProbe.compute_process] method to compute the completeness predictors $c(t)$ and store them in the [`predictor`][edsteva.probes.base.BaseProbe] attribute. -- [**`compute_process()`**][edsteva.probes.visit.VisitProbe.compute_process] method aggregates the input data to compute the completeness predictors $c(t)$. +- [**`compute()`**][edsteva.probes.base.BaseProbe.compute] method calls the [`compute_process()`][edsteva.probes.visit.visit.VisitProbe.compute_process] method to compute the completeness predictors $c(t)$ and store them in the [`predictor`][edsteva.probes.base.BaseProbe] attribute. +- [**`compute_process()`**][edsteva.probes.visit.visit.VisitProbe.compute_process] method aggregates the input data to compute the completeness predictors $c(t)$. - [**`filter_care_site()`**][edsteva.probes.base.BaseProbe.filter_care_site] method filters [`predictor`][edsteva.probes.base.BaseProbe] attribute on the selected care sites including upper and lower levels care sites. - [**`save()`**][edsteva.probes.base.BaseProbe.save] method saves the [`Probe`][edsteva.probes.base.BaseProbe] in the desired path. By default it is saved in the the cache directory (~/.cache/edsteva/probes). - [**`load()`**][edsteva.probes.base.BaseProbe.load] method loads the [`Probe`][edsteva.probes.base.BaseProbe] from the desired path. By default it is loaded from the the cache directory (~/.cache/edsteva/probes). @@ -64,7 +64,7 @@ Then, it can have any other string type column such as: ### Example -When considering the availability of clinical notes, a [``NoteProbe.predictor``][edsteva.probes.note.NoteProbe] may for instance look like this: +When considering the availability of clinical notes, a [``NoteProbe.predictor``][edsteva.probes.note.note.NoteProbe] may for instance look like this: | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_visit | c | | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :------ | :----- | @@ -96,7 +96,7 @@ note_2.load() # (3) ## Defining a custom Probe -If none of the available Probes meets your requirements, you may want to create your own. To define a custom Probe class ``CustomProbe`` that inherits from the abstract class [``BaseProbe``][edsteva.probes.base.BaseProbe] you'll have to implement the [`compute_process()`][edsteva.probes.visit.VisitProbe.compute_process] method (this method is natively called by the [`compute()`][edsteva.probes.base.BaseProbe.compute] method inherited by the [``BaseProbe``][edsteva.probes.base.BaseProbe] class). You'll also have to define the [``_index``][edsteva.probes.visit.VisitProbe] attribute which is the list of columns that are used to aggregate the data in the [`compute_process()`][edsteva.probes.visit.VisitProbe.compute_process] method. +If none of the available Probes meets your requirements, you may want to create your own. To define a custom Probe class ``CustomProbe`` that inherits from the abstract class [``BaseProbe``][edsteva.probes.base.BaseProbe] you'll have to implement the [`compute_process()`][edsteva.probes.visit.visit.VisitProbe.compute_process] method (this method is natively called by the [`compute()`][edsteva.probes.base.BaseProbe.compute] method inherited by the [``BaseProbe``][edsteva.probes.base.BaseProbe] class). You'll also have to define the [``_index``][edsteva.probes.visit.visit.VisitProbe] attribute which is the list of columns that are used to aggregate the data in the [`compute_process()`][edsteva.probes.visit.visit.VisitProbe.compute_process] method. ```python from edsteva.probes import BaseProbe @@ -111,7 +111,7 @@ class CustomProbe(BaseProbe): return custom_predictor ``` -[`compute_process()`][edsteva.probes.visit.VisitProbe.compute_process] can take as much as argument as you need but it must include a [``data``][edsteva.io] argument and must return a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) which contains at least the columns of the [standard schema of a predictor](#predictor-schema). For a detailed example of the implementation of a Probe, please have a look on the implemented Probes such as [``VisitProbe``][edsteva.probes.visit.VisitProbe] or [``NoteProbe``][edsteva.probes.note.NoteProbe]. +[`compute_process()`][edsteva.probes.visit.visit.VisitProbe.compute_process] can take as much as argument as you need but it must include a [``data``][edsteva.io] argument and must return a [`Pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/version/1.3/reference/api/pandas.DataFrame.html) which contains at least the columns of the [standard schema of a predictor](#predictor-schema). For a detailed example of the implementation of a Probe, please have a look on the implemented Probes such as [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] or [``NoteProbe``][edsteva.probes.note.note.NoteProbe]. !!!success "Contributions" If you managed to create your own Probe do not hesitate to share it with the community by following the [contribution guidelines][contributing]. Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. @@ -122,39 +122,41 @@ We list hereafter the Probes that have already been implemented in the library. === "VisitProbe" - The [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative data related to visits for each care site and each stay type according to time: + The [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative stays: - $$ - c(t) = \frac{n_{visit}(t)}{n_{max}} - $$ + === "per_visit_default" - Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. + $$ + c(t) = \frac{n_{visit}(t)}{n_{max}} + $$ - !!!info "" - If the monthly maximum visit $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. - ```python - from edsteva.probes import VisitProbe + !!!info "" + If the maximum number of records per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. - visit = VisitProbe() - visit.compute( - data, - stay_types={ - "Urg": "urgence", - "Hospit": "hospitalisés", - "Urg_Hospit": "urgence|hospitalisés", - }, - ) - visit.predictor.head() - ``` + ```python + from edsteva.probes import VisitProbe + + visit = VisitProbe() + visit.compute( + data, + stay_types={ + "Urg": "urgence", + "Hospit": "hospitalisés", + "Urg_Hospit": "urgence|hospitalisés", + }, + ) + visit.predictor.head() + ``` - | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | - | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | - | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | + | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | + | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | === "NoteProbe" @@ -213,7 +215,7 @@ We list hereafter the Probes that have already been implemented in the library. Where $n_{note}(t)$ is the number of clinical documents, $t$ is the month and $n_{max} = \max_{t}(n_{note}(t))$. !!!info "" - If the monthly maximum number of notes $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of recorded notes per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. ```python from edsteva.probes import NoteProbe @@ -305,7 +307,7 @@ We list hereafter the Probes that have already been implemented in the library. Where $n_{condition}(t)$ is the number of claim codes (e.g. ICD-10) recorded, $t$ is the month and $n_{max} = \max_{t}(n_{condition}(t))$. !!!info "" - If the monthly maximum number of conditions recorded $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of recorded diagnosis per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. ```python from edsteva.probes import ConditionProbe @@ -394,7 +396,7 @@ We list hereafter the Probes that have already been implemented in the library. Where $n_{biology}(t)$ is the number of biological measurements, $t$ is the month and $n_{max} = \max_{t}(n_{biology}(t))$. !!!info "" - If the monthly maximum number of biological measurements $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of recorded biological measurements per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. !!!Warning "Care site level" Laboratory data are only available at hospital level. diff --git a/docs/components/visualization.md b/docs/components/visualization.md index 980cec42..991b65c6 100644 --- a/docs/components/visualization.md +++ b/docs/components/visualization.md @@ -29,7 +29,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "predictor_dashboard()" - The [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] returns: + The [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] returns: - On the top, the aggregated variable is the average completeness predictor $c(t)$ over time $t$ with the prediction $\hat{c}(t)$ if the [fitted Model][model] is specified. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.). @@ -47,7 +47,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "estimates_dashboard()" - The [``estimates_dashboard()``][edsteva.viz.dashboards.estimates_dashboard] returns a representation of the overall deviation from the [Model][model]: + The [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe] returns a representation of the overall deviation from the [Model][model]: - On the top, the aggregated variable is a normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.) with all the [Model coefficients][model-coefficients] and [metrics][metrics] included in the [Model][model]. @@ -72,7 +72,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "plot_probe()" - The [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] returns the top plot of the [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. + The [``plot_probe()``][edsteva.viz.plots.probe.wrapper] returns the top plot of the [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. ```python from edsteva.viz.plots import plot_probe @@ -94,7 +94,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "plot_normalized_probe()" - The [``plot_normalized_probe()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``estimates_dashboard()``][edsteva.viz.dashboards.estimates_dashboard]. Consequently, you have to specify the filters in the inputs of the function. + The [``plot_normalized_probe()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe]. Consequently, you have to specify the filters in the inputs of the function. ```python from edsteva.viz.plots import plot_normalized_probe diff --git a/docs/index.md b/docs/index.md index 286adac3..78d6bd99 100644 --- a/docs/index.md +++ b/docs/index.md @@ -161,14 +161,15 @@ As detailled in [the dedicated section][loading-data], EDS-TeVa is expecting to !!! info "Probe" A [Probe][probe] is a python class designed to compute a completeness predictor $c(t)$ that characterizes data availability of a target variable over time $t$. -In this example, $c(t)$ predicts the availability of administrative records relative to visits. It is defined for each care site and stay type as the number of visits $n_{visit}(t)$ per month $t$, normalized by the $99^{th}$ percentile of visits $n_{99}$ computed over the entire study period: +In this example, $c(t)$ predicts the availability of administrative records relative to visits. It is defined for each care site and stay type as the number of visits $n_{visit}(t)$ per month $t$, normalized by the maximum number of records per month $n_{max} = \max_{t}(n_{visit}(t))$ computed over the entire study period: $$ -c(t) = \frac{n_{visit}(t)}{n_{99}} +c(t) = \frac{n_{visit}(t)}{n_{max}} $$ + !!!info "" - If the $99^{th}$ percentile of visits $n_{99}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of records per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. The [VisitProbe][available-probes] is already available by default in the library: @@ -246,7 +247,7 @@ predictor_dashboard( Interactive dashboard is available [here](assets/charts/interactive_visit.html) ##### Static plot -If you need a static plot for a report, a paper or anything else, you can use the [`plot_probe()`][edsteva.viz.plots.plot_probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. +If you need a static plot for a report, a paper or anything else, you can use the [`plot_probe()`][edsteva.viz.plots.probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. ```python from edsteva.viz.plots import plot_probe @@ -339,7 +340,7 @@ predictor_dashboard( Interactive dashboard is available [here](assets/charts/interactive_fitted_visit.html). ##### Static plot -If you need a static plot for a report, a paper or anything else, you can use the [`plot_probe()`][edsteva.viz.plots.plot_probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. +If you need a static plot for a report, a paper or anything else, you can use the [`plot_probe()`][edsteva.viz.plots.probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. ```python from edsteva.viz.plots import plot_probe @@ -441,39 +442,41 @@ The working example above describes the canonical usage workflow. However, you w === "VisitProbe" - The [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative data related to visits for each care site and each stay type according to time: + The [``VisitProbe``][edsteva.probes.visit.visit.VisitProbe] computes $c_{visit}(t)$ the availability of administrative stays: + + === "per_visit_default" - $$ - c(t) = \frac{n_{visit}(t)}{n_{max}} - $$ + $$ + c(t) = \frac{n_{visit}(t)}{n_{max}} + $$ - Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. + Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. - !!!info "" - If the monthly maximum visit $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + !!!info "" + If the maximum number of records per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. - ```python - from edsteva.probes import VisitProbe + ```python + from edsteva.probes import VisitProbe - visit = VisitProbe() - visit.compute( - data, - stay_types={ - "Urg": "urgence", - "Hospit": "hospitalisés", - "Urg_Hospit": "urgence|hospitalisés", - }, - ) - visit.predictor.head() - ``` + visit = VisitProbe() + visit.compute( + data, + stay_types={ + "Urg": "urgence", + "Hospit": "hospitalisés", + "Urg_Hospit": "urgence|hospitalisés", + }, + ) + visit.predictor.head() + ``` - | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | - | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | - | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | - | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | - | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | + | care_site_level | care_site_id | care_site_short_name | stay_type | date | n_visit | c | + | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | + | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | + | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | + | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | === "NoteProbe" @@ -532,7 +535,7 @@ The working example above describes the canonical usage workflow. However, you w Where $n_{note}(t)$ is the number of clinical documents, $t$ is the month and $n_{max} = \max_{t}(n_{note}(t))$. !!!info "" - If the monthly maximum number of notes $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of recorded notes per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. ```python from edsteva.probes import NoteProbe @@ -624,7 +627,7 @@ The working example above describes the canonical usage workflow. However, you w Where $n_{condition}(t)$ is the number of claim codes (e.g. ICD-10) recorded, $t$ is the month and $n_{max} = \max_{t}(n_{condition}(t))$. !!!info "" - If the monthly maximum number of conditions recorded $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of recorded diagnosis per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. ```python from edsteva.probes import ConditionProbe @@ -713,7 +716,7 @@ The working example above describes the canonical usage workflow. However, you w Where $n_{biology}(t)$ is the number of biological measurements, $t$ is the month and $n_{max} = \max_{t}(n_{biology}(t))$. !!!info "" - If the monthly maximum number of biological measurements $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. + If the maximum number of recorded biological measurements per month $n_{max}$ is equal to 0, we consider that the completeness predictor $c(t)$ is also equal to 0. !!!Warning "Care site level" Laboratory data are only available at hospital level. @@ -918,7 +921,7 @@ The working example above describes the canonical usage workflow. However, you w === "predictor_dashboard()" - The [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] returns: + The [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] returns: - On the top, the aggregated variable is the average completeness predictor $c(t)$ over time $t$ with the prediction $\hat{c}(t)$ if the [fitted Model][model] is specified. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.). @@ -936,7 +939,7 @@ The working example above describes the canonical usage workflow. However, you w === "estimates_dashboard()" - The [``estimates_dashboard()``][edsteva.viz.dashboards.estimates_dashboard] returns a representation of the overall deviation from the [Model][model]: + The [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe] returns a representation of the overall deviation from the [Model][model]: - On the top, the aggregated variable is a normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.) with all the [Model coefficients][model-coefficients] and [metrics][metrics] included in the [Model][model]. @@ -961,7 +964,7 @@ The working example above describes the canonical usage workflow. However, you w === "plot_probe()" - The [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] returns the top plot of the [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper]: the normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. + The [``plot_probe()``][edsteva.viz.plots.probe.wrapper] returns the top plot of the [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper]: the normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. ```python from edsteva.viz.plots import plot_probe @@ -983,7 +986,7 @@ The working example above describes the canonical usage workflow. However, you w === "plot_normalized_probe()" - The [``plot_normalized_probe()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``estimates_dashboard()``][edsteva.viz.dashboards.estimates_dashboard]. Consequently, you have to specify the filters in the inputs of the function. + The [``plot_normalized_probe()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe]. Consequently, you have to specify the filters in the inputs of the function. ```python from edsteva.viz.plots import plot_normalized_probe diff --git a/edsteva/models/base.py b/edsteva/models/base.py index c3fe3ec1..b4148019 100644 --- a/edsteva/models/base.py +++ b/edsteva/models/base.py @@ -32,6 +32,17 @@ class BaseModel(metaclass=ABCMeta): Ths list of extra keyword parameters used. """ + def __init__( + self, + algo: str, + coefs: List[str], + default_metrics: List[str], + ): + self._algo = algo + self._coefs = coefs + self._default_metrics = default_metrics + self._viz_config = {} + def is_computed_estimates(self) -> None: """Raises an error if the Probe has not been fitted properly""" if hasattr(self, "estimates"): diff --git a/edsteva/models/rectangle_function/rectangle_function.py b/edsteva/models/rectangle_function/rectangle_function.py index c2e20f11..709cfbac 100644 --- a/edsteva/models/rectangle_function/rectangle_function.py +++ b/edsteva/models/rectangle_function/rectangle_function.py @@ -20,12 +20,6 @@ class RectangleFunction(BaseModel): - the characteristic time $t_1$ estimates the time after which the data is not available anymore. - the characteristic value $c_0$ estimates the completeness between $t_0$ and $t_1$. - Parameters - ---------- - algo: str - Algorithm used to compute the estimates - **EXAMPLE**: ``"loss_minimization"`` - Attributes ---------- _algo: List[str] @@ -65,10 +59,20 @@ def __init__( self, algo: str = "loss_minimization", ): - self._algo = algo - self._coefs = ["t_0", "c_0", "t_1"] - self._default_metrics = ["error_between_t0_t1"] - self._viz_config = {} + """Initialisation of the RectangleFunction Model. + + Parameters + ---------- + algo : Callable, optional + Algorithm used for the coefficients estimation ($t_0$, $t_1$ and $c_0$) + """ + coefs = ["t_0", "c_0", "t_1"] + default_metrics = ["error_between_t0_t1"] + super().__init__( + algo=algo, + coefs=coefs, + default_metrics=default_metrics, + ) def fit_process( self, @@ -84,10 +88,7 @@ def fit_process( Target variable to be fitted index : List[str], optional Variable from which data is grouped - **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` - algo : Callable, optional - Algorithm used for the coefficients estimation ($t_0$ and $c_0$) """ estimates = algos.get(self._algo)(predictor=predictor, index=index, **kwargs) diff --git a/edsteva/models/step_function/step_function.py b/edsteva/models/step_function/step_function.py index f24a8173..27e12098 100644 --- a/edsteva/models/step_function/step_function.py +++ b/edsteva/models/step_function/step_function.py @@ -19,12 +19,6 @@ class StepFunction(BaseModel): - the characteristic time $t_0$ estimates the time after which the data is available - the characteristic value $c_0$ estimates the stabilized routine completeness - Parameters - ---------- - algo: str - Algorithm used to compute the estimates - **EXAMPLE**: ``"loss_minimization"`` - Attributes ---------- _algo: List[str] @@ -64,10 +58,20 @@ def __init__( self, algo: str = "loss_minimization", ): - self._algo = algo - self._coefs = ["t_0", "c_0"] - self._default_metrics = ["error_after_t0"] - self._viz_config = {} + """Initialisation of the StepFunction Model. + + Parameters + ---------- + algo : Callable, optional + Algorithm used for the coefficients estimation ($t_0$ and $c_0$) + """ + coefs = ["t_0", "c_0"] + default_metrics = ["error_after_t0"] + super().__init__( + algo=algo, + coefs=coefs, + default_metrics=default_metrics, + ) def fit_process( self, @@ -83,10 +87,7 @@ def fit_process( Target variable to be fitted index : List[str], optional Variable from which data is grouped - **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` - algo : Callable, optional - Algorithm used for the coefficients estimation ($t_0$ and $c_0$) """ estimates = algos.get(self._algo)(predictor=predictor, index=index, **kwargs) diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index c0265f21..a67a05ff 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -31,7 +31,7 @@ class BaseProbe(metaclass=ABCMeta): care_site_relationship: pd.DataFrame Available with the [``compute()``][edsteva.probes.base.BaseProbe.compute] method - It describes the care site structure (cf. [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_care_site_relationship]) + It describes the care site structure (cf. [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_df.prepare_care_site_relationship]) """ _schema = ["care_site_level", "care_site_id", "date", "c"] @@ -148,7 +148,7 @@ def compute( Here are the following computation steps: - check if input data is valid with [``validate_input_data()``][edsteva.probes.base.BaseProbe.validate_input_data] method - - query care site relationship table with [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_care_site_relationship] + - query care site relationship table with [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_df.prepare_care_site_relationship] - compute predictor with [``compute_process()``][edsteva.probes.base.BaseProbe.compute_process] method - check if predictor is valid with [``is_computed_probe()``][edsteva.probes.base.BaseProbe.is_computed_probe] method diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 44c29be5..acf8f4e2 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -128,7 +128,7 @@ def compute_process( **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` care_site_specialties : List[str], optional **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` - concepts_codes : List[str], optional + concept_codes : List[str], optional **EXAMPLE**: ['E3180', 'G1974', 'J1002', 'A7813', 'A0094', 'G1975', 'J1172', 'G7834', 'F9409', 'F9410', 'C0697', 'H4038']` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 0bb7a716..3c418cd1 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -84,7 +84,7 @@ def compute_completeness_predictor_per_measurement( end_date=None, stay_types=stay_types, stay_durations=stay_durations, - ) + ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( data=data, @@ -170,7 +170,8 @@ def get_hospital_measurements( care_site: DataFrame, ): hospital_measurement = measurement.merge( - visit_occurrence.drop(columns="date"), on="visit_occurrence_id" + visit_occurrence, + on="visit_occurrence_id", ) hospital_measurement = hospital_measurement.merge(care_site, on="care_site_id") diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 7de35ed4..19179e1d 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -131,11 +131,9 @@ def compute_completeness( .rename(columns={"has_measurement": "n_visit_with_measurement"}) ) n_visit_with_measurement = to("pandas", n_visit_with_measurement) - biology_columns = ["concepts_set"] + [ - "{}_concept_code".format(terminology) - for terminology in self._standard_terminologies + n_visit_with_measurement = n_visit_with_measurement[ + n_visit_with_measurement.n_visit_with_measurement > 0 ] - n_visit_with_measurement = n_visit_with_measurement.dropna(subset=biology_columns) n_visit_with_measurement = impute_missing_dates( start_date=self.start_date, end_date=self.end_date, @@ -144,6 +142,10 @@ def compute_completeness( ) # Visit total + biology_columns = ["concepts_set"] + [ + "{}_concept_code".format(terminology) + for terminology in self._standard_terminologies + ] partition_cols = list(set(partition_cols) - set(biology_columns)) n_visit = ( biology_predictor.groupby( @@ -154,12 +156,6 @@ def compute_completeness( .agg({"visit_id": "nunique"}) .rename(columns={"visit_id": "n_visit"}) ) - n_visit = impute_missing_dates( - start_date=self.start_date, - end_date=self.end_date, - predictor=n_visit, - partition_cols=partition_cols, - ) n_visit = to("pandas", n_visit) n_visit = impute_missing_dates( start_date=self.start_date, diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 452a1251..8abd3f64 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -181,11 +181,9 @@ def get_hospital_condition( hospital_condition = condition_occurrence.merge( visit_occurrence, on="visit_occurrence_id", - how="left", ) hospital_condition = hospital_condition.drop(columns="visit_occurrence_id") hospital_condition = hospital_condition.merge(care_site, on="care_site_id") - if is_koalas(hospital_condition): hospital_condition = hospital_condition.spark.cache() @@ -203,7 +201,6 @@ def get_uf_condition( uf_condition = condition_occurrence.merge( visit_occurrence.drop(columns="care_site_id"), on="visit_occurrence_id", - how="left", ).rename(columns={"visit_detail_id": "visit_id"}) # Add care_site information @@ -228,10 +225,18 @@ def get_pole_condition( care_site: DataFrame, care_site_relationship: DataFrame, ): + care_site_cols = list( + set( + [ + "care_site_short_name", + "care_site_level", + "care_site_specialty", + "specialties_set", + ] + ).intersection(uf_condition.columns) + ) pole_condition = convert_uf_to_pole( - table=uf_condition.drop( - columns=["care_site_short_name", "care_site_level", "care_site_specialty"] - ), + table=uf_condition.drop(columns=care_site_cols), table_name="uf_condition", care_site_relationship=care_site_relationship, ) diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 92c7d0dd..11841bcc 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -127,6 +127,7 @@ def compute_completeness( self, condition_predictor: DataFrame, ): + # Visit with diagnosis partition_cols = self._index.copy() + ["date"] n_visit_with_condition = ( condition_predictor.groupby( @@ -138,16 +139,19 @@ def compute_completeness( .rename(columns={"has_condition": "n_visit_with_condition"}) ) n_visit_with_condition = to("pandas", n_visit_with_condition) - condition_columns = ["diag_type", "condition_type", "source_system"] - n_visit_with_condition = n_visit_with_condition.dropna(subset=condition_columns) + n_visit_with_condition = n_visit_with_condition[ + n_visit_with_condition.n_visit_with_condition > 0 + ] n_visit_with_condition = impute_missing_dates( start_date=self.start_date, end_date=self.end_date, predictor=n_visit_with_condition, partition_cols=partition_cols, ) - partition_cols = list(set(partition_cols) - set(condition_columns)) + # Visit total + condition_columns = ["diag_type", "condition_type", "source_system"] + partition_cols = list(set(partition_cols) - set(condition_columns)) n_visit = ( condition_predictor.groupby( partition_cols, @@ -248,19 +252,25 @@ def get_pole_visit( care_site: DataFrame, care_site_relationship: DataFrame, ): # pragma: no cover + care_site_cols = list( + set( + [ + "care_site_short_name", + "care_site_level", + "care_site_specialty", + "specialties_set", + ] + ).intersection(uf_visit.columns) + ) pole_visit = convert_uf_to_pole( - table=uf_visit.drop( - columns=["care_site_short_name", "care_site_level", "care_site_specialty"] - ), + table=uf_visit.drop(columns=care_site_cols), table_name="uf_visit", care_site_relationship=care_site_relationship, ) pole_visit = pole_visit.merge(care_site, on="care_site_id") - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] - if is_koalas(pole_visit): pole_visit = pole_visit.spark.cache() diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index 99511dfe..ca3a9d0e 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -11,7 +11,7 @@ class ConditionProbe(BaseProbe): r""" - The [``ConditionProbe``][edsteva.probes.condition.ConditionProbe] computes $c(t)$ the availability of claim data: + The [``ConditionProbe``][edsteva.probes.condition.condition.ConditionProbe] computes $c(t)$ the availability of claim data: Parameters ---------- diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index dba94a68..59130d61 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -166,7 +166,7 @@ def get_hospital_note( visit_occurrence: DataFrame, care_site: DataFrame, ): - note_hospital = note.merge(visit_occurrence, on="visit_occurrence_id", how="left") + note_hospital = note.merge(visit_occurrence, on="visit_occurrence_id") note_hospital = note_hospital.drop(columns="visit_occurrence_id") note_hospital = note_hospital.merge(care_site, on="care_site_id") if is_koalas(note_hospital): @@ -184,9 +184,7 @@ def get_note_detail( note_detail = prepare_note_care_site(extra_data=extra_data, note=note) note_detail = note_detail.merge(care_site, on="care_site_id") note_detail = note_detail.merge( - visit_occurrence.drop(columns="care_site_id"), - on="visit_occurrence_id", - how="left", + visit_occurrence.drop(columns="care_site_id"), on="visit_occurrence_id" ).drop(columns="visit_occurrence_id") uf_name = CARE_SITE_LEVEL_NAMES["UF"] @@ -208,10 +206,18 @@ def get_pole_note( care_site: DataFrame, care_site_relationship: DataFrame, ): # pragma: no cover + care_site_cols = list( + set( + [ + "care_site_short_name", + "care_site_level", + "care_site_specialty", + "specialties_set", + ] + ).intersection(note_uf.columns) + ) note_pole = convert_uf_to_pole( - table=note_uf.drop( - columns=["care_site_short_name", "care_site_level", "care_site_specialty"] - ), + table=note_uf.drop(columns=care_site_cols), table_name="note_uf", care_site_relationship=care_site_relationship, ) diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 5ecf786d..7aa60b59 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -131,8 +131,7 @@ def compute_completeness( .rename(columns={"has_note": "n_visit_with_note"}) ) n_visit_with_note = to("pandas", n_visit_with_note) - note_columns = ["note_type"] - n_visit_with_note = n_visit_with_note.dropna(subset=note_columns) + n_visit_with_note = n_visit_with_note[n_visit_with_note.n_visit_with_note > 0] n_visit_with_note = impute_missing_dates( start_date=self.start_date, end_date=self.end_date, @@ -141,6 +140,7 @@ def compute_completeness( ) # Visit total + note_columns = ["note_type"] partition_cols = list(set(partition_cols) - set(note_columns)) n_visit = ( note_predictor.groupby( @@ -235,19 +235,25 @@ def get_pole_visit( care_site: DataFrame, care_site_relationship: DataFrame, ): # pragma: no cover + care_site_cols = list( + set( + [ + "care_site_short_name", + "care_site_level", + "care_site_specialty", + "specialties_set", + ] + ).intersection(uf_visit.columns) + ) pole_visit = convert_uf_to_pole( - table=uf_visit.drop( - columns=["care_site_short_name", "care_site_level", "care_site_specialty"] - ), + table=uf_visit.drop(columns=care_site_cols), table_name="uf_visit", care_site_relationship=care_site_relationship, ) pole_visit = pole_visit.merge(care_site, on="care_site_id") - pole_name = CARE_SITE_LEVEL_NAMES["Pole"] pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] - if is_koalas(pole_visit): pole_visit = pole_visit.spark.cache() diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index 315ca62a..e072d4bb 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -28,6 +28,7 @@ def impute_missing_dates( predictor: DataFrame, partition_cols: List[str], ): + # Generate all available dates if not start_date: start_date = predictor["date"].min() if not end_date: @@ -39,6 +40,8 @@ def impute_missing_dates( closed="left", ) date_index = pd.DataFrame({"date": date_index}) + + # Generate all available partitions all_partitions = ( predictor[list(set(partition_cols) - {"date"})] .drop_duplicates() @@ -48,7 +51,7 @@ def impute_missing_dates( predictor, on=partition_cols, how="left", - ).fillna(0) + ).fillna({col: 0 for col in set(predictor.columns) - set(partition_cols)}) return filled_predictor diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 83d3a8c7..3c3d6734 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -238,18 +238,25 @@ def get_pole_visit( care_site: DataFrame, care_site_relationship: DataFrame, ): + care_site_cols = list( + set( + [ + "care_site_short_name", + "care_site_level", + "care_site_specialty", + "specialties_set", + ] + ).intersection(uf_visit.columns) + ) pole_visit = convert_uf_to_pole( - table=uf_visit.drop( - columns=["care_site_short_name", "care_site_level", "care_site_specialty"] - ), + table=uf_visit.drop(columns=care_site_cols), table_name="uf_visit", care_site_relationship=care_site_relationship, ) pole_visit = pole_visit.merge(care_site, on="care_site_id") - pole_visit = pole_visit[ - pole_visit["care_site_level"] == CARE_SITE_LEVEL_NAMES["Pole"] - ] + pole_name = CARE_SITE_LEVEL_NAMES["Pole"] + pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] if is_koalas(pole_visit): pole_visit = pole_visit.spark.cache() diff --git a/edsteva/viz/dashboards/probe/fitted_probe.py b/edsteva/viz/dashboards/probe/fitted_probe.py index c5e8299a..d49dd5d6 100644 --- a/edsteva/viz/dashboards/probe/fitted_probe.py +++ b/edsteva/viz/dashboards/probe/fitted_probe.py @@ -32,7 +32,7 @@ def fitted_probe_dashboard( time_line_config: Dict[str, str], chart_style: Dict[str, float], ): - r"""Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] + r"""Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] Parameters ---------- @@ -53,8 +53,6 @@ def fitted_probe_dashboard( Configuration used to construct the top main chart. model_line_config: Dict[str, str], optional Configuration used to construct the model line. - error_line_config: Dict[str, str], optional - Configuration used to construct the error line. probe_line_config: Dict[str, str], optional Configuration used to construct the probe line. vertical_bar_charts_config: Dict[str, str], optional diff --git a/edsteva/viz/dashboards/probe/probe.py b/edsteva/viz/dashboards/probe/probe.py index 953a7631..cdba2b7a 100644 --- a/edsteva/viz/dashboards/probe/probe.py +++ b/edsteva/viz/dashboards/probe/probe.py @@ -26,7 +26,7 @@ def probe_only_dashboard( time_line_config: Dict[str, str], chart_style: Dict[str, float], ): - """Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.predictor_dashboard.wrapper] + """Script to be used by [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] Parameters ---------- diff --git a/edsteva/viz/plots/probe/fitted_probe.py b/edsteva/viz/plots/probe/fitted_probe.py index 5003263b..497e4473 100644 --- a/edsteva/viz/plots/probe/fitted_probe.py +++ b/edsteva/viz/plots/probe/fitted_probe.py @@ -22,7 +22,7 @@ def fitted_probe_line( model_line_config: Dict[str, str], probe_line_config: Dict[str, str], ): - r"""Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] + r"""Script to be used by [``plot_probe()``][edsteva.viz.plots.probe.wrapper] Parameters ---------- diff --git a/edsteva/viz/plots/probe/probe.py b/edsteva/viz/plots/probe/probe.py index 9dbcd603..a4a5252b 100644 --- a/edsteva/viz/plots/probe/probe.py +++ b/edsteva/viz/plots/probe/probe.py @@ -13,7 +13,7 @@ def probe_line( y_axis_title: str, main_chart_config: Dict[str, float], ): - """Script to be used by [``plot_probe()``][edsteva.viz.plots.plot_probe.wrapper] + """Script to be used by [``plot_probe()``][edsteva.viz.plots.probe.wrapper] Parameters ---------- @@ -21,10 +21,6 @@ def probe_line( $c(t)$ computed in the Probe indexes : List[str] Variable from which data is grouped - legend_predictor: str, optional, - Label name for the predictor legend. - legend_model: str, optional, - Label name for the model legend. x_axis_title: str, optional, Label name for the x axis. y_axis_title: str, optional, diff --git a/tests/test_probes.py b/tests/test_probes.py index 1ba209d2..f84bd6e2 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -26,8 +26,6 @@ note_predictor="per_visit_default", condition_predictor="per_visit_default", biology_predictor="per_visit_default", - only_impute_per_care_site=True, - impute_missing_dates=True, care_site_levels=["Pole", "UF", "UC", "UH"], care_site_short_names=None, care_site_ids=None, @@ -57,8 +55,6 @@ note_predictor="per_note_default", condition_predictor="per_condition_default", biology_predictor="per_measurement_default", - only_impute_per_care_site=False, - impute_missing_dates=True, care_site_levels=["Hospital", "Pole", "UF"], care_site_ids="1", care_site_short_names="Hôpital-1", @@ -82,8 +78,6 @@ note_predictor="per_visit_default", condition_predictor="per_visit_default", biology_predictor="per_visit_default", - only_impute_per_care_site=False, - impute_missing_dates=False, care_site_levels="Hôpital", care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], @@ -177,8 +171,6 @@ def test_compute_visit_probe(data, params): visit.compute( data=data, care_site_levels=params["care_site_levels"], - only_impute_per_care_site=params["only_impute_per_care_site"], - impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], end_date=params["end_date"], stay_types=params["stay_types"], @@ -314,8 +306,6 @@ def test_compute_note_probe(data, params): note.compute( data=data, care_site_levels=params["care_site_levels"], - only_impute_per_care_site=params["only_impute_per_care_site"], - impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], end_date=params["end_date"], stay_types=params["stay_types"], @@ -462,8 +452,6 @@ def test_compute_condition_probe(data, params): condition.compute( data=data, care_site_levels=params["care_site_levels"], - only_impute_per_care_site=params["only_impute_per_care_site"], - impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], end_date=params["end_date"], stay_types=params["stay_types"], @@ -576,7 +564,7 @@ def test_compute_condition_probe(data, params): if isinstance(params["stay_durations"], list): min_duration = params["stay_durations"][0] max_duration = params["stay_durations"][-1] - specialties_sets = [ + length_of_stays = [ "Incomplete stay", "<= {} days".format(min_duration), ">= {} days".format(max_duration), @@ -585,9 +573,9 @@ def test_compute_condition_probe(data, params): for i in range(0, n_duration - 1): min = params["stay_durations"][i] max = params["stay_durations"][i + 1] - specialties_sets.append("{} days - {} days".format(min, max)) + length_of_stays.append("{} days - {} days".format(min, max)) assert set(condition.predictor.length_of_stay.unique()).issubset( - set(specialties_sets) + set(length_of_stays) ) # Diag type @@ -637,8 +625,6 @@ def test_compute_biology_probe(data, params): biology.compute( data=data, care_site_levels=params["care_site_levels"], - only_impute_per_care_site=params["only_impute_per_care_site"], - impute_missing_dates=params["impute_missing_dates"], start_date=params["start_date"], end_date=params["end_date"], stay_types=params["stay_types"], @@ -728,7 +714,7 @@ def test_compute_biology_probe(data, params): if isinstance(params["stay_durations"], list): min_duration = params["stay_durations"][0] max_duration = params["stay_durations"][-1] - specialties_sets = [ + length_of_stays = [ "Incomplete stay", "<= {} days".format(min_duration), ">= {} days".format(max_duration), @@ -737,9 +723,9 @@ def test_compute_biology_probe(data, params): for i in range(0, n_duration - 1): min = params["stay_durations"][i] max = params["stay_durations"][i + 1] - specialties_sets.append("{} days - {} days".format(min, max)) + length_of_stays.append("{} days - {} days".format(min, max)) assert set(biology.predictor.length_of_stay.unique()).issubset( - set(specialties_sets) + set(length_of_stays) ) # Concepts sets From a2672b883b6b97af550c60aeeb214ed15e5d6089 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 9 Jun 2023 17:52:18 +0200 Subject: [PATCH 039/127] Hot fix: sort date before loss optimization --- edsteva/models/rectangle_function/algos/loss_minimization.py | 1 + edsteva/models/step_function/algos/loss_minimization.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index 0dc32a21..90da63b8 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -52,6 +52,7 @@ def loss_minimization( Min number of months between $t_0$ and $t_1$. """ check_columns(df=predictor, required_columns=index + [x_col, y_col]) + predictor = predictor.sort_values(x_col) cols = index + [x_col, y_col] iter = predictor[cols].groupby(index) results = [] diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index 3fb848db..fc89d5b2 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -49,7 +49,7 @@ def loss_minimization( The loss function $\mathcal{L}$ """ check_columns(df=predictor, required_columns=index + [x_col, y_col]) - + predictor = predictor.sort_values(x_col) cols = index + [x_col, y_col] iter = predictor[cols].groupby(index) results = [] From 40d26dd7931fcbd91a63ff5975e70312ff016dea Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Mon, 26 Jun 2023 12:51:31 +0000 Subject: [PATCH 040/127] adding age and pmsi type filter adding person=None possibility typo typo Add care site set correcting typo regex input regex input adding tqdm adding tqdm tqdm adding lock file test commit --- edsteva/io/synthetic/synthetic.py | 8 + .../algos/loss_minimization.py | 12 +- .../step_function/algos/loss_minimization.py | 9 +- edsteva/probes/biology/biology.py | 25 +- .../per_measurement.py | 19 +- .../completeness_predictors/per_visit.py | 23 +- .../completeness_predictors/per_condition.py | 13 + .../completeness_predictors/per_visit.py | 13 + edsteva/probes/condition/condition.py | 24 + .../note/completeness_predictors/per_note.py | 13 + .../note/completeness_predictors/per_visit.py | 13 + edsteva/probes/note/note.py | 24 + edsteva/probes/utils/filter_df.py | 25 + edsteva/probes/utils/prepare_df.py | 66 ++ .../completeness_predictors/per_visit.py | 15 +- edsteva/probes/visit/visit.py | 24 + edsteva/utils/framework.py | 2 +- poetry.lock | 645 ++++++++++++------ pyproject.toml | 1 + tests/test_probes.py | 157 +++-- 20 files changed, 847 insertions(+), 284 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 8807abad..56e37e1d 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -67,6 +67,14 @@ ("Actif", 0.999), ("supprimé", 0.001), ], + stay_source_value=[ + ("MCO", 0.9), + ("Psychiatrie", 0.05), + ("SSR", 0.02), + ("SLD", 0.03), + ], + person_id=[(str(i), 0.01) for i in range(100)], + provenance_source_value=[("service d'urgence", 0.8), ("non renseigné", 0.2)], ) OTHER_CONDITION_COLUMNS = dict( diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index 90da63b8..ad3e2c52 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -2,6 +2,7 @@ import numpy as np import pandas as pd +import tqdm from edsteva.utils.checks import check_columns from edsteva.utils.loss_functions import l2_loss @@ -12,6 +13,7 @@ def loss_minimization( index: List[str], x_col: str = "date", y_col: str = "c", + n_col: str = "n_visit", loss_function: Callable = l2_loss, min_rect_month_width=3, ): @@ -46,17 +48,19 @@ def loss_minimization( Column name for the time variable $t$. y_col : str, optional Column name for the completeness variable $c(t)$. + n_col : str, optional + Column name for the number of visits. loss_function : Callable, optional The loss function $\mathcal{L}$. min_rect_month_width : int, optional Min number of months between $t_0$ and $t_1$. """ - check_columns(df=predictor, required_columns=index + [x_col, y_col]) + check_columns(df=predictor, required_columns=index + [x_col, y_col, n_col]) predictor = predictor.sort_values(x_col) - cols = index + [x_col, y_col] + cols = index + [x_col, y_col, n_col] iter = predictor[cols].groupby(index) results = [] - for partition, group in iter: + for partition, group in tqdm.tqdm(iter): row = dict(zip(index, partition)) t_0, c_0, t_1 = _compute_one_double_threshold( group, @@ -68,6 +72,8 @@ def loss_minimization( row["t_0"] = t_0 row["c_0"] = c_0 row["t_1"] = t_1 + row["visit_median"] = group[[n_col]][group[[n_col]] > 0].quantile(0.5).values[0] + row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().values[0] results.append(row) return pd.DataFrame(results) diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index fc89d5b2..d5c381c1 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -12,6 +12,7 @@ def loss_minimization( index: List[str], x_col: str = "date", y_col: str = "c", + n_col: str = "n_visit", loss_function: Callable = l2_loss, ) -> pd.DataFrame: r"""Computes the threshold $t_0$ of a predictor $c(t)$ by minimizing the following loss function: @@ -45,12 +46,14 @@ def loss_minimization( Column name for the time variable $t$ y_col : str, optional Column name for the completeness variable $c(t)$ + n_col : str, optional + Column name for the number of visits. loss_function : Callable, optional The loss function $\mathcal{L}$ """ - check_columns(df=predictor, required_columns=index + [x_col, y_col]) + check_columns(df=predictor, required_columns=index + [x_col, y_col, n_col]) predictor = predictor.sort_values(x_col) - cols = index + [x_col, y_col] + cols = index + [x_col, y_col, n_col] iter = predictor[cols].groupby(index) results = [] for partition, group in iter: @@ -63,6 +66,8 @@ def loss_minimization( ) row["t_0"] = t_0 row["c_0"] = c_0 + row["visit_median"] = group[[n_col]][group[[n_col]] > 0].quantile(0.5).values[0] + row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().values[0] results.append(row) return pd.DataFrame(results) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index acf8f4e2..f758e5cc 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -55,9 +55,13 @@ def __init__( "concepts_set", "stay_type", "length_of_stay", + "age_range", "care_site_id", "care_site_specialty", + "care_sites_set", "specialties_set", + "pmsi_type", + "provenance_source", ] + [ "{}_concept_code".format(terminology) for terminology in standard_terminologies @@ -79,6 +83,7 @@ def compute_process( care_site_short_names: List[str] = None, care_site_specialties: List[str] = None, concept_codes: List[str] = None, + care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, concepts_sets: Union[str, Dict[str, str]] = { "Leucocytes": "A0174|K3232|H6740|E4358|C9784|C8824|E6953", @@ -104,6 +109,9 @@ def compute_process( ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], + provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, + pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + age_list: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -130,6 +138,8 @@ def compute_process( **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` concept_codes : List[str], optional **EXAMPLE**: ['E3180', 'G1974', 'J1002', 'A7813', 'A0094', 'G1975', 'J1172', 'G7834', 'F9409', 'F9410', 'C0697', 'H4038']` + care_sites_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All AP-HP": ".*"}` or `{"All AP-HP": ".*", "Pediatrics": r"debre|trousseau|necker"}` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` concepts_sets : Union[str, Dict[str, str]], optional @@ -142,16 +152,25 @@ def compute_process( mapping : List[Tuple[str, str, str]], optional List of values to filter in the column `relationship_id` in order to map between 2 terminologies. **EXAMPLE**: `[("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to")]` + pmsi_type : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", MCO_PSY" : "MCO|Psychiatrie","MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` + provenance_source : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` + age_list : List[int], optional + **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") + if care_sites_sets is None and "care_sites_set" in self._index: + self._index.remove("care_sites_set") + if age_list is None and "age_range" in self._index: + self._index.remove("age_range") if concepts_sets is None and "concepts_set" in self._index: self._index.remove("concepts_set") else: for terminology in self._standard_terminologies: if "{}_concept_code".format(terminology) in self._index: self._index.remove("{}_concept_code".format(terminology)) - return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -164,11 +183,15 @@ def compute_process( care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, concept_codes=concept_codes, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, concepts_sets=concepts_sets, stay_durations=stay_durations, source_terminologies=source_terminologies, mapping=mapping, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 3c418cd1..fb2d2832 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -8,6 +8,7 @@ prepare_biology_relationship, prepare_care_site, prepare_measurement, + prepare_person, prepare_visit_occurrence, ) from edsteva.probes.utils.utils import ( @@ -33,11 +34,15 @@ def compute_completeness_predictor_per_measurement( care_site_short_names: List[str], care_site_specialties: List[str], concept_codes: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], stay_durations: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -53,7 +58,12 @@ def compute_completeness_predictor_per_measurement( self._metrics = ["c", "n_measurement"] check_tables( data=data, - required_tables=["measurement", "concept", "concept_relationship"], + required_tables=[ + "measurement", + "concept", + "concept_relationship", + "visit_occurrence", + ], ) standard_terminologies = self._standard_terminologies biology_relationship = prepare_biology_relationship( @@ -66,6 +76,8 @@ def compute_completeness_predictor_per_measurement( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] + person = prepare_person(data) if age_list else None + measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, @@ -84,6 +96,10 @@ def compute_completeness_predictor_per_measurement( end_date=None, stay_types=stay_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + person=person, + age_list=age_list, ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( @@ -91,6 +107,7 @@ def compute_completeness_predictor_per_measurement( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, care_site_relationship=care_site_relationship, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 19179e1d..a90e256e 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -8,6 +8,7 @@ prepare_biology_relationship, prepare_care_site, prepare_measurement, + prepare_person, prepare_visit_occurrence, ) from edsteva.probes.utils.utils import ( @@ -33,11 +34,15 @@ def compute_completeness_predictor_per_visit( care_site_short_names: List[str], care_site_specialties: List[str], concept_codes: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], stay_durations: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -53,7 +58,12 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_measurement"] check_tables( data=data, - required_tables=["measurement", "concept", "concept_relationship"], + required_tables=[ + "measurement", + "concept", + "concept_relationship", + "visit_occurrence", + ], ) standard_terminologies = self._standard_terminologies biology_relationship = prepare_biology_relationship( @@ -66,12 +76,18 @@ def compute_completeness_predictor_per_visit( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] + person = prepare_person(data) if age_list else None + visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + person=person, + age_list=age_list, ) measurement = prepare_measurement( data=data, @@ -88,6 +104,7 @@ def compute_completeness_predictor_per_visit( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, care_site_relationship=care_site_relationship, ) @@ -111,7 +128,6 @@ def compute_completeness_predictor_per_visit( predictor_by_level=biology_predictor_by_level, care_site_levels=care_site_levels, ) - return compute_completeness(self, biology_predictor) @@ -121,6 +137,7 @@ def compute_completeness( ): # Visit with measurement partition_cols = self._index.copy() + ["date"] + print(partition_cols) n_visit_with_measurement = ( biology_predictor.groupby( partition_cols, @@ -140,7 +157,7 @@ def compute_completeness( predictor=n_visit_with_measurement, partition_cols=partition_cols, ) - + print("Done.") # Visit total biology_columns = ["concepts_set"] + [ "{}_concept_code".format(terminology) diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 8abd3f64..50aafd18 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -8,6 +8,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_care_site, prepare_condition_occurrence, + prepare_person, prepare_visit_detail, prepare_visit_occurrence, ) @@ -34,11 +35,15 @@ def compute_completeness_predictor_per_condition( extra_data: Data, care_site_short_names: List[str], care_site_specialties: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], diag_types: Union[str, Dict[str, str]], condition_types: Union[str, Dict[str, str]], source_systems: List[str], stay_durations: List[float], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -60,10 +65,16 @@ def compute_completeness_predictor_per_condition( ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") + person = prepare_person(data) if age_list else None + visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + person=person, + age_list=age_list, ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( @@ -83,6 +94,7 @@ def compute_completeness_predictor_per_condition( care_site_short_names=care_site_short_names, care_site_relationship=care_site_relationship, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, ) @@ -232,6 +244,7 @@ def get_pole_condition( "care_site_level", "care_site_specialty", "specialties_set", + "care_sites_set", ] ).intersection(uf_condition.columns) ) diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 11841bcc..be3069f5 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -8,6 +8,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_care_site, prepare_condition_occurrence, + prepare_person, prepare_visit_detail, prepare_visit_occurrence, ) @@ -34,11 +35,15 @@ def compute_completeness_predictor_per_visit( extra_data: Data, care_site_short_names: List[str], care_site_specialties: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], diag_types: Union[str, Dict[str, str]], condition_types: Union[str, Dict[str, str]], source_systems: List[str], stay_durations: List[float], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -60,12 +65,18 @@ def compute_completeness_predictor_per_visit( ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") + person = prepare_person(data) if age_list else None + visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + person=person, + age_list=age_list, ) condition_occurrence = prepare_condition_occurrence( @@ -83,6 +94,7 @@ def compute_completeness_predictor_per_visit( care_site_short_names=care_site_short_names, care_site_relationship=care_site_relationship, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, ) @@ -259,6 +271,7 @@ def get_pole_visit( "care_site_level", "care_site_specialty", "specialties_set", + "care_sites_set", ] ).intersection(uf_visit.columns) ) diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index ca3a9d0e..a62556d1 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -40,12 +40,16 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", + "age_range", "diag_type", "condition_type", "source_system", "care_site_id", "care_site_specialty", + "care_sites_set", "specialties_set", + "pmsi_type", + "provenance_source", ] super().__init__( completeness_predictor=completeness_predictor, @@ -65,10 +69,14 @@ def compute_process( care_site_short_names: List[str] = None, care_site_specialties: List[str] = None, diag_types: Union[str, Dict[str, str]] = None, + care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, condition_types: Union[str, Dict[str, str]] = None, source_systems: List[str] = ["ORBIS"], stay_durations: List[float] = None, + provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, + pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + age_list: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -95,6 +103,8 @@ def compute_process( **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` diag_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "DP\DR": "DP|DR"}` or `"DP"` + care_sites_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All AP-HP": ".*"}` or `{"All AP-HP": ".*", "Pediatrics": r"debre|trousseau|necker"}` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` condition_types : Union[str, Dict[str, str]], optional @@ -103,11 +113,21 @@ def compute_process( **EXAMPLE**: `["AREM", "ORBIS"]` stay_durations : List[float], optional **EXAMPLE**: `[1, 30]` + pmsi_type : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` + provenance_source : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` + age_list : List[int], optional + **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") + if care_sites_sets is None and "care_sites_set" in self._index: + self._index.remove("care_sites_set") if condition_types is None and "condition_type" in self._index: self._index.remove("condition_type") + if age_list is None and "age_range" in self._index: + self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -120,11 +140,15 @@ def compute_process( extra_data=extra_data, care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, diag_types=diag_types, stay_durations=stay_durations, condition_types=condition_types, source_systems=source_systems, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 59130d61..e73f7a9a 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -9,6 +9,7 @@ prepare_care_site, prepare_note, prepare_note_care_site, + prepare_person, prepare_visit_occurrence, ) from edsteva.probes.utils.utils import ( @@ -33,10 +34,14 @@ def compute_completeness_predictor_per_note( care_site_ids: List[int], care_site_short_names: List[str], care_site_specialties: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -59,10 +64,16 @@ def compute_completeness_predictor_per_note( note_types=note_types, ) + person = prepare_person(data) if age_list else None + visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + person=person, + age_list=age_list, ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( @@ -71,6 +82,7 @@ def compute_completeness_predictor_per_note( care_site_short_names=care_site_short_names, care_site_relationship=care_site_relationship, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, ) @@ -213,6 +225,7 @@ def get_pole_note( "care_site_level", "care_site_specialty", "specialties_set", + "care_sites_set", ] ).intersection(note_uf.columns) ) diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 7aa60b59..7bbe836a 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -9,6 +9,7 @@ prepare_care_site, prepare_note, prepare_note_care_site, + prepare_person, prepare_visit_detail, prepare_visit_occurrence, ) @@ -34,10 +35,14 @@ def compute_completeness_predictor_per_visit( care_site_ids: List[int], care_site_short_names: List[str], care_site_specialties: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], extra_data: Data, stay_durations: List[float], note_types: Union[str, Dict[str, str]], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -54,12 +59,18 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit", "n_visit_with_note"] check_tables(data=data, required_tables=["note"]) + person = prepare_person(data) if age_list else None + visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + person=person, + age_list=age_list, ) care_site = prepare_care_site( @@ -68,6 +79,7 @@ def compute_completeness_predictor_per_visit( care_site_short_names=care_site_short_names, care_site_relationship=care_site_relationship, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, ) @@ -242,6 +254,7 @@ def get_pole_visit( "care_site_level", "care_site_specialty", "specialties_set", + "care_sites_set", ] ).intersection(uf_visit.columns) ) diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 8dbeddb0..975d185b 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -40,10 +40,14 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", + "age_range", "note_type", "care_site_id", "care_site_specialty", + "care_sites_set", "specialties_set", + "pmsi_type", + "provenance_source", ] super().__init__( completeness_predictor=completeness_predictor, @@ -61,6 +65,7 @@ def compute_process( care_site_ids: List[int], care_site_short_names: List[str] = None, care_site_specialties: List[str] = None, + care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, extra_data: Data = None, stay_durations: List[float] = None, @@ -69,6 +74,9 @@ def compute_process( "Ordonnance": "ordo", "CRH": "crh", }, + provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, + pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + age_list: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -95,6 +103,8 @@ def compute_process( **EXAMPLE**: `[8312056386, 8312027648]` care_site_specialties : List[str], optional **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` + care_sites_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All AP-HP": ".*"}` or `{"All AP-HP": ".*", "Pediatrics": r"debre|trousseau|necker"}` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` extra_data : Data @@ -103,11 +113,21 @@ def compute_process( **EXAMPLE**: `[1, 30]` note_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"CRH": "crh", "Urgence": "urge"}` + pmsi_type : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` + provenance_source : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` + age_list : List[int], optional + **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") + if care_sites_sets is None and "care_sites_set" in self._index: + self._index.remove("care_sites_set") if note_types is None and "note_type" in self._index: self._index.remove("note_type") + if age_list is None and "age_range" in self._index: + self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -120,9 +140,13 @@ def compute_process( extra_data=extra_data, care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, note_types=note_types, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index 6c5f6ee2..5b8eb146 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -232,6 +232,31 @@ def filter_table_by_care_site( ] +def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): + age_list.sort() + + visit_occurrence["age"] = ( + visit_occurrence["date"] - visit_occurrence["birth_datetime"] + ) / (np.timedelta64(timedelta(days=1)) * 356) + + visit_occurrence["age_range"] = "Unkown" + visit_occurrence.loc[ + visit_occurrence.age <= age_list[0], "age_range" + ] = f"age <= {age_list[0]}" + + for age_min, age_max in zip(age_list[:-1], age_list[1:]): + in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) + visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" + + visit_occurrence.loc[ + visit_occurrence.age > age_list[-1], "age_range" + ] = f"age > {age_list[-1]}" + + visit_occurrence = visit_occurrence.drop(columns="age") + + return visit_occurrence + + def convert_uf_to_pole( table: DataFrame, table_name: str, diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 17c57d1b..8a9bde26 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -9,6 +9,7 @@ from edsteva.utils.typing import Data, DataFrame from .filter_df import ( + filter_table_by_age, filter_table_by_care_site, filter_table_by_date, filter_table_by_stay_duration, @@ -21,8 +22,12 @@ def prepare_visit_occurrence( data: Data, stay_types: Union[str, Dict[str, str]], stay_durations: List[float], + pmsi_type: Union[str, Dict[str, str]], + provenance_source: Union[str, Dict[str, str]], start_date: datetime = None, end_date: datetime = None, + person: DataFrame = None, + age_list: List[int] = None, ): required_columns = [ "visit_occurrence_id", @@ -31,8 +36,12 @@ def prepare_visit_occurrence( "visit_end_datetime", "care_site_id", "row_status_source_value", + "stay_source_value", "visit_occurrence_source_value", + "provenance_source_value", + "person_id", ] + check_columns( data.visit_occurrence, required_columns=required_columns, @@ -40,6 +49,22 @@ def prepare_visit_occurrence( ) visit_occurrence = data.visit_occurrence[required_columns] + visit_occurrence = filter_table_by_type( + table=visit_occurrence, + table_name="visit_occurrence", + type_groups=pmsi_type, + source_col="stay_source_value", + target_col="pmsi_type", + ) + + visit_occurrence = filter_table_by_type( + table=visit_occurrence, + table_name="visit_occurrence", + type_groups=provenance_source, + source_col="provenance_source_value", + target_col="provenance_source", + ) + visit_occurrence = filter_table_by_stay_duration( visit_occurrence=visit_occurrence, stay_durations=stay_durations ) @@ -70,6 +95,15 @@ def prepare_visit_occurrence( target_col="stay_type", ) + if age_list: + visit_occurrence = visit_occurrence.merge( + person, left_on="person_id", right_on="person_id" + ) + visit_occurrence = filter_table_by_age( + visit_occurrence=visit_occurrence, + age_list=age_list, + ) + return visit_occurrence @@ -288,6 +322,7 @@ def prepare_care_site( care_site_short_names: Union[str, List[str]], care_site_specialties: Union[str, List[str]], specialties_sets: Union[str, Dict[str, str]], + care_sites_sets: Union[str, Dict[str, str]], care_site_relationship: pd.DataFrame, ): care_site = data.care_site[ @@ -313,6 +348,16 @@ def prepare_care_site( care_site_specialties=care_site_specialties, ) + # Add care_sites_set + if care_sites_sets: + care_site = filter_table_by_type( + table=care_site, + table_name="care_site", + type_groups=care_sites_sets, + source_col="care_site_short_name", + target_col="care_sites_set", + ) + # Add specialties_set if specialties_sets: care_site = filter_table_by_type( @@ -633,3 +678,24 @@ def prepare_biology_relationship( "GLIMS", ) return biology_relationship + + +def prepare_person( + data: Data, +): + check_tables( + data=data, + required_tables=["person"], + ) + + person_columns = ["person_id", "birth_datetime"] + + check_columns( + data.person, + required_columns=person_columns, + df_name="person", + ) + + person = data.person[person_columns] + + return person diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 3c3d6734..5ed73157 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -6,6 +6,7 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, + prepare_person, prepare_visit_detail, prepare_visit_occurrence, ) @@ -31,8 +32,12 @@ def compute_completeness_predictor_per_visit( care_site_ids: List[int], care_site_short_names: List[str], care_site_specialties: List[str], + care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], stay_durations: List[float], + age_list: List[int], + provenance_source: Union[str, Dict[str, str]], + pmsi_type: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -46,12 +51,19 @@ def compute_completeness_predictor_per_visit( Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. """ self._metrics = ["c", "n_visit"] + + person = prepare_person(data) if age_list else None + visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, stay_durations=stay_durations, + pmsi_type=pmsi_type, + provenance_source=provenance_source, + person=person, + age_list=age_list, ) care_site = prepare_care_site( @@ -61,6 +73,7 @@ def compute_completeness_predictor_per_visit( care_site_specialties=care_site_specialties, care_site_relationship=care_site_relationship, specialties_sets=specialties_sets, + care_sites_sets=care_sites_sets, ) hospital_visit = get_hospital_visit( @@ -245,6 +258,7 @@ def get_pole_visit( "care_site_level", "care_site_specialty", "specialties_set", + "care_sites_set", ] ).intersection(uf_visit.columns) ) @@ -253,7 +267,6 @@ def get_pole_visit( table_name="uf_visit", care_site_relationship=care_site_relationship, ) - pole_visit = pole_visit.merge(care_site, on="care_site_id") pole_name = CARE_SITE_LEVEL_NAMES["Pole"] pole_visit = pole_visit[pole_visit["care_site_level"] == pole_name] diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index fb3d88a6..a9f2ac4f 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -40,9 +40,13 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", + "age_range", "care_site_id", "care_site_specialty", + "care_sites_set", "specialties_set", + "pmsi_type", + "provenance_source", ] super().__init__( completeness_predictor=completeness_predictor, @@ -60,8 +64,12 @@ def compute_process( care_site_ids: List[int], care_site_short_names: List[str] = None, care_site_specialties: List[str] = None, + care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, stay_durations: List[float] = None, + provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, + pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + age_list: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -86,13 +94,25 @@ def compute_process( **EXAMPLE**: `["HOSPITAL 1", "HOSPITAL 2"]` care_site_specialties : List[str], optional **EXAMPLE**: `["CARDIOLOGIE", "CHIRURGIE"]` + care_sites_sets : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All AP-HP": ".*"}` or `{"All AP-HP": ".*", "Pediatrics": r"debre|trousseau|necker"}` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` stay_durations : List[float], optional **EXAMPLE**: `[1, 30]` + pmsi_type : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` + provenance_source : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` + age_list : List[int], optional + **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") + if care_sites_sets is None and "care_sites_set" in self._index: + self._index.remove("care_sites_set") + if age_list is None and "age_range" in self._index: + self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -104,8 +124,12 @@ def compute_process( care_site_ids=care_site_ids, care_site_short_names=care_site_short_names, care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, stay_durations=stay_durations, + provenance_source=provenance_source, + pmsi_type=pmsi_type, + age_list=age_list, **kwargs, ) diff --git a/edsteva/utils/framework.py b/edsteva/utils/framework.py index 13c71484..8e9ec36f 100644 --- a/edsteva/utils/framework.py +++ b/edsteva/utils/framework.py @@ -47,7 +47,7 @@ def pandas(obj: DataObject) -> DataObject: # Try using pyarrow via HDFS to convert object to pandas as it is way faster. user = os.environ["USER"] parquet_path = f"hdfs://bbsedsi/user/{user}/temp.parquet" - try: + try: # pragma: no cover obj.to_parquet(parquet_path) obj = pq.read_table(parquet_path) except Exception as e: diff --git a/poetry.lock b/poetry.lock index 623fff39..03326703 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "aiofiles" version = "22.1.0" description = "File support for asyncio." +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -15,6 +16,7 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -33,6 +35,7 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] name = "altair" version = "4.2.2" description = "Altair: A declarative statistical visualization library for Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -55,6 +58,7 @@ dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pyt name = "anyio" version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -77,6 +81,7 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = false python-versions = "*" files = [ @@ -88,6 +93,7 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -108,6 +114,7 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -145,6 +152,7 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -160,6 +168,7 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -181,6 +190,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -195,6 +205,7 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" +category = "main" optional = false python-versions = "*" files = [ @@ -206,6 +217,7 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" +category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -224,6 +236,7 @@ lxml = ["lxml"] name = "black" version = "23.3.0" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -274,6 +287,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -292,6 +306,7 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cached-property" version = "1.5.2" description = "A decorator for caching properties in classes." +category = "dev" optional = false python-versions = "*" files = [ @@ -303,6 +318,7 @@ files = [ name = "catalogue" version = "2.0.8" description = "Super lightweight function registries for your library" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -318,6 +334,7 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -329,6 +346,7 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." +category = "dev" optional = false python-versions = "*" files = [ @@ -405,6 +423,7 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -416,6 +435,7 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -500,6 +520,7 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -515,6 +536,7 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -526,6 +548,7 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -601,6 +624,7 @@ toml = ["tomli"] name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -628,6 +652,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -639,6 +664,7 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -650,6 +676,7 @@ files = [ name = "distlib" version = "0.3.6" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -661,6 +688,7 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -672,6 +700,7 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -686,6 +715,7 @@ test = ["pytest (>=6)"] name = "fastjsonschema" version = "2.17.1" description = "Fastest Python implementation of JSON schema" +category = "dev" optional = false python-versions = "*" files = [ @@ -698,23 +728,25 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.12.0" +version = "3.12.2" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, - {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] [[package]] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -729,6 +761,7 @@ cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." +category = "dev" optional = false python-versions = "*" files = [ @@ -746,6 +779,7 @@ dev = ["flake8", "markdown", "twine", "wheel"] name = "gitdb" version = "4.0.10" description = "Git Object Database" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -760,6 +794,7 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.31" description = "GitPython is a Python library used to interact with Git repositories" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -773,13 +808,14 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "griffe" -version = "0.29.0" +version = "0.29.1" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "griffe-0.29.0-py3-none-any.whl", hash = "sha256:e62ff34b04630c2382e2e277301cb2c29221fb09c04028e62ef35afccc64344b"}, - {file = "griffe-0.29.0.tar.gz", hash = "sha256:6fc892aaa251b3761e3a8d2f5893758e1850ec5d81d4605c4557be0666202a0b"}, + {file = "griffe-0.29.1-py3-none-any.whl", hash = "sha256:f9edae6b9bb2eb205bebbdd0512a162713b9342ff6e32dc596d95ff64aa71c1f"}, + {file = "griffe-0.29.1.tar.gz", hash = "sha256:460188b719e363019d0d0f4bf2d9f05cf2df24960b42a4138a1524a17b100d9b"}, ] [package.dependencies] @@ -790,6 +826,7 @@ colorama = ">=0.4" name = "identify" version = "2.5.24" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -804,6 +841,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -813,13 +851,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.6.0" +version = "6.7.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, - {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, ] [package.dependencies] @@ -829,12 +868,13 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -853,6 +893,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -864,6 +905,7 @@ files = [ name = "ipykernel" version = "6.16.2" description = "IPython Kernel for Jupyter" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -892,6 +934,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "p name = "ipython" version = "7.34.0" description = "IPython: Productive Interactive Computing" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -928,6 +971,7 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" +category = "dev" optional = false python-versions = "*" files = [ @@ -939,6 +983,7 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -953,6 +998,7 @@ arrow = ">=0.15.0" name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -972,6 +1018,7 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.0.3" description = "A very fast and expressive template engine." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -989,6 +1036,7 @@ i18n = ["Babel (>=2.7)"] name = "json5" version = "0.9.14" description = "A Python implementation of the JSON5 data format." +category = "dev" optional = false python-versions = "*" files = [ @@ -1001,19 +1049,21 @@ dev = ["hypothesis"] [[package]] name = "jsonpointer" -version = "2.3" +version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1045,6 +1095,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1069,6 +1120,7 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com name = "jupyter-core" version = "4.12.0" description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1087,6 +1139,7 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1111,6 +1164,7 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-server" version = "1.24.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1123,7 +1177,7 @@ anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbconvert = ">=6.4.4" nbformat = ">=5.2.0" packaging = "*" @@ -1143,6 +1197,7 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console name = "jupyter-server-fileid" version = "0.9.0" description = "" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1162,6 +1217,7 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1181,6 +1237,7 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.4" description = "Document structures for collaborative editing using Ypy" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1198,13 +1255,14 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we [[package]] name = "jupyterlab" -version = "3.6.4" +version = "3.6.5" description = "JupyterLab computational environment" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.4-py3-none-any.whl", hash = "sha256:8a4e495a096ae2315af2b07acaac9d38917b6927ebd891834ddf83b28f53e881"}, - {file = "jupyterlab-3.6.4.tar.gz", hash = "sha256:862fb4a06c759a9b0a12de6bf434a8681a42e52fff0593c120e3fbad6847889f"}, + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, ] [package.dependencies] @@ -1228,6 +1286,7 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1239,6 +1298,7 @@ files = [ name = "jupyterlab-rise" version = "0.1.0" description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1251,13 +1311,14 @@ test = ["coverage", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync" [[package]] name = "jupyterlab-server" -version = "2.22.1" +version = "2.23.0" description = "A set of server components for JupyterLab and JupyterLab like applications." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.22.1-py3-none-any.whl", hash = "sha256:1c8eb55c7cd70a50a51fef42a7b4e26ef2f7fc48728f0290604bd89b1dd156e6"}, - {file = "jupyterlab_server-2.22.1.tar.gz", hash = "sha256:dfaaf898af84b9d01ae9583b813f378b96ee90c3a66f24c5186ea5d1bbdb2089"}, + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, ] [package.dependencies] @@ -1271,7 +1332,7 @@ packaging = ">=21.3" requests = ">=2.28" [package.extras] -docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] @@ -1279,6 +1340,7 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "koalas" version = "1.8.2" description = "Koalas: pandas API on Apache Spark" +category = "main" optional = false python-versions = ">=3.5,<3.10" files = [ @@ -1301,6 +1363,7 @@ spark = ["pyspark (>=2.4.0)"] name = "latexcodec" version = "2.0.1" description = "A lexer and codec to work with LaTeX code in Python." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1315,6 +1378,7 @@ six = ">=1.4.1" name = "loguru" version = "0.7.0" description = "Python logging made (stupidly) simple" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1333,6 +1397,7 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1348,67 +1413,69 @@ testing = ["coverage", "pyyaml"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1423,6 +1490,7 @@ traitlets = "*" name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1434,6 +1502,7 @@ files = [ name = "mike" version = "1.1.2" description = "Manage multiple versions of your MkDocs-powered documentation" +category = "dev" optional = false python-versions = "*" files = [ @@ -1453,19 +1522,21 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"] [[package]] name = "mistune" -version = "2.0.5" -description = "A sane Markdown parser with useful plugins and renderers" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" +category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, - {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, ] [[package]] name = "mkdocs" version = "1.4.3" description = "Project documentation with Markdown." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1495,6 +1566,7 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp name = "mkdocs-autorefs" version = "0.4.1" description = "Automatically link across pages in MkDocs." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1508,12 +1580,13 @@ mkdocs = ">=1.1" [[package]] name = "mkdocs-bibtex" -version = "2.8.16" +version = "2.9.0" description = "An MkDocs plugin that enables managing citations with BibTex" +category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "mkdocs-bibtex-2.8.16.tar.gz", hash = "sha256:d4f4d284a72a7a943ab427fff58e74409fb26eb0536f89f202c891fdda2eb50a"}, + {file = "mkdocs-bibtex-2.9.0.tar.gz", hash = "sha256:a3affdbdcf8f4e78155b9e2e92bd4b579f994821bdb7a6fd700cbbaa42a87585"}, ] [package.dependencies] @@ -1527,6 +1600,7 @@ validators = ">=0.19.0" name = "mkdocs-charts-plugin" version = "0.0.8" description = "MkDocs plugin to add charts from data" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1542,6 +1616,7 @@ pymdown-extensions = ">=9.2" name = "mkdocs-gen-files" version = "0.3.5" description = "MkDocs plugin to programmatically generate documentation pages during the build" +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -1556,6 +1631,7 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-img2fig-plugin" version = "0.9.3" description = "A MkDocs plugin that converts markdown encoded images into
elements." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1569,6 +1645,7 @@ mkdocs = "*" name = "mkdocs-literate-nav" version = "0.4.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1583,6 +1660,7 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-markdown-filter" version = "0.1.1" description = "A MkDocs plugin to add a markdown filter to jinja templates." +category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -1595,13 +1673,14 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -version = "9.1.15" +version = "9.1.17" description = "Documentation that simply works" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.15-py3-none-any.whl", hash = "sha256:b49e12869ab464558e2dd3c5792da5b748a7e0c48ee83b4d05715f98125a7a39"}, - {file = "mkdocs_material-9.1.15.tar.gz", hash = "sha256:8513ab847c9a541ed3d11a3a7eed556caf72991ee786c31c5aac6691a121088a"}, + {file = "mkdocs_material-9.1.17-py3-none-any.whl", hash = "sha256:809ed68427fbab0330b0b07bc93175824c3b98f4187060a5c7b46aa8ae398a75"}, + {file = "mkdocs_material-9.1.17.tar.gz", hash = "sha256:5a076524625047bf4ee4da1509ec90626f8fce915839dc07bdae6b59ff4f36f9"}, ] [package.dependencies] @@ -1619,6 +1698,7 @@ requests = ">=2.26" name = "mkdocs-material-extensions" version = "1.1.1" description = "Extension pack for Python Markdown and MkDocs Material." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1630,6 +1710,7 @@ files = [ name = "mkdocs-section-index" version = "0.3.4" description = "MkDocs plugin to allow clickable sections that lead to an index page" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1644,6 +1725,7 @@ mkdocs = ">=1.1,<2.0" name = "mkdocstrings" version = "0.19.0" description = "Automatic documentation from sources, for MkDocs." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1668,6 +1750,7 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] name = "mkdocstrings-python" version = "0.8.2" description = "A Python handler for mkdocstrings." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1683,6 +1766,7 @@ mkdocstrings = ">=0.19" name = "mknotebooks" version = "0.7.1" description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." +category = "dev" optional = false python-versions = "*" files = [ @@ -1700,6 +1784,7 @@ nbconvert = ">=6.0.0" name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1711,6 +1796,7 @@ files = [ name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1746,6 +1832,7 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1755,7 +1842,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbformat = ">=5.1" traitlets = ">=5.3" @@ -1766,32 +1853,33 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p [[package]] name = "nbconvert" -version = "7.4.0" +version = "7.6.0" description = "Converting Jupyter Notebooks" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbconvert-7.4.0-py3-none-any.whl", hash = "sha256:af5064a9db524f9f12f4e8be7f0799524bd5b14c1adea37e34e83c95127cc818"}, - {file = "nbconvert-7.4.0.tar.gz", hash = "sha256:51b6c77b507b177b73f6729dba15676e42c4e92bcb00edc8cc982ee72e7d89d7"}, + {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, + {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "*" +bleach = "!=5.0.0" defusedxml = "*" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" -nbformat = ">=5.1" +nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" tinycss2 = "*" -traitlets = ">=5.0" +traitlets = ">=5.1" [package.extras] all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] @@ -1806,6 +1894,7 @@ webpdf = ["pyppeteer (>=1,<1.1)"] name = "nbformat" version = "5.8.0" description = "The Jupyter Notebook format" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1828,6 +1917,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1839,6 +1929,7 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1853,6 +1944,7 @@ setuptools = "*" name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1887,6 +1979,7 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1904,6 +1997,7 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.19.5" description = "NumPy is the fundamental package for array computing with Python." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1947,6 +2041,7 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1958,6 +2053,7 @@ files = [ name = "pandas" version = "1.3.3" description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -1996,6 +2092,7 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandas" version = "1.3.5" description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2028,7 +2125,7 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, + {version = ">=1.17.3", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, ] python-dateutil = ">=2.7.3" @@ -2041,6 +2138,7 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2052,6 +2150,7 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2067,6 +2166,7 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2078,6 +2178,7 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = false python-versions = "*" files = [ @@ -2092,6 +2193,7 @@ ptyprocess = ">=0.5" name = "pgpasslib" version = "1.1.0" description = "Library for getting passwords from PostgreSQL password files" +category = "main" optional = false python-versions = "*" files = [ @@ -2103,6 +2205,7 @@ files = [ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" +category = "main" optional = false python-versions = "*" files = [ @@ -2114,6 +2217,7 @@ files = [ name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2123,31 +2227,33 @@ files = [ [[package]] name = "platformdirs" -version = "3.5.1" +version = "3.8.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, - {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, + {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, + {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, ] [package.dependencies] -typing-extensions = {version = ">=4.5", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.dependencies] @@ -2161,6 +2267,7 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2180,6 +2287,7 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.17.0" description = "Python client for the Prometheus monitoring system." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2194,6 +2302,7 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.38" description = "Library for building powerful interactive command lines in Python" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -2208,6 +2317,7 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2234,6 +2344,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psycopg2-binary" version = "2.9.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2305,6 +2416,7 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -2316,6 +2428,7 @@ files = [ name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2327,6 +2440,7 @@ files = [ name = "py4j" version = "0.10.7" description = "Enables Python programs to dynamically access arbitrary Java objects" +category = "main" optional = false python-versions = "*" files = [ @@ -2338,6 +2452,7 @@ files = [ name = "pyarrow" version = "0.16.0" description = "Python library for Apache Arrow" +category = "main" optional = false python-versions = "*" files = [ @@ -2377,6 +2492,7 @@ six = ">=1.0.0" name = "pybtex" version = "0.24.0" description = "A BibTeX-compatible bibliography processor in Python" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" files = [ @@ -2396,6 +2512,7 @@ test = ["pytest"] name = "pycparser" version = "2.21" description = "C parser in Python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2407,6 +2524,7 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2421,6 +2539,7 @@ plugins = ["importlib-metadata"] name = "pylic" version = "3.5.0" description = "A Python license checker" +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -2436,6 +2555,7 @@ toml = ">=0.10.2,<0.11.0" name = "pymdown-extensions" version = "10.0.1" description = "Extension pack for Python Markdown." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2451,6 +2571,7 @@ pyyaml = "*" name = "pypandoc" version = "1.7.5" description = "Thin wrapper for pandoc." +category = "dev" optional = false python-versions = "^2.7 || ^3.6" files = [ @@ -2461,6 +2582,7 @@ files = [ name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2497,6 +2619,7 @@ files = [ name = "pyspark" version = "2.4.8" description = "Apache Spark Python API" +category = "main" optional = false python-versions = "*" files = [ @@ -2513,13 +2636,14 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] [[package]] name = "pytest" -version = "7.3.1" +version = "7.4.0" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, - {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -2532,12 +2656,13 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2556,6 +2681,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-html" version = "3.2.0" description = "pytest plugin for generating HTML reports" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2572,6 +2698,7 @@ pytest-metadata = "*" name = "pytest-metadata" version = "3.0.0" description = "pytest plugin for test session metadata" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2589,6 +2716,7 @@ test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (> name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2603,6 +2731,7 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2614,6 +2743,7 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -2625,6 +2755,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "dev" optional = false python-versions = "*" files = [ @@ -2648,6 +2779,7 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2663,6 +2795,7 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2712,6 +2845,7 @@ files = [ name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2726,6 +2860,7 @@ pyyaml = "*" name = "pyzmq" version = "25.1.0" description = "Python bindings for 0MQ" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2813,105 +2948,107 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2023.5.5" +version = "2023.6.3" description = "Alternative regular expression module, to replace re." +category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309"}, - {file = "regex-2023.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9"}, - {file = "regex-2023.5.5-cp310-cp310-win32.whl", hash = "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66"}, - {file = "regex-2023.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810"}, - {file = "regex-2023.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd"}, - {file = "regex-2023.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a"}, - {file = "regex-2023.5.5-cp311-cp311-win32.whl", hash = "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22"}, - {file = "regex-2023.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80"}, - {file = "regex-2023.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3"}, - {file = "regex-2023.5.5-cp36-cp36m-win32.whl", hash = "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46"}, - {file = "regex-2023.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926"}, - {file = "regex-2023.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2"}, - {file = "regex-2023.5.5-cp37-cp37m-win32.whl", hash = "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c"}, - {file = "regex-2023.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a"}, - {file = "regex-2023.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e"}, - {file = "regex-2023.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb"}, - {file = "regex-2023.5.5-cp38-cp38-win32.whl", hash = "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91"}, - {file = "regex-2023.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e"}, - {file = "regex-2023.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0"}, - {file = "regex-2023.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e"}, - {file = "regex-2023.5.5-cp39-cp39-win32.whl", hash = "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac"}, - {file = "regex-2023.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764"}, - {file = "regex-2023.5.5.tar.gz", hash = "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, + {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, + {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, + {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, + {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, + {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, + {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, + {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, + {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, + {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, + {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, + {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, + {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, + {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, + {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, + {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, ] [[package]] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2933,6 +3070,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2947,6 +3085,7 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2958,6 +3097,7 @@ files = [ name = "ruff" version = "0.0.241" description = "An extremely fast Python linter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2983,6 +3123,7 @@ files = [ name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2997,13 +3138,14 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.8.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, - {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] @@ -3015,6 +3157,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3026,6 +3169,7 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3037,6 +3181,7 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3048,6 +3193,7 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3059,6 +3205,7 @@ files = [ name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3079,6 +3226,7 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "termynal" version = "0.2.0" description = "" +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -3096,6 +3244,7 @@ mkdocs = ["mkdocs"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3114,6 +3263,7 @@ test = ["flake8", "isort", "pytest"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3125,6 +3275,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3136,6 +3287,7 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3147,6 +3299,7 @@ files = [ name = "tornado" version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" optional = false python-versions = ">= 3.7" files = [ @@ -3163,10 +3316,32 @@ files = [ {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] +[[package]] +name = "tqdm" +version = "4.65.0" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, + {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3182,6 +3357,7 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "typed-ast" version = "1.5.4" description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3213,38 +3389,41 @@ files = [ [[package]] name = "typing-extensions" -version = "4.6.3" +version = "4.7.0" description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, - {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, + {file = "typing_extensions-4.7.0-py3-none-any.whl", hash = "sha256:5d8c9dac95c27d20df12fb1d97b9793ab8b2af8a3a525e68c80e21060c161771"}, + {file = "typing_extensions-4.7.0.tar.gz", hash = "sha256:935ccf31549830cda708b42289d44b6f74084d616a00be651601a4f968e77c82"}, ] [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" +category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, - {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] [package.extras] -dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] name = "urllib3" -version = "2.0.2" +version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, - {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, ] [package.extras] @@ -3257,6 +3436,7 @@ zstd = ["zstandard (>=0.18.0)"] name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." +category = "dev" optional = false python-versions = ">=3.4" files = [ @@ -3273,6 +3453,7 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "verspec" version = "0.1.0" description = "Flexible version handling" +category = "dev" optional = false python-versions = "*" files = [ @@ -3285,29 +3466,31 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "virtualenv" -version = "20.23.0" +version = "20.23.1" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, - {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, + {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, + {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, ] [package.dependencies] distlib = ">=0.3.6,<1" -filelock = ">=3.11,<4" -importlib-metadata = {version = ">=6.4.1", markers = "python_version < \"3.8\""} -platformdirs = ">=3.2,<4" +filelock = ">=3.12,<4" +importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} +platformdirs = ">=3.5.1,<4" [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] [[package]] name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3347,6 +3530,7 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -3358,6 +3542,7 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3373,6 +3558,7 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "dev" optional = false python-versions = "*" files = [ @@ -3382,13 +3568,14 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.2" +version = "1.6.1" description = "WebSocket client for Python with low level API options" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.2.tar.gz", hash = "sha256:c7d67c13b928645f259d9b847ab5b57fd2d127213ca41ebd880de1f553b7c23b"}, - {file = "websocket_client-1.5.2-py3-none-any.whl", hash = "sha256:f8c64e28cd700e7ba1f04350d66422b6833b82a796b525a51e740b8cc8dab4b1"}, + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, ] [package.extras] @@ -3400,6 +3587,7 @@ test = ["websockets"] name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3414,6 +3602,7 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] name = "y-py" version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" +category = "dev" optional = false python-versions = "*" files = [ @@ -3489,6 +3678,7 @@ files = [ name = "ypy-websocket" version = "0.8.2" description = "WebSocket connector for Ypy" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3508,6 +3698,7 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3522,4 +3713,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -content-hash = "c1eb00276e019071c706ec6fbe398d2eb6699afff1a1d5ccec7bcac502fbeae4" +content-hash = "00ed480391f1b77786b49df51586eb9b39337407db0d606373697cae91d7bac1" diff --git a/pyproject.toml b/pyproject.toml index 3f5656c7..1b183ddd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ pgpasslib = "^1.1.0" psycopg2-binary = "^2.9.3" pyarrow = ">=0.15, <0.17.0" catalogue = "^2.0.8" +tqdm = "^4.65.0" [tool.poetry.group.dev.dependencies] black = "^23.1.0" diff --git a/tests/test_probes.py b/tests/test_probes.py index f84bd6e2..f7e3ac0f 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -31,6 +31,7 @@ care_site_ids=None, care_site_specialties="PSYCHIATRIE", specialties_sets=None, + care_sites_sets={"All": ".*"}, stay_durations=[1, 30], note_types={"ALL": ".*"}, stay_types=None, @@ -60,6 +61,7 @@ care_site_short_names="Hôpital-1", care_site_specialties=None, specialties_sets={"All": ".*"}, + care_sites_sets=None, concepts_codes=["A0009", "A0209", "A3109"], stay_durations=[1], note_types="CRH", @@ -83,6 +85,7 @@ care_site_short_names=["Hôpital-1", "Hôpital-2"], care_site_specialties=["REA ADULTE", "PSYCHIATRIE"], specialties_sets=None, + care_sites_sets=None, stay_durations=None, stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, note_types={"ALL": ".*", "CRH": "CRH", "Urg": "urg"}, @@ -177,6 +180,7 @@ def test_compute_visit_probe(data, params): care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], care_site_specialties=params["care_site_specialties"], + care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], stay_durations=params["stay_durations"], ) @@ -222,8 +226,23 @@ def test_compute_visit_probe(data, params): set(params["stay_types"]) ) + # Care sites set + if params["care_sites_sets"]: + if isinstance(params["care_sites_sets"], dict): + assert set(visit.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"].keys()) + ) + elif isinstance(params["care_sites_sets"], str): + assert set(visit.predictor.care_sites_set.unique()).issubset( + set([params["care_sites_sets"]]) + ) + elif isinstance(params["care_sites_sets"], list): + assert set(visit.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"]) + ) + # Care site id - if params["care_site_ids"]: + if params["care_site_ids"] and not params["care_sites_sets"]: if isinstance(params["care_site_ids"], str): assert visit.predictor.care_site_id.str.startswith( params["care_site_ids"] @@ -244,17 +263,6 @@ def test_compute_visit_probe(data, params): tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) ).all() - # Care site specialty - if params["care_site_specialties"]: - care_site_filters = filter_table_by_care_site( - table_to_filter=data.care_site, - care_site_relationship=visit.care_site_relationship, - care_site_specialties=params["care_site_specialties"], - ).care_site_id.unique() - if is_koalas(data.care_site): - care_site_filters = care_site_filters.to_list() - assert visit.predictor.care_site_id.isin(care_site_filters).all() - # Specialty sets if params["specialties_sets"]: if isinstance(params["specialties_sets"], dict): @@ -270,6 +278,17 @@ def test_compute_visit_probe(data, params): set(params["specialties_sets"]) ) + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=visit.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert visit.predictor.care_site_id.isin(care_site_filters).all() + # Stay durations if params["stay_durations"]: if isinstance(params["stay_durations"], list): @@ -312,6 +331,7 @@ def test_compute_note_probe(data, params): care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], care_site_specialties=params["care_site_specialties"], + care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], stay_durations=params["stay_durations"], note_types=params["note_types"], @@ -342,6 +362,21 @@ def test_compute_note_probe(data, params): set(params["stay_types"]) ) + # Care sites set + if params["care_sites_sets"]: + if isinstance(params["care_sites_sets"], dict): + assert set(note.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"].keys()) + ) + elif isinstance(params["care_sites_sets"], str): + assert set(note.predictor.care_sites_set.unique()).issubset( + set([params["care_sites_sets"]]) + ) + elif isinstance(params["care_sites_sets"], list): + assert set(note.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"]) + ) + # Care site id if params["care_site_ids"]: if isinstance(params["care_site_ids"], str): @@ -364,17 +399,6 @@ def test_compute_note_probe(data, params): tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) ).all() - # Care site specialty - if params["care_site_specialties"]: - care_site_filters = filter_table_by_care_site( - table_to_filter=data.care_site, - care_site_relationship=note.care_site_relationship, - care_site_specialties=params["care_site_specialties"], - ).care_site_id.unique() - if is_koalas(data.care_site): - care_site_filters = care_site_filters.to_list() - assert note.predictor.care_site_id.isin(care_site_filters).all() - # Specialty sets if params["specialties_sets"]: if isinstance(params["specialties_sets"], dict): @@ -390,6 +414,17 @@ def test_compute_note_probe(data, params): set(params["specialties_sets"]) ) + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=note.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert note.predictor.care_site_id.isin(care_site_filters).all() + # Stay durations if params["stay_durations"]: if isinstance(params["stay_durations"], list): @@ -458,6 +493,7 @@ def test_compute_condition_probe(data, params): care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], care_site_specialties=params["care_site_specialties"], + care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], stay_durations=params["stay_durations"], diag_types=params["diag_types"], @@ -511,6 +547,21 @@ def test_compute_condition_probe(data, params): set(params["stay_types"]) ) + # Care sites set + if params["care_sites_sets"]: + if isinstance(params["care_sites_sets"], dict): + assert set(condition.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"].keys()) + ) + elif isinstance(params["care_sites_sets"], str): + assert set(condition.predictor.care_sites_set.unique()).issubset( + set([params["care_sites_sets"]]) + ) + elif isinstance(params["care_sites_sets"], list): + assert set(condition.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"]) + ) + # Care site id if params["care_site_ids"]: if isinstance(params["care_site_ids"], str): @@ -533,17 +584,6 @@ def test_compute_condition_probe(data, params): tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) ).all() - # Care site specialty - if params["care_site_specialties"]: - care_site_filters = filter_table_by_care_site( - table_to_filter=data.care_site, - care_site_relationship=condition.care_site_relationship, - care_site_specialties=params["care_site_specialties"], - ).care_site_id.unique() - if is_koalas(data.care_site): - care_site_filters = care_site_filters.to_list() - assert condition.predictor.care_site_id.isin(care_site_filters).all() - # Specialty sets if params["specialties_sets"]: if isinstance(params["specialties_sets"], dict): @@ -559,6 +599,17 @@ def test_compute_condition_probe(data, params): set(params["specialties_sets"]) ) + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=condition.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert condition.predictor.care_site_id.isin(care_site_filters).all() + # Stay durations if params["stay_durations"]: if isinstance(params["stay_durations"], list): @@ -631,6 +682,7 @@ def test_compute_biology_probe(data, params): care_site_ids=params["care_site_ids"], care_site_short_names=params["care_site_short_names"], care_site_specialties=params["care_site_specialties"], + care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], stay_durations=params["stay_durations"], concepts_sets=params["concepts_sets"], @@ -661,6 +713,21 @@ def test_compute_biology_probe(data, params): set(params["stay_types"]) ) + # Care sites set + if params["care_sites_sets"]: + if isinstance(params["care_sites_sets"], dict): + assert set(biology.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"].keys()) + ) + elif isinstance(params["care_sites_sets"], str): + assert set(biology.predictor.care_sites_set.unique()).issubset( + set([params["care_sites_sets"]]) + ) + elif isinstance(params["care_sites_sets"], list): + assert set(biology.predictor.care_sites_set.unique()).issubset( + set(params["care_sites_sets"]) + ) + # Care site id if params["care_site_ids"]: if isinstance(params["care_site_ids"], str): @@ -683,17 +750,6 @@ def test_compute_biology_probe(data, params): tuple(map(lambda x: x.split("-")[-1], params["care_site_short_names"])) ).all() - # Care site specialty - if params["care_site_specialties"]: - care_site_filters = filter_table_by_care_site( - table_to_filter=data.care_site, - care_site_relationship=biology.care_site_relationship, - care_site_specialties=params["care_site_specialties"], - ).care_site_id.unique() - if is_koalas(data.care_site): - care_site_filters = care_site_filters.to_list() - assert biology.predictor.care_site_id.isin(care_site_filters).all() - # Specialty sets if params["specialties_sets"]: if isinstance(params["specialties_sets"], dict): @@ -709,6 +765,17 @@ def test_compute_biology_probe(data, params): set(params["specialties_sets"]) ) + # Care site specialty + if params["care_site_specialties"]: + care_site_filters = filter_table_by_care_site( + table_to_filter=data.care_site, + care_site_relationship=biology.care_site_relationship, + care_site_specialties=params["care_site_specialties"], + ).care_site_id.unique() + if is_koalas(data.care_site): + care_site_filters = care_site_filters.to_list() + assert biology.predictor.care_site_id.isin(care_site_filters).all() + # Stay durations if params["stay_durations"]: if isinstance(params["stay_durations"], list): From 8872c0d8fa33a51ba6bd81aaf2984b9003f12854 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Thu, 6 Jul 2023 10:13:32 +0200 Subject: [PATCH 041/127] solving conflicts --- binder/postBuild | 4 - docs/components/visualization.md | 16 -- docs/index.md | 52 ------ edsteva/io/synthetic/biology.py | 31 ---- edsteva/io/synthetic/note.py | 30 ---- edsteva/io/synthetic/synthetic.py | 80 ---------- edsteva/io/synthetic/utils.py | 35 ---- edsteva/io/synthetic/visit.py | 68 -------- edsteva/models/base.py | 8 - .../algos/loss_minimization.py | 10 +- .../rectangle_function/rectangle_function.py | 6 - .../viz_configs/defaults.py | 35 ---- .../viz_configs/normalized_probe_dashboard.py | 8 - .../viz_configs/normalized_probe_plot.py | 8 - .../viz_configs/probe_dashboard.py | 8 - .../viz_configs/probe_plot.py | 8 - .../step_function/algos/loss_minimization.py | 10 +- .../step_function/viz_configs/defaults.py | 27 ---- .../viz_configs/normalized_probe_dashboard.py | 8 - .../viz_configs/normalized_probe_plot.py | 8 - .../viz_configs/probe_dashboard.py | 8 - .../step_function/viz_configs/probe_plot.py | 8 - edsteva/probes/base.py | 4 - edsteva/probes/biology/biology.py | 43 +---- .../per_measurement.py | 34 +--- .../completeness_predictors/per_visit.py | 42 +---- .../viz_configs/n_measurement/defaults.py | 25 --- .../n_measurement/estimates_densities_plot.py | 9 -- .../normalized_probe_dashboard.py | 9 -- .../n_measurement/normalized_probe_plot.py | 8 - .../n_measurement/probe_dashboard.py | 8 - .../viz_configs/n_measurement/probe_plot.py | 8 - .../viz_configs/per_measurement/defaults.py | 25 --- .../estimates_densities_plot.py | 9 -- .../normalized_probe_dashboard.py | 9 -- .../per_measurement/normalized_probe_plot.py | 8 - .../per_measurement/probe_dashboard.py | 8 - .../viz_configs/per_measurement/probe_plot.py | 8 - .../biology/viz_configs/per_visit/defaults.py | 25 --- .../per_visit/estimates_densities_plot.py | 9 -- .../per_visit/normalized_probe_dashboard.py | 9 -- .../per_visit/normalized_probe_plot.py | 8 - .../viz_configs/per_visit/probe_dashboard.py | 8 - .../viz_configs/per_visit/probe_plot.py | 8 - .../completeness_predictors/per_condition.py | 28 +--- .../completeness_predictors/per_visit.py | 26 +-- edsteva/probes/condition/condition.py | 35 +--- .../viz_configs/n_condition/defaults.py | 29 ---- .../n_condition/estimates_densities_plot.py | 9 -- .../n_condition/normalized_probe_dashboard.py | 9 -- .../n_condition/normalized_probe_plot.py | 8 - .../n_condition/probe_dashboard.py | 8 - .../viz_configs/n_condition/probe_plot.py | 8 - .../viz_configs/per_condition/defaults.py | 25 --- .../per_condition/estimates_densities_plot.py | 9 -- .../normalized_probe_dashboard.py | 9 -- .../per_condition/normalized_probe_plot.py | 8 - .../per_condition/probe_dashboard.py | 8 - .../viz_configs/per_condition/probe_plot.py | 8 - .../viz_configs/per_visit/defaults.py | 25 --- .../per_visit/estimates_densities_plot.py | 9 -- .../per_visit/normalized_probe_dashboard.py | 9 -- .../per_visit/normalized_probe_plot.py | 8 - .../viz_configs/per_visit/probe_dashboard.py | 8 - .../viz_configs/per_visit/probe_plot.py | 8 - .../note/completeness_predictors/per_note.py | 31 +--- .../note/completeness_predictors/per_visit.py | 28 +--- edsteva/probes/note/note.py | 38 +---- .../note/viz_configs/n_note/defaults.py | 22 --- .../n_note/estimates_densities_plot.py | 9 -- .../n_note/normalized_probe_dashboard.py | 9 -- .../n_note/normalized_probe_plot.py | 8 - .../viz_configs/n_note/probe_dashboard.py | 8 - .../note/viz_configs/n_note/probe_plot.py | 8 - .../note/viz_configs/per_note/defaults.py | 22 --- .../per_note/estimates_densities_plot.py | 9 -- .../per_note/normalized_probe_dashboard.py | 9 -- .../per_note/normalized_probe_plot.py | 8 - .../viz_configs/per_note/probe_dashboard.py | 8 - .../note/viz_configs/per_note/probe_plot.py | 8 - .../note/viz_configs/per_visit/defaults.py | 25 --- .../per_visit/estimates_densities_plot.py | 9 -- .../per_visit/normalized_probe_dashboard.py | 9 -- .../per_visit/normalized_probe_plot.py | 8 - .../viz_configs/per_visit/probe_dashboard.py | 8 - .../note/viz_configs/per_visit/probe_plot.py | 8 - edsteva/probes/utils/filter_df.py | 51 ------ edsteva/probes/utils/prepare_df.py | 52 +----- edsteva/probes/utils/utils.py | 25 --- .../completeness_predictors/per_visit.py | 40 +---- edsteva/probes/visit/visit.py | 32 +--- .../visit/viz_configs/n_visit/defaults.py | 22 --- .../n_visit/estimates_densities_plot.py | 9 -- .../n_visit/normalized_probe_dashboard.py | 9 -- .../n_visit/normalized_probe_plot.py | 8 - .../viz_configs/n_visit/probe_dashboard.py | 8 - .../visit/viz_configs/n_visit/probe_plot.py | 8 - .../visit/viz_configs/per_visit/defaults.py | 22 --- .../per_visit/estimates_densities_plot.py | 9 -- .../per_visit/normalized_probe_dashboard.py | 9 -- .../per_visit/normalized_probe_plot.py | 8 - .../viz_configs/per_visit/probe_dashboard.py | 8 - .../visit/viz_configs/per_visit/probe_plot.py | 8 - edsteva/utils/file_management.py | 19 --- .../normalized_probe/normalized_probe.py | 80 ---------- edsteva/viz/dashboards/probe/fitted_probe.py | 31 ---- edsteva/viz/dashboards/probe/probe.py | 35 ---- edsteva/viz/dashboards/probe/wrapper.py | 25 --- .../estimates_densities.py | 149 ------------------ .../normalized_probe/normalized_probe.py | 64 -------- edsteva/viz/plots/probe/fitted_probe.py | 7 - edsteva/viz/plots/probe/probe.py | 13 -- edsteva/viz/plots/probe/wrapper.py | 14 -- edsteva/viz/utils.py | 110 ------------- pyproject.toml | 4 - tests/test_model.py | 13 -- tests/test_probes.py | 144 ----------------- tests/test_synthetic.py | 12 -- tests/test_viz.py | 29 ---- 119 files changed, 36 insertions(+), 2427 deletions(-) diff --git a/binder/postBuild b/binder/postBuild index d66a3e70..1e8cb248 100644 --- a/binder/postBuild +++ b/binder/postBuild @@ -1,7 +1,3 @@ pip install edsteva --no-cache-dir -<<<<<<< HEAD -pip install nb-black==1.0.7 -======= pip install nb-black==1.0.5 ->>>>>>> main pip install jupyterlab-rise==0.2.0 diff --git a/docs/components/visualization.md b/docs/components/visualization.md index 7cab7f10..d8d50802 100644 --- a/docs/components/visualization.md +++ b/docs/components/visualization.md @@ -29,11 +29,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "probe_dashboard()" -<<<<<<< HEAD - The [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] returns: -======= The [``probe_dashboard()``][edsteva.viz.dashboards.probe.wrapper] returns: ->>>>>>> main - On the top, the aggregated variable is the average completeness predictor $c(t)$ over time $t$ with the prediction $\hat{c}(t)$ if the [fitted Model][model] is specified. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.). @@ -51,11 +47,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "normalized_probe_dashboard()" -<<<<<<< HEAD - The [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe] returns a representation of the overall deviation from the [Model][model]: -======= The [``normalized_probe_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe] returns a representation of the overall deviation from the [Model][model]: ->>>>>>> main - On the top, the aggregated variable is a normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.) with all the [Model coefficients][model-coefficients] and [metrics][metrics] included in the [Model][model]. @@ -78,11 +70,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "probe_plot()" -<<<<<<< HEAD - The [``plot_probe()``][edsteva.viz.plots.probe.wrapper] returns the top plot of the [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. -======= The [``probe_plot()``][edsteva.viz.plots.probe.wrapper] returns the top plot of the [``probe_dashboard()``][edsteva.viz.dashboards.probe.wrapper]: the normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. ->>>>>>> main ```python from edsteva.viz.plots import probe_plot @@ -104,11 +92,7 @@ A **Plot** is exportable in png or svg format and easy to integrate into a repor === "normalized_probe_plot()" -<<<<<<< HEAD - The [``plot_normalized_probe()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe]. Consequently, you have to specify the filters in the inputs of the function. -======= The [``normalized_probe_plot()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``normalized_probe_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe]. Consequently, you have to specify the filters in the inputs of the function. ->>>>>>> main ```python from edsteva.viz.plots import normalized_probe_plot diff --git a/docs/index.md b/docs/index.md index 8f4d339c..775679ed 100644 --- a/docs/index.md +++ b/docs/index.md @@ -243,11 +243,7 @@ probe_dashboard( Interactive dashboard is available [here](assets/charts/interactive_visit.html) ##### Static plot -<<<<<<< HEAD -If you need a static plot for a report, a paper or anything else, you can use the [`plot_probe()`][edsteva.viz.plots.probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. -======= If you need a static plot for a report, a paper or anything else, you can use the [`probe_plot()`][edsteva.viz.plots.probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. ->>>>>>> main ```python from edsteva.viz.plots import probe_plot @@ -340,11 +336,7 @@ probe_dashboard( Interactive dashboard is available [here](assets/charts/interactive_fitted_visit.html). ##### Static plot -<<<<<<< HEAD -If you need a static plot for a report, a paper or anything else, you can use the [`plot_probe()`][edsteva.viz.plots.probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. -======= If you need a static plot for a report, a paper or anything else, you can use the [`probe_plot()`][edsteva.viz.plots.probe.wrapper] function. It returns the top plot of the dashboard without the interactive filters. Consequently, you have to specify the filters in the inputs of the function. ->>>>>>> main ```python from edsteva.viz.plots import probe_plot @@ -479,11 +471,7 @@ The working example above describes the canonical usage workflow. However, you w | :----------------------- | :----------- | :------------------- | :----------- | :--------- | :------ | :---- | | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2019-05-01 | 233.0 | 0.841 | | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 2021-04-01 | 393.0 | 0.640 | -<<<<<<< HEAD - | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2011-03-01 | 204.0 | 0.497 | -======= | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 2017-03-01 | 204.0 | 0.497 | ->>>>>>> main | Pôle/DMU | 8312027648 | Care site 2 | 'Urg' | 2018-08-01 | 22.0 | 0.274 | | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 2022-02-01 | 9746.0 | 0.769 | @@ -528,11 +516,7 @@ The working example above describes the canonical usage workflow. However, you w | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_visit | n_visit_with_note | c | | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :------ | :---------------- | :---- | | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | 196.0 | 0.841 | -<<<<<<< HEAD - | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2011-04-01 | 393.0 | 252.0 | 0.640 | -======= | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2017-04-01 | 393.0 | 252.0 | 0.640 | ->>>>>>> main | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 101.0 | 0.497 | | Pôle/DMU | 8312056379 | Care site 2 | 'Urg' | 'Ordonnance' | 2018-08-01 | 22.0 | 6.0 | 0.274 | | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | @@ -574,11 +558,7 @@ The working example above describes the canonical usage workflow. However, you w | care_site_level | care_site_id | care_site_short_name | stay_type | note_type | date | n_note | c | | :----------------------- | :----------- | :------------------- | :----------- | :-------------------- | :--------- | :----- | :---- | | Unité Fonctionnelle (UF) | 8312056386 | Care site 1 | 'Urg' | 'All' | 2019-05-01 | 233.0 | 0.841 | -<<<<<<< HEAD - | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2011-04-01 | 393.0 | 0.640 | -======= | Unité Fonctionnelle (UF) | 8653815660 | Care site 1 | 'Hospit' | 'CRH' | 2017-04-01 | 393.0 | 0.640 | ->>>>>>> main | Pôle/DMU | 8312027648 | Care site 2 | 'Hospit' | 'CRH' | 2021-03-01 | 204.0 | 0.497 | | Pôle/DMU | 8312056379 | Care site 2 | 'Urg' | 'Ordonnance' | 2018-08-01 | 22.0 | 0.274 | | Hôpital | 8312022130 | Care site 3 | 'Urg_Hospit' | 'CR Passage Urgences' | 2022-02-01 | 9746.0 | 0.769 | @@ -629,11 +609,7 @@ The working example above describes the canonical usage workflow. However, you w | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :------ | :--------------------- | :---- | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 196.0 | 0.841 | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 252.0 | 0.640 | -<<<<<<< HEAD - | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 101.0 | 0.497 | -======= | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2017-03-01 | 204.0 | 101.0 | 0.497 | ->>>>>>> main | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 6.0 | 0.274 | | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | @@ -677,11 +653,7 @@ The working example above describes the canonical usage workflow. However, you w | :----------------------- | :----------- | :------------------- | :-------- | :-------- | :------------------- | :------------- | :--------- | :---------- | :---- | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2019-05-01 | 233.0 | 0.841 | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | AREM | 2021-04-01 | 393.0 | 0.640 | -<<<<<<< HEAD - | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2011-03-01 | 204.0 | 0.497 | -======= | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'Pulmonary_embolism' | AREM | 2017-03-01 | 204.0 | 0.497 | ->>>>>>> main | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'All' | 'All' | ORBIS | 2018-08-01 | 22.0 | 0.274 | | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'DP/DR' | 'Pulmonary_embolism' | ORBIS | 2022-02-01 | 9746.0 | 0.769 | @@ -726,11 +698,7 @@ The working example above describes the canonical usage workflow. However, you w | :-------------- | :----------- | :------------------- | :-------- | :------------ | :--------- | :------ | :----------------------- | :---- | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Créatinine' | 2019-05-01 | 233.0 | 196.0 | 0.841 | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Leucocytes' | 2021-04-01 | 393.0 | 252.0 | 0.640 | -<<<<<<< HEAD - | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2011-03-01 | 204.0 | 101.0 | 0.497 | -======= | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2017-03-01 | 204.0 | 101.0 | 0.497 | ->>>>>>> main | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Leucocytes' | 2018-08-01 | 22.0 | 6.0 | 0.274 | | Hôpital | 8312022130 | Care site 3 | 'Hospit' | 'Leucocytes' | 2022-02-01 | 9746.0 | 7495.0 | 0.769 | @@ -771,11 +739,7 @@ The working example above describes the canonical usage workflow. However, you w | :----------------------- | :----------- | :------------------- | :-------- | :------------ | :--------- | :------------ | :---- | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Créatinine' | 2019-05-01 | 233.0 | 0.841 | | Hôpital | 8312057527 | Care site 1 | 'Hospit' | 'Leucocytes' | 2021-04-01 | 393.0 | 0.640 | -<<<<<<< HEAD - | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2011-03-01 | 204.0 | 0.497 | -======= | Hôpital | 8312027648 | Care site 2 | 'Hospit' | 'Créatinine' | 2017-03-01 | 204.0 | 0.497 | ->>>>>>> main | Unité Fonctionnelle (UF) | 8312027648 | Care site 2 | 'Hospit' | 'Leucocytes' | 2018-08-01 | 22.0 | 0.274 | | Pôle/DMU | 8312022130 | Care site 3 | 'Hospit' | 'Leucocytes' | 2022-02-01 | 9746.0 | 0.769 | @@ -954,11 +918,7 @@ The working example above describes the canonical usage workflow. However, you w === "probe_dashboard()" -<<<<<<< HEAD - The [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper] returns: -======= The [``probe_dashboard()``][edsteva.viz.dashboards.probe.wrapper] returns: ->>>>>>> main - On the top, the aggregated variable is the average completeness predictor $c(t)$ over time $t$ with the prediction $\hat{c}(t)$ if the [fitted Model][model] is specified. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.). @@ -976,11 +936,7 @@ The working example above describes the canonical usage workflow. However, you w === "normalized_probe_dashboard()" -<<<<<<< HEAD - The [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe] returns a representation of the overall deviation from the [Model][model]: -======= The [``normalized_probe_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe] returns a representation of the overall deviation from the [Model][model]: ->>>>>>> main - On the top, the aggregated variable is a normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. - On the bottom, the interactive filters are all the columns included in the [Probe][probe] (such as time, care site, number of visits...etc.) with all the [Model coefficients][model-coefficients] and [metrics][metrics] included in the [Model][model]. @@ -1003,11 +959,7 @@ The working example above describes the canonical usage workflow. However, you w === "probe_plot()" -<<<<<<< HEAD - The [``plot_probe()``][edsteva.viz.plots.probe.wrapper] returns the top plot of the [``predictor_dashboard()``][edsteva.viz.dashboards.probe.wrapper]: the normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. -======= The [``probe_plot()``][edsteva.viz.plots.probe.wrapper] returns the top plot of the [``probe_dashboard()``][edsteva.viz.dashboards.probe.wrapper]: the normalized completeness predictor $\frac{c(t)}{c_0}$ over normalized time $t - t_0$. ->>>>>>> main ```python from edsteva.viz.plots import probe_plot @@ -1029,11 +981,7 @@ The working example above describes the canonical usage workflow. However, you w === "normalized_probe_plot()" -<<<<<<< HEAD - The [``plot_normalized_probe()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``estimates_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe]. Consequently, you have to specify the filters in the inputs of the function. -======= The [``normalized_probe_plot()``][edsteva.viz.plots.normalized_probe] returns the top plot of the [``normalized_probe_dashboard()``][edsteva.viz.dashboards.normalized_probe.normalized_probe]. Consequently, you have to specify the filters in the inputs of the function. ->>>>>>> main ```python from edsteva.viz.plots import normalized_probe_plot diff --git a/edsteva/io/synthetic/biology.py b/edsteva/io/synthetic/biology.py index 4eec17d0..cc50c8bc 100644 --- a/edsteva/io/synthetic/biology.py +++ b/edsteva/io/synthetic/biology.py @@ -12,10 +12,7 @@ def generate_bio( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -28,10 +25,7 @@ def generate_bio( ): if mode == "step": return _generate_bio_step( -<<<<<<< HEAD -======= generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, @@ -43,10 +37,7 @@ def generate_bio( ) if mode == "rect": return _generate_bio_rect( -<<<<<<< HEAD -======= generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, @@ -59,10 +50,7 @@ def generate_bio( def _generate_bio_step( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -72,14 +60,9 @@ def _generate_bio_step( unit: str, concept_code: str, ): -<<<<<<< HEAD - t0 = np.random.randint(t_start + increase_time, t_end - increase_time) - params = dict( -======= t0 = generator.integers(t_start + increase_time, t_end - increase_time) params = dict( generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, @@ -105,10 +88,7 @@ def _generate_bio_step( def _generate_bio_rect( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -118,13 +98,6 @@ def _generate_bio_rect( unit: str, concept_code: str, ): -<<<<<<< HEAD - t0 = np.random.randint( - t_start + increase_time, (t_end + t_start) / 2 - increase_time - ) - t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) - t0_params = dict( -======= t0 = generator.integers( t_start + increase_time, (t_end + t_start) / 2 - increase_time ) @@ -133,7 +106,6 @@ def _generate_bio_rect( ) t0_params = dict( generator=generator, ->>>>>>> main t_start=t_start, t_end=t1 - increase_time / 2, n_events=n_events, @@ -146,10 +118,7 @@ def _generate_bio_rect( # Raise n_visit to enforce a rectangle shape between_t0_t1 = generate_events_after_t0(**t0_params) t1_params = dict( -<<<<<<< HEAD -======= generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, diff --git a/edsteva/io/synthetic/note.py b/edsteva/io/synthetic/note.py index 4a036cc3..92617546 100644 --- a/edsteva/io/synthetic/note.py +++ b/edsteva/io/synthetic/note.py @@ -4,10 +4,7 @@ def generate_note( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main visit_care_site: pd.DataFrame, note_type: str, note_date_col: str, @@ -20,10 +17,7 @@ def generate_note( ): if mode == "step": return _generate_note_step( -<<<<<<< HEAD -======= generator=generator, ->>>>>>> main visit_care_site=visit_care_site, note_type=note_type, note_date_col=note_date_col, @@ -34,14 +28,9 @@ def generate_note( date_col=date_col, ) -<<<<<<< HEAD - elif mode == "rect": - return _generate_note_rect( -======= if mode == "rect": return _generate_note_rect( generator=generator, ->>>>>>> main visit_care_site=visit_care_site, note_type=note_type, note_date_col=note_date_col, @@ -54,10 +43,7 @@ def generate_note( def _generate_note_step( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main visit_care_site, note_type, care_site_id, @@ -68,15 +54,9 @@ def _generate_note_step( t0_visit, ): t_end = visit_care_site[date_col].max() -<<<<<<< HEAD - t0 = np.random.randint(t0_visit, t_end) - c_before = np.random.uniform(0, 0.2) - c_after = np.random.uniform(0.8, 1) -======= t0 = generator.integers(t0_visit, t_end) c_before = generator.uniform(0, 0.2) c_after = generator.uniform(0.8, 1) ->>>>>>> main note_before_t0_visit = ( visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] .sample(frac=c_before) @@ -111,10 +91,7 @@ def _generate_note_step( def _generate_note_rect( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main visit_care_site, note_type, care_site_id, @@ -125,17 +102,10 @@ def _generate_note_rect( t0_visit, ): t1_visit = visit_care_site["t_1_min"].max() -<<<<<<< HEAD - t0 = np.random.randint(t0_visit, t0_visit + (t1_visit - t0_visit) / 3) - t1 = np.random.randint(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) - c_out = np.random.uniform(0, 0.1) - c_in = np.random.uniform(0.8, 1) -======= t0 = generator.integers(t0_visit, t0_visit + (t1_visit - t0_visit) / 3) t1 = generator.integers(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) c_out = generator.uniform(0, 0.1) c_in = generator.uniform(0.8, 1) ->>>>>>> main note_before_t0 = ( visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 53fbd38d..775f4a86 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -126,10 +126,6 @@ ("Initial", 0.02), ], ) -<<<<<<< HEAD - -======= ->>>>>>> main def add_other_columns( @@ -176,13 +172,6 @@ class SyntheticData: def __post_init__(self): if self.module not in ["pandas", "koalas"]: -<<<<<<< HEAD - raise ValueError( - f"Unknown module {self.mode}, options are ('pandas', 'koalas')" - ) - if self.mode not in ["step", "rect"]: - raise ValueError(f"Unknown mode {self.mode}, options are ('step', 'rect')") -======= raise AttributeError( f"Unknown module {self.mode}, options are ('pandas', 'koalas')" ) @@ -190,7 +179,6 @@ def __post_init__(self): raise AttributeError( f"Unknown mode {self.mode}, options are ('step', 'rect')" ) ->>>>>>> main def generate(self): if self.seed: @@ -234,12 +222,8 @@ def _generate_care_site_tables(self): care_site.care_site_type_source_value == "Unité de consultation (UC)" ][["care_site_id"]].reset_index(drop=True) uc_care_site = add_other_columns( -<<<<<<< HEAD - uc_care_site, -======= generator=self.generator, table=uc_care_site, ->>>>>>> main other_columns=dict( place_of_service_source_value=[ ("CARDIO", 0.2), @@ -252,12 +236,8 @@ def _generate_care_site_tables(self): care_site.care_site_type_source_value == "Unité d’hébergement (UH)" ][["care_site_id"]].reset_index(drop=True) uh_care_site = add_other_columns( -<<<<<<< HEAD - uh_care_site, -======= generator=self.generator, table=uh_care_site, ->>>>>>> main other_columns=dict( place_of_service_source_value=[ ("REA ADULTE", 0.5), @@ -268,11 +248,7 @@ def _generate_care_site_tables(self): care_site = care_site.merge( pd.concat([uc_care_site, uh_care_site]), on="care_site_id", how="left" ) -<<<<<<< HEAD - care_site.fillna("Non Renseigné", inplace=True) -======= care_site = care_site.fillna("Non renseigné") ->>>>>>> main hospital_ids = list( care_site[care_site.care_site_type_source_value == "Hôpital"].care_site_id ) @@ -283,17 +259,10 @@ def _generate_visit_occurrence(self, hospital_ids): t_min = self.t_min.timestamp() t_max = self.t_max.timestamp() for care_site_id in hospital_ids: -<<<<<<< HEAD - t_start = t_min + np.random.randint(0, (t_max - t_min) / 20) - t_end = t_max - np.random.randint(0, (t_max - t_min) / 20) - n_visits = np.random.normal(self.mean_visit, self.mean_visit / 5) - increase_time = np.random.randint( -======= t_start = t_min + self.generator.integers(0, (t_max - t_min) / 20) t_end = t_max - self.generator.integers(0, (t_max - t_min) / 20) n_visits = self.generator.normal(self.mean_visit, self.mean_visit / 5) increase_time = self.generator.integers( ->>>>>>> main (t_end - t_start) / 100, (t_end - t_start) / 10 ) increase_ratio = self.generator.uniform(150, 200) @@ -316,13 +285,9 @@ def _generate_visit_occurrence(self, hospital_ids): self.date_col ] + pd.to_timedelta( pd.Series( -<<<<<<< HEAD - np.random.choice([None] * 50 + list(range(100)), len(visit_occurrence)) -======= self.generator.choice( [None] * 50 + list(range(100)), len(visit_occurrence) ) ->>>>>>> main ), unit="days", ) @@ -334,11 +299,6 @@ def _generate_visit_occurrence(self, hospital_ids): other_columns=self.other_visit_columns, ) -<<<<<<< HEAD - return visit_occurrence - -======= ->>>>>>> main def _generate_visit_detail(self, visit_occurrence, care_site): t_min = self.t_min.timestamp() t_max = self.t_max.timestamp() @@ -412,42 +372,6 @@ def _generate_visit_detail(self, visit_occurrence, care_site): return pd.concat([uc_detail, uh_detail, uf_detail, rum_detail]).drop( columns=care_site_col ) -<<<<<<< HEAD - visit_detail = visit_detail.merge(care_site, on="care_site_id") - uc_detail = ( - visit_detail[ - visit_detail.care_site_type_source_value == "Unité de consultation (UC)" - ] - .copy() - .reset_index(drop=True) - ) - uc_detail["visit_detail_type_source_value"] = "PASS UC" - uh_detail = ( - visit_detail[ - visit_detail.care_site_type_source_value == "Unité d’hébergement (UH)" - ] - .copy() - .reset_index(drop=True) - ) - uh_detail["visit_detail_type_source_value"] = "PASS UH" - uf_detail = ( - visit_detail[ - visit_detail.care_site_type_source_value == "Unité Fonctionnelle (UF)" - ] - .copy() - .reset_index(drop=True) - ) - uf_detail["visit_detail_type_source_value"] = "PASS UF" - rum_detail = uf_detail.copy() - rum_detail["visit_detail_type_source_value"] = "RUM" - care_site_col = list(care_site.columns) - care_site_col.remove("care_site_id") - visit_detail = pd.concat([uc_detail, uh_detail, uf_detail, rum_detail]).drop( - columns=care_site_col - ) - return visit_detail -======= ->>>>>>> main def _generate_condition_occurrence(self, visit_detail): visit_detail = visit_detail[ @@ -514,11 +438,7 @@ def _generate_note( ) for note_type in note_types: params["note_type"] = note_type -<<<<<<< HEAD - note = generate_note(visit_care_site, **params) -======= note = generate_note(visit_care_site=visit_care_site, **params) ->>>>>>> main notes.append(note) notes = pd.concat(notes).reset_index(drop=True) diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index 00710e3e..05d4980d 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -3,10 +3,7 @@ def generate_events_before_t0( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -22,20 +19,13 @@ def generate_events_before_t0( ) return pd.to_datetime( -<<<<<<< HEAD - pd.Series(np.random.randint(t_start, t0_before, n_before)), -======= pd.Series(generator.integers(t_start, t0_before, n_before)), ->>>>>>> main unit="s", ) def generate_events_after_t0( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -52,20 +42,13 @@ def generate_events_after_t0( ) return pd.to_datetime( -<<<<<<< HEAD - pd.Series(np.random.randint(t0_after, t_end, n_after)), -======= pd.Series(generator.integers(t0_after, t_end, n_after)), ->>>>>>> main unit="s", ) def generate_events_around_t0( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -84,11 +67,7 @@ def generate_events_around_t0( return pd.to_datetime( pd.Series( -<<<<<<< HEAD - np.random.triangular( -======= generator.triangular( ->>>>>>> main left=t0_before, right=t0_after, mode=t0_after, size=n_middle ) ), @@ -97,10 +76,7 @@ def generate_events_around_t0( def generate_events_around_t1( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -119,11 +95,7 @@ def generate_events_around_t1( return pd.to_datetime( pd.Series( -<<<<<<< HEAD - np.random.triangular( -======= generator.triangular( ->>>>>>> main left=t1_before, right=t1_after, mode=t1_before, size=n_middle ) ), @@ -132,10 +104,7 @@ def generate_events_around_t1( def generate_events_after_t1( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -149,11 +118,7 @@ def generate_events_after_t1( ) return pd.to_datetime( -<<<<<<< HEAD - pd.Series(np.random.randint(t1_after, t_end, n_after)), -======= pd.Series(generator.integers(t1_after, t_end, n_after)), ->>>>>>> main unit="s", ) diff --git a/edsteva/io/synthetic/visit.py b/edsteva/io/synthetic/visit.py index ac0fcb71..1663fa63 100644 --- a/edsteva/io/synthetic/visit.py +++ b/edsteva/io/synthetic/visit.py @@ -12,10 +12,7 @@ def generate_stays( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -27,10 +24,7 @@ def generate_stays( ): if mode == "step": return _generate_stays_step( -<<<<<<< HEAD -======= generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, @@ -41,10 +35,7 @@ def generate_stays( ) if mode == "rect": return _generate_stays_rect( -<<<<<<< HEAD -======= generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, @@ -56,10 +47,7 @@ def generate_stays( def _generate_stays_step( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -68,14 +56,9 @@ def _generate_stays_step( care_site_id: int, date_col: str, ): -<<<<<<< HEAD - t0 = np.random.randint(t_start + increase_time, t_end - increase_time) - params = dict( -======= t0 = generator.integers(t_start + increase_time, t_end - increase_time) params = dict( generator=generator, ->>>>>>> main t_start=t_start, t_end=t_end, n_events=n_events, @@ -100,10 +83,7 @@ def _generate_stays_step( def _generate_stays_rect( -<<<<<<< HEAD -======= generator: np.random.Generator, ->>>>>>> main t_start: int, t_end: int, n_events: int, @@ -112,53 +92,6 @@ def _generate_stays_rect( care_site_id: int, date_col: str, ): -<<<<<<< HEAD - t0 = np.random.randint( - t_start + increase_time, (t_end + t_start) / 2 - increase_time - ) - t1 = np.random.randint((t_end + t_start) / 2 + increase_time, t_end - increase_time) - t0_params = dict( - t_start=t_start, - t_end=t1 - increase_time / 2, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, - ) - before_t0 = generate_events_before_t0(**t0_params) - around_t0 = generate_events_around_t0(**t0_params) - # Raise n_visit to enforce a rectangle shape - between_t0_t1 = generate_events_after_t0(**t0_params) - t1_params = dict( - t_start=t_start, - t_end=t_end, - n_events=n_events, - t1=t1, - increase_time=increase_time, - increase_ratio=increase_ratio, - ) - around_t1 = generate_events_around_t1(**t1_params) - after_t1 = generate_events_after_t1(**t1_params) - - df = pd.concat( - [ - before_t0, - around_t0, - between_t0_t1, - around_t1, - after_t1, - ] - ).to_frame() - - df.columns = [date_col] - df["care_site_id"] = care_site_id - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - df["t_1_min"] = t1 - increase_time / 2 - df["t_1_max"] = t1 + increase_time / 2 - logger.debug("Generate visit occurrences deploying as rectangle function") - -======= t0 = generator.integers( t_start + increase_time, (t_end + t_start) / 2 - increase_time ) @@ -208,5 +141,4 @@ def _generate_stays_rect( df["t_1_max"] = t1 + increase_time / 2 logger.debug("Generate visit occurrences deploying as rectangle function") ->>>>>>> main return df diff --git a/edsteva/models/base.py b/edsteva/models/base.py index 0bbdddb9..bff98d20 100644 --- a/edsteva/models/base.py +++ b/edsteva/models/base.py @@ -313,15 +313,7 @@ def _compute_metrics( predictor=predictor, estimates=estimates, index=index ) ) -<<<<<<< HEAD - metrics_df = reduce( - lambda left, right: pd.merge(left, right, on=index), metrics_df - ) - - return metrics_df -======= return reduce(lambda left, right: left.merge(right, on=index), metrics_df) ->>>>>>> main def is_predictable_probe( self, diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index dff76bfa..bb3a99fb 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -55,15 +55,9 @@ def loss_minimization( min_rect_month_width : int, optional Min number of months between $t_0$ and $t_1$. """ -<<<<<<< HEAD - check_columns(df=predictor, required_columns=index + [x_col, y_col, n_col]) + check_columns(df=predictor, required_columns=[*index, x_col, y_col, n_col]) predictor = predictor.sort_values(x_col) - cols = index + [x_col, y_col, n_col] -======= - check_columns(df=predictor, required_columns=[*index, x_col, y_col]) - predictor = predictor.sort_values(x_col) - cols = [*index, x_col, y_col] ->>>>>>> main + cols = [*index, x_col, y_col, n_col] iter = predictor[cols].groupby(index) results = [] for partition, group in tqdm.tqdm(iter): diff --git a/edsteva/models/rectangle_function/rectangle_function.py b/edsteva/models/rectangle_function/rectangle_function.py index 6cd9a075..219dcfd2 100644 --- a/edsteva/models/rectangle_function/rectangle_function.py +++ b/edsteva/models/rectangle_function/rectangle_function.py @@ -90,13 +90,7 @@ def fit_process( Variable from which data is grouped **EXAMPLE**: `["care_site_level", "stay_type", "note_type", "care_site_id"]` """ -<<<<<<< HEAD - estimates = algos.get(self._algo)(predictor=predictor, index=index, **kwargs) - - return estimates -======= return algos.get(self._algo)(predictor=predictor, index=index, **kwargs) ->>>>>>> main def predict_process( self, diff --git a/edsteva/models/rectangle_function/viz_configs/defaults.py b/edsteva/models/rectangle_function/viz_configs/defaults.py index 149f3c69..128ee3d9 100644 --- a/edsteva/models/rectangle_function/viz_configs/defaults.py +++ b/edsteva/models/rectangle_function/viz_configs/defaults.py @@ -11,19 +11,11 @@ def get_c_0_min_selection(predictor: DataFrame): step=scale_it(predictor.c_0.max()) / 100, name="c₀ min: ", ) -<<<<<<< HEAD - c_0_min_selection = alt.selection_single( - name="c_0_min", - fields=["c_0_min"], - bind=c_0_min_slider, - init={"c_0_min": 0}, -======= c_0_min_selection = alt.selection_point( name="c_0_min", fields=["c_0_min"], bind=c_0_min_slider, value=0, ->>>>>>> main ) c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min return c_0_min_selection, c_0_min_filter @@ -36,19 +28,11 @@ def get_error_max_selection(predictor: DataFrame): step=scale_it(predictor.error.max()) / 100, name="error max: ", ) -<<<<<<< HEAD - error_max_selection = alt.selection_single( - name="error_max", - fields=["error_max"], - bind=error_max_slider, - init={"error_max": round_up(predictor.error.max(), 2)}, -======= error_max_selection = alt.selection_point( name="error_max", fields=["error_max"], bind=error_max_slider, value=round_up(predictor.error.max(), 2), ->>>>>>> main ) error_max_filter = alt.datum.error <= error_max_selection.error_max return error_max_selection, error_max_filter @@ -59,19 +43,11 @@ def get_t_0_selection(predictor: DataFrame): input="t_0", name="t₀ max: ", ) -<<<<<<< HEAD - t_0_selection = alt.selection_single( - name="t_0", - fields=["t_0"], - bind=t_0_slider, - init={"t_0": predictor.t_0.astype(str).max()}, -======= t_0_selection = alt.selection_point( name="t_0", fields=["t_0"], bind=t_0_slider, value=predictor.t_0.astype(str).max(), ->>>>>>> main ) t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 return t_0_selection, t_0_min_filter @@ -82,19 +58,11 @@ def get_t_1_selection(predictor: DataFrame): input="t_1", name="t₁ min: ", ) -<<<<<<< HEAD - t_1_selection = alt.selection_single( - name="t_1", - fields=["t_1"], - bind=t_1_slider, - init={"t_1": predictor.t_1.min()}, -======= t_1_selection = alt.selection_point( name="t_1", fields=["t_1"], bind=t_1_slider, value=predictor.t_1.astype(str).min(), ->>>>>>> main ) t_1_min_filter = alt.datum.t_1 >= t_1_selection.t_1 return t_1_selection, t_1_min_filter @@ -172,14 +140,11 @@ def get_t_1_selection(predictor: DataFrame): orient="left", ), ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("min(c_hat):Q", title="c₀"), ], ->>>>>>> main ), aggregates=[ dict( diff --git a/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py b/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py index 813c78e2..9228e8eb 100644 --- a/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py +++ b/edsteva/models/rectangle_function/viz_configs/normalized_probe_dashboard.py @@ -17,11 +17,7 @@ def get_normalized_probe_dashboard_config(self, predictor: DataFrame): t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) t_1_selection, t_1_min_filter = get_t_1_selection(predictor=predictor) error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main estimates_selections=[ t_0_selection, t_1_selection, @@ -39,7 +35,3 @@ def get_normalized_probe_dashboard_config(self, predictor: DataFrame): extra_horizontal_bar_charts=[horizontal_min_c0, horizontal_max_error], extra_vertical_bar_charts=[], ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py b/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py index d9e295d5..c297c7c7 100644 --- a/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py +++ b/edsteva/models/rectangle_function/viz_configs/normalized_probe_plot.py @@ -15,11 +15,7 @@ def get_normalized_probe_plot_config(self, predictor: DataFrame): t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) t_1_selection, t_1_min_filter = get_t_1_selection(predictor=predictor) error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main estimates_selections=[ t_0_selection, t_1_selection, @@ -35,7 +31,3 @@ def get_normalized_probe_plot_config(self, predictor: DataFrame): probe_line=normalized_probe_line, model_line=normalized_model_line, ) -<<<<<<< HEAD - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py b/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py index 4c9da487..d632b8b9 100644 --- a/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py +++ b/edsteva/models/rectangle_function/viz_configs/probe_dashboard.py @@ -2,17 +2,9 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main probe_line=probe_line, model_line=model_line, extra_horizontal_bar_charts=[horizontal_min_c0], extra_vertical_bar_charts=[], ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/models/rectangle_function/viz_configs/probe_plot.py b/edsteva/models/rectangle_function/viz_configs/probe_plot.py index 9770e113..11052207 100644 --- a/edsteva/models/rectangle_function/viz_configs/probe_plot.py +++ b/edsteva/models/rectangle_function/viz_configs/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - probe_line=probe_line, - model_line=model_line, - ) - return probe_plot_config -======= return dict( probe_line=probe_line, model_line=model_line, ) ->>>>>>> main diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index f340010d..2f6daff0 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -51,15 +51,9 @@ def loss_minimization( loss_function : Callable, optional The loss function $\mathcal{L}$ """ -<<<<<<< HEAD - check_columns(df=predictor, required_columns=index + [x_col, y_col, n_col]) + check_columns(df=predictor, required_columns=[*index, x_col, y_col, n_col]) predictor = predictor.sort_values(x_col) - cols = index + [x_col, y_col, n_col] -======= - check_columns(df=predictor, required_columns=[*index, x_col, y_col]) - predictor = predictor.sort_values(x_col) - cols = [*index, x_col, y_col] ->>>>>>> main + cols = [*index, x_col, y_col, n_col] iter = predictor[cols].groupby(index) results = [] for partition, group in iter: diff --git a/edsteva/models/step_function/viz_configs/defaults.py b/edsteva/models/step_function/viz_configs/defaults.py index 05d199e0..4fc07cb9 100644 --- a/edsteva/models/step_function/viz_configs/defaults.py +++ b/edsteva/models/step_function/viz_configs/defaults.py @@ -11,19 +11,11 @@ def get_c_0_min_selection(predictor: DataFrame): step=scale_it(predictor.c_0.max()) / 100, name="c₀ min: ", ) -<<<<<<< HEAD - c_0_min_selection = alt.selection_single( - name="c_0_min", - fields=["c_0_min"], - bind=c_0_min_slider, - init={"c_0_min": 0}, -======= c_0_min_selection = alt.selection_point( name="c_0_min", fields=["c_0_min"], bind=c_0_min_slider, value=0, ->>>>>>> main ) c_0_min_filter = alt.datum.c_0 >= c_0_min_selection.c_0_min return c_0_min_selection, c_0_min_filter @@ -36,19 +28,11 @@ def get_error_max_selection(predictor: DataFrame): step=scale_it(predictor.error.max()) / 100, name="error max: ", ) -<<<<<<< HEAD - error_max_selection = alt.selection_single( - name="error_max", - fields=["error_max"], - bind=error_max_slider, - init={"error_max": round_up(predictor.error.max(), 2)}, -======= error_max_selection = alt.selection_point( name="error_max", fields=["error_max"], bind=error_max_slider, value=round_up(predictor.error.max(), 2), ->>>>>>> main ) error_max_filter = alt.datum.error <= error_max_selection.error_max return error_max_selection, error_max_filter @@ -59,19 +43,11 @@ def get_t_0_selection(predictor: DataFrame): input="t_0", name="t₀ max: ", ) -<<<<<<< HEAD - t_0_selection = alt.selection_single( - name="t_0", - fields=["t_0"], - bind=t_0_slider, - init={"t_0": predictor.t_0.astype(str).max()}, -======= t_0_selection = alt.selection_point( name="t_0", fields=["t_0"], bind=t_0_slider, value=predictor.t_0.astype(str).max(), ->>>>>>> main ) t_0_min_filter = alt.datum.t_0 <= t_0_selection.t_0 return t_0_selection, t_0_min_filter @@ -149,14 +125,11 @@ def get_t_0_selection(predictor: DataFrame): orient="left", ), ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("min(c_hat):Q", title="c₀"), ], ->>>>>>> main ), aggregates=[ dict( diff --git a/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py b/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py index 60ea11c5..02f094d0 100644 --- a/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py +++ b/edsteva/models/step_function/viz_configs/normalized_probe_dashboard.py @@ -15,11 +15,7 @@ def get_normalized_probe_dashboard_config(self, predictor: DataFrame): c_0_min_selection, c_0_min_filter = get_c_0_min_selection(predictor=predictor) t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main estimates_selections=[c_0_min_selection, t_0_selection, error_max_selection], estimates_filters=[c_0_min_filter, t_0_min_filter, error_max_filter], probe_line=normalized_probe_line, @@ -27,7 +23,3 @@ def get_normalized_probe_dashboard_config(self, predictor: DataFrame): extra_horizontal_bar_charts=[horizontal_min_c0, horizontal_max_error], extra_vertical_bar_charts=[], ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/models/step_function/viz_configs/normalized_probe_plot.py b/edsteva/models/step_function/viz_configs/normalized_probe_plot.py index c1b5fbc8..4ec6d303 100644 --- a/edsteva/models/step_function/viz_configs/normalized_probe_plot.py +++ b/edsteva/models/step_function/viz_configs/normalized_probe_plot.py @@ -13,17 +13,9 @@ def get_normalized_probe_plot_config(self, predictor: DataFrame): c_0_min_selection, c_0_min_filter = get_c_0_min_selection(predictor=predictor) t_0_selection, t_0_min_filter = get_t_0_selection(predictor=predictor) error_max_selection, error_max_filter = get_error_max_selection(predictor=predictor) -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main estimates_selections=[c_0_min_selection, t_0_selection, error_max_selection], estimates_filters=[c_0_min_filter, t_0_min_filter, error_max_filter], probe_line=normalized_probe_line, model_line=normalized_model_line, ) -<<<<<<< HEAD - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/models/step_function/viz_configs/probe_dashboard.py b/edsteva/models/step_function/viz_configs/probe_dashboard.py index 4c9da487..d632b8b9 100644 --- a/edsteva/models/step_function/viz_configs/probe_dashboard.py +++ b/edsteva/models/step_function/viz_configs/probe_dashboard.py @@ -2,17 +2,9 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main probe_line=probe_line, model_line=model_line, extra_horizontal_bar_charts=[horizontal_min_c0], extra_vertical_bar_charts=[], ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/models/step_function/viz_configs/probe_plot.py b/edsteva/models/step_function/viz_configs/probe_plot.py index 9770e113..11052207 100644 --- a/edsteva/models/step_function/viz_configs/probe_plot.py +++ b/edsteva/models/step_function/viz_configs/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - probe_line=probe_line, - model_line=model_line, - ) - return probe_plot_config -======= return dict( probe_line=probe_line, model_line=model_line, ) ->>>>>>> main diff --git a/edsteva/probes/base.py b/edsteva/probes/base.py index 484254a0..bc92b656 100644 --- a/edsteva/probes/base.py +++ b/edsteva/probes/base.py @@ -34,11 +34,7 @@ class BaseProbe(metaclass=ABCMeta): It describes the care site structure (cf. [``prepare_care_site_relationship()``][edsteva.probes.utils.prepare_df.prepare_care_site_relationship]) """ -<<<<<<< HEAD - _schema = ["care_site_level", "care_site_id", "date", "c"] -======= _schema: ClassVar[List[str]] = ["care_site_level", "care_site_id", "date", "c"] ->>>>>>> main def __init__( self, diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 4d197dec..75ef7d74 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -55,19 +55,13 @@ def __init__( "concepts_set", "stay_type", "length_of_stay", -<<<<<<< HEAD "age_range", -======= ->>>>>>> main "care_site_id", "care_site_specialty", "care_sites_set", "specialties_set", -<<<<<<< HEAD "pmsi_type", "provenance_source", -======= ->>>>>>> main ] + [ "{}_concept_code".format(terminology) for terminology in standard_terminologies @@ -101,11 +95,7 @@ def compute_process( "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", "Bicarbonate": "A0422|H9622|C6408|F4161", }, -<<<<<<< HEAD - stay_durations: List[float] = [1], -======= length_of_stays: List[float] = [1], ->>>>>>> main source_terminologies: Dict[str, str] = { "ANALYSES_LABORATOIRE": r"Analyses Laboratoire", "GLIMS_ANABIO": r"GLIMS.{0,20}Anabio", @@ -119,12 +109,9 @@ def compute_process( ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], -<<<<<<< HEAD provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, -======= ->>>>>>> main **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -157,11 +144,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` concepts_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"Créatinine": "E3180|G1974|J1002|A7813|A0094|G1975|J1172|G7834|F9409|F9410|C0697|H4038|F2621", "Leucocytes": r"A0174|K3232|H6740|E4358|C9784|C8824|E6953"}` -<<<<<<< HEAD - stay_durations : List[float], optional -======= length_of_stays : List[float], optional ->>>>>>> main **EXAMPLE**: `[1, 30]` source_terminologies : Dict[str, str], optional Dictionary of regex used to detect terminology in the column `vocabulary_id`. @@ -169,39 +152,27 @@ def compute_process( mapping : List[Tuple[str, str, str]], optional List of values to filter in the column `relationship_id` in order to map between 2 terminologies. **EXAMPLE**: `[("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to")]` -<<<<<<< HEAD pmsi_type : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", MCO_PSY" : "MCO|Psychiatrie","MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` + **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` age_list : List[int], optional **EXAMPLE**: `[18, 64]` """ - if specialties_sets is None and "specialties_set" in self._index: - self._index.remove("specialties_set") - if care_sites_sets is None and "care_sites_set" in self._index: - self._index.remove("care_sites_set") - if age_list is None and "age_range" in self._index: - self._index.remove("age_range") -======= - """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") if length_of_stays is None and "length_of_stay" in self._index: self._index.remove("length_of_stay") + if age_list is None and "age_range" in self._index: + self._index.remove("age_range") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") ->>>>>>> main if concepts_sets is None and "concepts_set" in self._index: self._index.remove("concepts_set") else: for terminology in self._standard_terminologies: if "{}_concept_code".format(terminology) in self._index: self._index.remove("{}_concept_code".format(terminology)) -<<<<<<< HEAD -======= - ->>>>>>> main return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -217,18 +188,12 @@ def compute_process( care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, concepts_sets=concepts_sets, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, source_terminologies=source_terminologies, mapping=mapping, provenance_source=provenance_source, pmsi_type=pmsi_type, age_list=age_list, -======= - length_of_stays=length_of_stays, - source_terminologies=source_terminologies, - mapping=mapping, ->>>>>>> main **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 83cd8d93..5de7ac96 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -8,10 +8,7 @@ prepare_biology_relationship, prepare_care_site, prepare_measurement, -<<<<<<< HEAD prepare_person, -======= ->>>>>>> main prepare_visit_occurrence, ) from edsteva.probes.utils.utils import ( @@ -40,18 +37,12 @@ def compute_completeness_predictor_per_measurement( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], -<<<<<<< HEAD - stay_durations: List[float], + length_of_stays: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= - length_of_stays: List[float], - source_terminologies: Dict[str, str], - mapping: List[Tuple[str, str, str]], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -67,16 +58,12 @@ def compute_completeness_predictor_per_measurement( self._metrics = ["c", "n_measurement"] check_tables( data=data, -<<<<<<< HEAD required_tables=[ "measurement", "concept", "concept_relationship", "visit_occurrence", ], -======= - required_tables=["measurement", "concept", "concept_relationship"], ->>>>>>> main ) standard_terminologies = self._standard_terminologies biology_relationship = prepare_biology_relationship( @@ -89,11 +76,8 @@ def compute_completeness_predictor_per_measurement( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] -<<<<<<< HEAD person = prepare_person(data) if age_list else None -======= ->>>>>>> main measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, @@ -111,15 +95,11 @@ def compute_completeness_predictor_per_measurement( start_date=None, end_date=None, stay_types=stay_types, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, person=person, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( @@ -158,11 +138,7 @@ def compute_completeness( self, biology_predictor: DataFrame, ): -<<<<<<< HEAD - partition_cols = self._index.copy() + ["date"] -======= partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_measurement = ( biology_predictor.groupby( partition_cols, @@ -200,13 +176,7 @@ def compute_completeness( biology_predictor["max_n_measurement"] == 0, biology_predictor["n_measurement"] / biology_predictor["max_n_measurement"], ) -<<<<<<< HEAD - biology_predictor = biology_predictor.drop(columns="max_n_measurement") - - return biology_predictor -======= return biology_predictor.drop(columns="max_n_measurement") ->>>>>>> main def get_hospital_measurements( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 56e8edc6..a0b932b3 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -8,10 +8,7 @@ prepare_biology_relationship, prepare_care_site, prepare_measurement, -<<<<<<< HEAD prepare_person, -======= ->>>>>>> main prepare_visit_occurrence, ) from edsteva.probes.utils.utils import ( @@ -40,18 +37,12 @@ def compute_completeness_predictor_per_visit( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], concepts_sets: Union[str, Dict[str, str]], -<<<<<<< HEAD - stay_durations: List[float], + length_of_stays: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= - length_of_stays: List[float], - source_terminologies: Dict[str, str], - mapping: List[Tuple[str, str, str]], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -67,16 +58,12 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_measurement"] check_tables( data=data, -<<<<<<< HEAD required_tables=[ "measurement", "concept", "concept_relationship", "visit_occurrence", ], -======= - required_tables=["measurement", "concept", "concept_relationship"], ->>>>>>> main ) standard_terminologies = self._standard_terminologies biology_relationship = prepare_biology_relationship( @@ -89,25 +76,18 @@ def compute_completeness_predictor_per_visit( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] -<<<<<<< HEAD person = prepare_person(data) if age_list else None -======= ->>>>>>> main visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, person=person, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main ) measurement = prepare_measurement( data=data, @@ -148,10 +128,6 @@ def compute_completeness_predictor_per_visit( predictor_by_level=biology_predictor_by_level, care_site_levels=care_site_levels, ) -<<<<<<< HEAD -======= - ->>>>>>> main return compute_completeness(self, biology_predictor) @@ -160,12 +136,7 @@ def compute_completeness( biology_predictor: DataFrame, ): # Visit with measurement -<<<<<<< HEAD - partition_cols = self._index.copy() + ["date"] - print(partition_cols) -======= partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_visit_with_measurement = ( biology_predictor.groupby( partition_cols, @@ -185,11 +156,6 @@ def compute_completeness( predictor=n_visit_with_measurement, partition_cols=partition_cols, ) -<<<<<<< HEAD - print("Done.") -======= - ->>>>>>> main # Visit total biology_columns = ["concepts_set"] + [ "{}_concept_code".format(terminology) @@ -234,11 +200,7 @@ def get_hospital_visit( ): hospital_measurement = measurement[ set(measurement.columns).intersection( -<<<<<<< HEAD - set(["visit_occurrence_id"] + self._index) -======= set(["visit_occurrence_id", *self._index]) ->>>>>>> main ) ].drop_duplicates() hospital_measurement["has_measurement"] = True diff --git a/edsteva/probes/biology/viz_configs/n_measurement/defaults.py b/edsteva/probes/biology/viz_configs/n_measurement/defaults.py index 9177dcbe..c6e0d069 100644 --- a/edsteva/probes/biology/viz_configs/n_measurement/defaults.py +++ b/edsteva/probes/biology/viz_configs/n_measurement/defaults.py @@ -56,14 +56,11 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, ] + [ @@ -112,8 +109,6 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): sort={"field": "n_measurement", "op": "sum", "order": "descending"}, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), @@ -121,7 +116,6 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): "sum(n_measurement):Q", title="Number of measurements", format="," ), ], ->>>>>>> main ), properties=dict( height=300, @@ -130,25 +124,6 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_measurement="sum(n_measurement)", - groupby=["value", "date"], - ), - dict( - max_measurement="max(sum_measurement)", - groupby=["value"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( diff --git a/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py index b0a9cec1..84da27f4 100644 --- a/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py +++ b/edsteva/probes/biology/viz_configs/n_measurement/estimates_densities_plot.py @@ -5,17 +5,8 @@ def get_estimates_densities_plot_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py index 037c6fcd..ec25f1bc 100644 --- a/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_dashboard.py @@ -12,11 +12,7 @@ def get_normalized_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -24,8 +20,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py +++ b/edsteva/probes/biology/viz_configs/n_measurement/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py b/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py index 4a7581de..d3c8729e 100644 --- a/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/n_measurement/probe_dashboard.py @@ -11,18 +11,10 @@ def get_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py b/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py +++ b/edsteva/probes/biology/viz_configs/n_measurement/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_measurement/defaults.py b/edsteva/probes/biology/viz_configs/per_measurement/defaults.py index ce33e9c0..c8279aed 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/defaults.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/defaults.py @@ -56,14 +56,11 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, ] + [ @@ -125,14 +122,11 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): sort={"field": "n_measurement", "op": "sum", "order": "descending"}, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, @@ -141,25 +135,6 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_measurement="sum(n_measurement)", - groupby=["value", "date"], - ), - dict( - max_measurement="max(sum_measurement)", - groupby=["value"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_measurement / alt.datum.max_measurement) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( diff --git a/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py index b0a9cec1..84da27f4 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/estimates_densities_plot.py @@ -5,17 +5,8 @@ def get_estimates_densities_plot_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py index 037c6fcd..ec25f1bc 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_dashboard.py @@ -12,11 +12,7 @@ def get_normalized_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -24,8 +20,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py index 4a7581de..d3c8729e 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/probe_dashboard.py @@ -11,18 +11,10 @@ def get_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py b/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py +++ b/edsteva/probes/biology/viz_configs/per_measurement/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_visit/defaults.py b/edsteva/probes/biology/viz_configs/per_visit/defaults.py index 1381cc3f..2f0ec107 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/biology/viz_configs/per_visit/defaults.py @@ -56,14 +56,11 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main {"title": "Concepts-set", "field": "concepts_set", "sort": "-x"}, ] + [ @@ -125,14 +122,11 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): sort={"field": "n_visit", "op": "sum", "order": "descending"}, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, @@ -141,25 +135,6 @@ def get_horizontal_bar_charts(standard_terminologies: List[str]): ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_measurement="sum(n_visit_with_measurement)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_visit_with_measurement / alt.datum.sum_visit) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( diff --git a/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py index b0a9cec1..84da27f4 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py +++ b/edsteva/probes/biology/viz_configs/per_visit/estimates_densities_plot.py @@ -5,17 +5,8 @@ def get_estimates_densities_plot_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py index 037c6fcd..ec25f1bc 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_dashboard.py @@ -12,11 +12,7 @@ def get_normalized_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -24,8 +20,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py +++ b/edsteva/probes/biology/viz_configs/per_visit/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py index 4a7581de..d3c8729e 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py +++ b/edsteva/probes/biology/viz_configs/per_visit/probe_dashboard.py @@ -11,18 +11,10 @@ def get_probe_dashboard_config(self): horizontal_bar_charts = get_horizontal_bar_charts( standard_terminologies=self._standard_terminologies.copy() ) -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py b/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py +++ b/edsteva/probes/biology/viz_configs/per_visit/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 6f4799ec..e6d261b8 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -8,10 +8,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_care_site, prepare_condition_occurrence, -<<<<<<< HEAD prepare_person, -======= ->>>>>>> main prepare_visit_detail, prepare_visit_occurrence, ) @@ -43,14 +40,10 @@ def compute_completeness_predictor_per_condition( diag_types: Union[str, Dict[str, str]], condition_types: Union[str, Dict[str, str]], source_systems: List[str], -<<<<<<< HEAD - stay_durations: List[float], + length_of_stays: List[float], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= - length_of_stays: List[float], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -72,23 +65,16 @@ def compute_completeness_predictor_per_condition( ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") -<<<<<<< HEAD person = prepare_person(data) if age_list else None visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, person=person, age_list=age_list, -======= - visit_occurrence = prepare_visit_occurrence( - data=data, - stay_types=stay_types, - length_of_stays=length_of_stays, ->>>>>>> main ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( @@ -155,11 +141,7 @@ def compute_completeness( self, condition_predictor: DataFrame, ): -<<<<<<< HEAD - partition_cols = self._index.copy() + ["date"] -======= partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_condition = ( condition_predictor.groupby( @@ -198,13 +180,7 @@ def compute_completeness( condition_predictor["max_n_condition"] == 0, condition_predictor["n_condition"] / condition_predictor["max_n_condition"], ) -<<<<<<< HEAD - condition_predictor = condition_predictor.drop(columns="max_n_condition") - - return condition_predictor -======= return condition_predictor.drop(columns="max_n_condition") ->>>>>>> main def get_hospital_condition( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 98b37ec7..36ab7a55 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -8,10 +8,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_care_site, prepare_condition_occurrence, -<<<<<<< HEAD prepare_person, -======= ->>>>>>> main prepare_visit_detail, prepare_visit_occurrence, ) @@ -43,14 +40,10 @@ def compute_completeness_predictor_per_visit( diag_types: Union[str, Dict[str, str]], condition_types: Union[str, Dict[str, str]], source_systems: List[str], -<<<<<<< HEAD - stay_durations: List[float], + length_of_stays: List[float], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= - length_of_stays: List[float], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -72,25 +65,18 @@ def compute_completeness_predictor_per_visit( ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") -<<<<<<< HEAD person = prepare_person(data) if age_list else None -======= ->>>>>>> main visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, person=person, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main ) condition_occurrence = prepare_condition_occurrence( @@ -154,11 +140,7 @@ def compute_completeness( condition_predictor: DataFrame, ): # Visit with diagnosis -<<<<<<< HEAD - partition_cols = self._index.copy() + ["date"] -======= partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_visit_with_condition = ( condition_predictor.groupby( partition_cols, @@ -257,15 +239,11 @@ def get_uf_visit( condition_uf["has_condition"] = True visit_detail = visit_detail.merge( -<<<<<<< HEAD - visit_occurrence[["visit_occurrence_id", "stay_type", "length_of_stay"]], -======= visit_occurrence[ visit_occurrence.columns.intersection( set(["visit_occurrence_id", "length_of_stay", "stay_type"]) ) ], ->>>>>>> main on="visit_occurrence_id", ) uf_visit = visit_detail.merge( diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index 3b650d59..20e3c5a3 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -40,10 +40,7 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", -<<<<<<< HEAD "age_range", -======= ->>>>>>> main "diag_type", "condition_type", "source_system", @@ -51,11 +48,8 @@ def __init__( "care_site_specialty", "care_sites_set", "specialties_set", -<<<<<<< HEAD "pmsi_type", "provenance_source", -======= ->>>>>>> main ] super().__init__( completeness_predictor=completeness_predictor, @@ -79,14 +73,10 @@ def compute_process( specialties_sets: Union[str, Dict[str, str]] = None, condition_types: Union[str, Dict[str, str]] = None, source_systems: List[str] = ["ORBIS"], -<<<<<<< HEAD - stay_durations: List[float] = None, + length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, -======= - length_of_stays: List[float] = None, ->>>>>>> main **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -121,8 +111,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "Pulmonary_embolism": "I26"}` source_systems : List[str], optional **EXAMPLE**: `["AREM", "ORBIS"]` -<<<<<<< HEAD - stay_durations : List[float], optional + length_of_stays : List[float], optional **EXAMPLE**: `[1, 30]` pmsi_type : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` @@ -133,24 +122,14 @@ def compute_process( """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") -======= - length_of_stays : List[float], optional - **EXAMPLE**: `[1, 30]` - """ - if specialties_sets is None and "specialties_set" in self._index: - self._index.remove("specialties_set") if length_of_stays is None and "length_of_stay" in self._index: self._index.remove("length_of_stay") ->>>>>>> main if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") if condition_types is None and "condition_type" in self._index: self._index.remove("condition_type") -<<<<<<< HEAD if age_list is None and "age_range" in self._index: self._index.remove("age_range") -======= ->>>>>>> main return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -166,18 +145,12 @@ def compute_process( care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, diag_types=diag_types, -<<<<<<< HEAD - stay_durations=stay_durations, - condition_types=condition_types, source_systems=source_systems, provenance_source=provenance_source, - pmsi_type=pmsi_type, - age_list=age_list, -======= length_of_stays=length_of_stays, condition_types=condition_types, - source_systems=source_systems, ->>>>>>> main + pmsi_type=pmsi_type, + age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/condition/viz_configs/n_condition/defaults.py b/edsteva/probes/condition/viz_configs/n_condition/defaults.py index 6039b4c6..27dd146b 100644 --- a/edsteva/probes/condition/viz_configs/n_condition/defaults.py +++ b/edsteva/probes/condition/viz_configs/n_condition/defaults.py @@ -71,14 +71,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -101,25 +98,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_condition="sum(n_condition)", - groupby=["value", "date"], - ), - dict( - max_condition="max(sum_condition)", - groupby=["value"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_condition / alt.datum.max_condition) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -157,11 +135,7 @@ ), y=alt.Y( "sum(n_condition):Q", -<<<<<<< HEAD - title="Number of recorded diagnostics", -======= title="Number of recorded diagnostic codes", ->>>>>>> main axis=alt.Axis(grid=True), ), color=alt.Color( @@ -173,8 +147,6 @@ }, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), @@ -184,7 +156,6 @@ format=",", ), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py b/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py +++ b/edsteva/probes/condition/viz_configs/n_condition/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py +++ b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py +++ b/edsteva/probes/condition/viz_configs/n_condition/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py b/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py +++ b/edsteva/probes/condition/viz_configs/n_condition/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py b/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py +++ b/edsteva/probes/condition/viz_configs/n_condition/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_condition/defaults.py b/edsteva/probes/condition/viz_configs/per_condition/defaults.py index b73faebf..a73bd135 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/defaults.py +++ b/edsteva/probes/condition/viz_configs/per_condition/defaults.py @@ -71,14 +71,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -101,25 +98,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_condition="sum(n_condition)", - groupby=["value", "date"], - ), - dict( - max_condition="max(sum_condition)", - groupby=["value"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_condition / alt.datum.max_condition) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -182,14 +160,11 @@ }, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py b/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py +++ b/edsteva/probes/condition/viz_configs/per_condition/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py +++ b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py +++ b/edsteva/probes/condition/viz_configs/per_condition/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py +++ b/edsteva/probes/condition/viz_configs/per_condition/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py b/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py +++ b/edsteva/probes/condition/viz_configs/per_condition/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_visit/defaults.py b/edsteva/probes/condition/viz_configs/per_visit/defaults.py index 1e659203..c7d695b4 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/condition/viz_configs/per_visit/defaults.py @@ -71,14 +71,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -117,25 +114,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_condition="sum(n_visit_with_condition)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_visit_with_condition / alt.datum.sum_visit) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -198,14 +176,11 @@ }, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py +++ b/edsteva/probes/condition/viz_configs/per_visit/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py +++ b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py +++ b/edsteva/probes/condition/viz_configs/per_visit/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py +++ b/edsteva/probes/condition/viz_configs/per_visit/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py b/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py +++ b/edsteva/probes/condition/viz_configs/per_visit/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 8dfc75a7..29330192 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -9,10 +9,7 @@ prepare_care_site, prepare_note, prepare_note_care_site, -<<<<<<< HEAD prepare_person, -======= ->>>>>>> main prepare_visit_occurrence, ) from edsteva.probes.utils.utils import ( @@ -40,16 +37,11 @@ def compute_completeness_predictor_per_note( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], extra_data: Data, -<<<<<<< HEAD - stay_durations: List[float], note_types: Union[str, Dict[str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= length_of_stays: List[float], - note_types: Union[str, Dict[str, str]], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -72,24 +64,17 @@ def compute_completeness_predictor_per_note( note_types=note_types, ) -<<<<<<< HEAD person = prepare_person(data) if age_list else None visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, - stay_durations=stay_durations, - provenance_source=provenance_source, pmsi_type=pmsi_type, + length_of_stays=length_of_stays, + provenance_source=provenance_source, person=person, age_list=age_list, -======= - visit_occurrence = prepare_visit_occurrence( - data=data, - stay_types=stay_types, - length_of_stays=length_of_stays, ->>>>>>> main - ).drop(columns=["visit_occurrence_source_value", "date"]) + ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( data=data, @@ -144,11 +129,7 @@ def compute_completeness( self, note_predictor: DataFrame, ): -<<<<<<< HEAD - partition_cols = self._index.copy() + ["date"] -======= partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_note = ( note_predictor.groupby( @@ -187,13 +168,7 @@ def compute_completeness( note_predictor["max_n_note"] == 0, note_predictor["n_note"] / note_predictor["max_n_note"], ) -<<<<<<< HEAD - note_predictor = note_predictor.drop(columns="max_n_note") - - return note_predictor -======= return note_predictor.drop(columns="max_n_note") ->>>>>>> main def get_hospital_note( diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index a7d58130..a8a8273f 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -9,10 +9,6 @@ prepare_care_site, prepare_note, prepare_note_care_site, -<<<<<<< HEAD - prepare_person, -======= ->>>>>>> main prepare_visit_detail, prepare_visit_occurrence, ) @@ -41,16 +37,11 @@ def compute_completeness_predictor_per_visit( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], extra_data: Data, -<<<<<<< HEAD - stay_durations: List[float], + length_of_stays: List[float], note_types: Union[str, Dict[str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= - length_of_stays: List[float], - note_types: Union[str, Dict[str, str]], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -67,25 +58,18 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit", "n_visit_with_note"] check_tables(data=data, required_tables=["note"]) -<<<<<<< HEAD person = prepare_person(data) if age_list else None -======= ->>>>>>> main visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, person=person, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main ) care_site = prepare_care_site( @@ -147,11 +131,7 @@ def compute_completeness( note_predictor: DataFrame, ): # Visit with note -<<<<<<< HEAD - partition_cols = self._index.copy() + ["date"] -======= partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_visit_with_note = ( note_predictor.groupby( partition_cols, @@ -229,15 +209,11 @@ def get_visit_detail( care_site: DataFrame, ): # pragma: no cover visit_detail = visit_detail.merge( -<<<<<<< HEAD - visit_occurrence[["visit_occurrence_id", "stay_type", "length_of_stay"]], -======= visit_occurrence[ visit_occurrence.columns.intersection( set(["visit_occurrence_id", "length_of_stay", "stay_type"]) ) ], ->>>>>>> main on="visit_occurrence_id", ) diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 1b57e579..69a1efdc 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -40,20 +40,14 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", -<<<<<<< HEAD "age_range", -======= ->>>>>>> main "note_type", "care_site_id", "care_site_specialty", "care_sites_set", "specialties_set", -<<<<<<< HEAD "pmsi_type", "provenance_source", -======= ->>>>>>> main ] super().__init__( completeness_predictor=completeness_predictor, @@ -74,22 +68,15 @@ def compute_process( care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, extra_data: Data = None, -<<<<<<< HEAD - stay_durations: List[float] = None, -======= length_of_stays: List[float] = None, ->>>>>>> main note_types: Union[str, Dict[str, str]] = { "Urgence": "urge", "Ordonnance": "ordo", "CRH": "crh", }, -<<<<<<< HEAD provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, -======= ->>>>>>> main **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -122,8 +109,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` extra_data : Data Instantiated [``HiveData``][edsteva.io.hive.HiveData], [``PostgresData``][edsteva.io.postgres.PostgresData] or [``LocalData``][edsteva.io.files.LocalData] -<<<<<<< HEAD - stay_durations : List[float], optional + length_of_stays : List[float], optional **EXAMPLE**: `[1, 30]` note_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"CRH": "crh", "Urgence": "urge"}` @@ -136,26 +122,14 @@ def compute_process( """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") -======= - length_of_stays : List[float], optional - **EXAMPLE**: `[1, 30]` - note_types : Union[str, Dict[str, str]], optional - **EXAMPLE**: `{"All": ".*"}` or `{"CRH": "crh", "Urgence": "urge"}` - """ - if specialties_sets is None and "specialties_set" in self._index: - self._index.remove("specialties_set") - if length_of_stays is None and "length_of_stay" in self._index: - self._index.remove("length_of_stay") ->>>>>>> main if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") if note_types is None and "note_type" in self._index: self._index.remove("note_type") -<<<<<<< HEAD + if length_of_stays is None and "length_of_stay" in self._index: + self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") -======= ->>>>>>> main return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -171,14 +145,10 @@ def compute_process( care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, note_types=note_types, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main **kwargs, ) diff --git a/edsteva/probes/note/viz_configs/n_note/defaults.py b/edsteva/probes/note/viz_configs/n_note/defaults.py index 3b99956f..3f5abefb 100644 --- a/edsteva/probes/note/viz_configs/n_note/defaults.py +++ b/edsteva/probes/note/viz_configs/n_note/defaults.py @@ -59,14 +59,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -89,22 +86,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_note="sum(n_note)", - groupby=["value", "date"], - ), - dict( - max_note="max(sum_note)", - groupby=["value"], - ), - ], - calculates=[ - dict(normalized_c=(alt.datum.sum_note / alt.datum.max_note) / alt.datum.c_0) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -154,8 +135,6 @@ }, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), @@ -163,7 +142,6 @@ "sum(n_note):Q", title="Number of discharge summaries", format="," ), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py b/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py +++ b/edsteva/probes/note/viz_configs/n_note/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py b/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py +++ b/edsteva/probes/note/viz_configs/n_note/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py b/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py +++ b/edsteva/probes/note/viz_configs/n_note/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py b/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py +++ b/edsteva/probes/note/viz_configs/n_note/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/n_note/probe_plot.py b/edsteva/probes/note/viz_configs/n_note/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/note/viz_configs/n_note/probe_plot.py +++ b/edsteva/probes/note/viz_configs/n_note/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_note/defaults.py b/edsteva/probes/note/viz_configs/per_note/defaults.py index 4609e283..4b07a293 100644 --- a/edsteva/probes/note/viz_configs/per_note/defaults.py +++ b/edsteva/probes/note/viz_configs/per_note/defaults.py @@ -59,14 +59,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -89,22 +86,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_note="sum(n_note)", - groupby=["value", "date"], - ), - dict( - max_note="max(sum_note)", - groupby=["value"], - ), - ], - calculates=[ - dict(normalized_c=(alt.datum.sum_note / alt.datum.max_note) / alt.datum.c_0) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -167,14 +148,11 @@ }, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py b/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py +++ b/edsteva/probes/note/viz_configs/per_note/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py b/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py +++ b/edsteva/probes/note/viz_configs/per_note/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py b/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py +++ b/edsteva/probes/note/viz_configs/per_note/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py b/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py +++ b/edsteva/probes/note/viz_configs/per_note/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_note/probe_plot.py b/edsteva/probes/note/viz_configs/per_note/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/note/viz_configs/per_note/probe_plot.py +++ b/edsteva/probes/note/viz_configs/per_note/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_visit/defaults.py b/edsteva/probes/note/viz_configs/per_visit/defaults.py index 220383ed..5d2dba25 100644 --- a/edsteva/probes/note/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/note/viz_configs/per_visit/defaults.py @@ -59,14 +59,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -105,25 +102,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - sum_visit_with_note="sum(n_visit_with_note)", - groupby=["value", "date"], - ), - ], - calculates=[ - dict( - normalized_c=(alt.datum.sum_visit_with_note / alt.datum.sum_visit) - / alt.datum.c_0 - ) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -186,14 +164,11 @@ }, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py +++ b/edsteva/probes/note/viz_configs/per_visit/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py +++ b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py +++ b/edsteva/probes/note/viz_configs/per_visit/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py +++ b/edsteva/probes/note/viz_configs/per_visit/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/note/viz_configs/per_visit/probe_plot.py b/edsteva/probes/note/viz_configs/per_visit/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/note/viz_configs/per_visit/probe_plot.py +++ b/edsteva/probes/note/viz_configs/per_visit/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index c022bbff..fcd34b62 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -115,53 +115,6 @@ def filter_table_by_date( return table -<<<<<<< HEAD -def filter_table_by_stay_duration( - visit_occurrence: DataFrame, stay_durations: List[float] -): - if stay_durations: - visit_occurrence = visit_occurrence.assign( - length=( - visit_occurrence.visit_end_datetime - - visit_occurrence.visit_start_datetime - ) - / np.timedelta64(timedelta(days=1)) - ) - - # Incomplete stays - visit_occurrence = visit_occurrence.assign(length_of_stay="Unknown") - visit_occurrence["length_of_stay"] = visit_occurrence.length_of_stay.mask( - visit_occurrence["visit_end_datetime"].isna(), - "Incomplete stay", - ) - - # Complete stays - min_duration = stay_durations[0] - max_duration = stay_durations[-1] - visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - (visit_occurrence["length"] <= min_duration), - "<= {} days".format(min_duration), - ) - visit_occurrence["length_of_stay"] = visit_occurrence["length_of_stay"].mask( - (visit_occurrence["length"] >= max_duration), - ">= {} days".format(max_duration), - ) - n_duration = len(stay_durations) - for i in range(0, n_duration - 1): - min = stay_durations[i] - max = stay_durations[i + 1] - visit_occurrence["length_of_stay"] = visit_occurrence[ - "length_of_stay" - ].mask( - (visit_occurrence["length"] >= min) - & (visit_occurrence["length"] < max), - "{} days - {} days".format(min, max), - ) - visit_occurrence = visit_occurrence.drop(columns="length") - - else: - visit_occurrence = visit_occurrence.assign(length_of_stay="All lengths") -======= def filter_table_by_length_of_stay( visit_occurrence: DataFrame, length_of_stays: List[float] ): @@ -199,7 +152,6 @@ def filter_table_by_length_of_stay( "{} days - {} days".format(min, max), ) visit_occurrence = visit_occurrence.drop(columns="length") ->>>>>>> main return visit_occurrence.drop(columns="visit_end_datetime") @@ -272,7 +224,6 @@ def filter_table_by_care_site( ] -<<<<<<< HEAD def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): age_list.sort() @@ -298,8 +249,6 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): return visit_occurrence -======= ->>>>>>> main def convert_uf_to_pole( table: DataFrame, table_name: str, diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 34d054ec..e1fc2cf9 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -9,16 +9,10 @@ from edsteva.utils.typing import Data, DataFrame from .filter_df import ( -<<<<<<< HEAD filter_table_by_age, - filter_table_by_care_site, filter_table_by_date, - filter_table_by_stay_duration, -======= filter_table_by_care_site, - filter_table_by_date, filter_table_by_length_of_stay, ->>>>>>> main filter_table_by_type, filter_valid_observations, ) @@ -27,19 +21,13 @@ def prepare_visit_occurrence( data: Data, stay_types: Union[str, Dict[str, str]], -<<<<<<< HEAD - stay_durations: List[float], pmsi_type: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], - start_date: datetime = None, - end_date: datetime = None, - person: DataFrame = None, - age_list: List[int] = None, -======= length_of_stays: List[float], + age_list: List[int] = None, start_date: datetime = None, end_date: datetime = None, ->>>>>>> main + person: DataFrame = None, ): required_columns = [ "visit_occurrence_id", @@ -48,17 +36,12 @@ def prepare_visit_occurrence( "visit_end_datetime", "care_site_id", "row_status_source_value", -<<<<<<< HEAD "stay_source_value", "visit_occurrence_source_value", "provenance_source_value", "person_id", ] -======= - "visit_occurrence_source_value", - ] ->>>>>>> main check_columns( data.visit_occurrence, required_columns=required_columns, @@ -66,7 +49,6 @@ def prepare_visit_occurrence( ) visit_occurrence = data.visit_occurrence[required_columns] -<<<<<<< HEAD visit_occurrence = filter_table_by_type( table=visit_occurrence, table_name="visit_occurrence", @@ -83,24 +65,16 @@ def prepare_visit_occurrence( target_col="provenance_source", ) - visit_occurrence = filter_table_by_stay_duration( - visit_occurrence=visit_occurrence, stay_durations=stay_durations - ) - visit_occurrence = visit_occurrence.rename( columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} ) -======= ->>>>>>> main visit_occurrence = filter_valid_observations( table=visit_occurrence, table_name="visit_occurrence", invalid_naming="supprimé", ) -<<<<<<< HEAD -======= if length_of_stays: visit_occurrence = filter_table_by_length_of_stay( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays @@ -110,7 +84,6 @@ def prepare_visit_occurrence( columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} ) ->>>>>>> main visit_occurrence = filter_table_by_date( table=visit_occurrence, table_name="visit_occurrence", @@ -127,7 +100,6 @@ def prepare_visit_occurrence( target_col="stay_type", ) -<<<<<<< HEAD if age_list: visit_occurrence = visit_occurrence.merge( person, left_on="person_id", right_on="person_id" @@ -137,8 +109,6 @@ def prepare_visit_occurrence( age_list=age_list, ) -======= ->>>>>>> main return visit_occurrence @@ -476,13 +446,7 @@ def prepare_note_care_site(extra_data: Data, note: DataFrame): # pragma: no cov value_name="care_site_source_value", ) note_ref = note_ref.merge(care_site_ref, on="care_site_source_value") -<<<<<<< HEAD - note = note.merge(note_ref[["note_id", "care_site_id"]], on="note_id") - - return note -======= return note.merge(note_ref[["note_id", "care_site_id"]], on="note_id") ->>>>>>> main def prepare_visit_detail( @@ -511,22 +475,13 @@ def prepare_visit_detail( table=visit_detail, table_name="visit_detail", valid_naming="Actif" ) -<<<<<<< HEAD - visit_detail = filter_table_by_date( -======= return filter_table_by_date( ->>>>>>> main table=visit_detail, table_name="visit_detail", start_date=start_date, end_date=end_date, ) -<<<<<<< HEAD - return visit_detail - -======= ->>>>>>> main def prepare_care_site_relationship(data: Data) -> pd.DataFrame: """Computes hierarchical care site structure @@ -724,7 +679,6 @@ def prepare_biology_relationship( "GLIMS", ) return biology_relationship -<<<<<<< HEAD def prepare_person( @@ -746,5 +700,3 @@ def prepare_person( person = data.person[person_columns] return person -======= ->>>>>>> main diff --git a/edsteva/probes/utils/utils.py b/edsteva/probes/utils/utils.py index ac0f1f2f..670b83ca 100644 --- a/edsteva/probes/utils/utils.py +++ b/edsteva/probes/utils/utils.py @@ -29,27 +29,17 @@ def impute_missing_dates( partition_cols: List[str], ): # Generate all available dates -<<<<<<< HEAD -======= closed = "left" ->>>>>>> main if not start_date: start_date = predictor["date"].min() if not end_date: end_date = predictor["date"].max() -<<<<<<< HEAD -======= closed = None ->>>>>>> main date_index = pd.date_range( start=start_date, end=end_date, freq="MS", -<<<<<<< HEAD - closed="left", -======= closed=closed, ->>>>>>> main ) date_index = pd.DataFrame({"date": date_index}) @@ -59,19 +49,11 @@ def impute_missing_dates( .drop_duplicates() .merge(date_index, how="cross") ) -<<<<<<< HEAD - filled_predictor = all_partitions.merge( -======= return all_partitions.merge( ->>>>>>> main predictor, on=partition_cols, how="left", ).fillna({col: 0 for col in set(predictor.columns) - set(partition_cols)}) -<<<<<<< HEAD - return filled_predictor -======= ->>>>>>> main def hospital_only(care_site_levels: List[str]): @@ -224,11 +206,4 @@ def get_child_and_parent_cs( } ) -<<<<<<< HEAD - extended_care_site_id_to_filter = pd.concat( - extended_care_site_id_to_filter - ).drop_duplicates() - return extended_care_site_id_to_filter -======= return pd.concat(extended_care_site_id_to_filter).drop_duplicates() ->>>>>>> main diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 884e83c6..836fd981 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -6,10 +6,7 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, -<<<<<<< HEAD prepare_person, -======= ->>>>>>> main prepare_visit_detail, prepare_visit_occurrence, ) @@ -37,14 +34,10 @@ def compute_completeness_predictor_per_visit( care_site_specialties: List[str], care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], -<<<<<<< HEAD - stay_durations: List[float], + length_of_stays: List[float], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], -======= - length_of_stays: List[float], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -58,26 +51,19 @@ def compute_completeness_predictor_per_visit( Where $n_{visit}(t)$ is the number of administrative stays, $t$ is the month and $n_{max} = \max_{t}(n_{visit}(t))$. """ self._metrics = ["c", "n_visit"] -<<<<<<< HEAD person = prepare_person(data) if age_list else None -======= ->>>>>>> main visit_occurrence = prepare_visit_occurrence( data=data, start_date=start_date, end_date=end_date, stay_types=stay_types, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, pmsi_type=pmsi_type, provenance_source=provenance_source, person=person, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main ) care_site = prepare_care_site( @@ -144,11 +130,7 @@ def compute_completeness( self, visit_predictor: DataFrame, ): -<<<<<<< HEAD partition_cols = self._index.copy() + ["date"] -======= - partition_cols = [*self._index.copy(), "date"] ->>>>>>> main n_visit = ( visit_predictor.groupby( @@ -187,13 +169,7 @@ def compute_completeness( visit_predictor["max_n_visit"] == 0, visit_predictor["n_visit"] / visit_predictor["max_n_visit"], ) -<<<<<<< HEAD - visit_predictor = visit_predictor.drop(columns="max_n_visit") - - return visit_predictor -======= return visit_predictor.drop(columns="max_n_visit") ->>>>>>> main def get_hospital_visit( @@ -221,15 +197,11 @@ def get_uf_visit( ): uf_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UF"]] uf_visit = uf_visit.merge( -<<<<<<< HEAD - visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], -======= visit_occurrence[ visit_occurrence.columns.intersection( set(["visit_occurrence_id", "length_of_stay", "stay_type"]) ) ], ->>>>>>> main on="visit_occurrence_id", ).drop(columns="visit_occurrence_id") uf_visit = uf_visit.merge(care_site, on="care_site_id") @@ -247,15 +219,11 @@ def get_uc_visit( ): uc_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UC"]] uc_visit = uc_visit.merge( -<<<<<<< HEAD - visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], -======= visit_occurrence[ visit_occurrence.columns.intersection( set(["visit_occurrence_id", "length_of_stay", "stay_type"]) ) ], ->>>>>>> main on="visit_occurrence_id", ).drop(columns="visit_occurrence_id") uc_visit = uc_visit.merge(care_site, on="care_site_id") @@ -273,15 +241,11 @@ def get_uh_visit( ): uh_visit = visit_detail[visit_detail.visit_detail_type == VISIT_DETAIL_TYPE["UH"]] uh_visit = uh_visit.merge( -<<<<<<< HEAD - visit_occurrence[["visit_occurrence_id", "length_of_stay", "stay_type"]], -======= visit_occurrence[ visit_occurrence.columns.intersection( set(["visit_occurrence_id", "length_of_stay", "stay_type"]) ) ], ->>>>>>> main on="visit_occurrence_id", ).drop(columns="visit_occurrence_id") uh_visit = uh_visit.merge(care_site, on="care_site_id") diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 4c4c195e..019a0cb7 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -40,19 +40,13 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", -<<<<<<< HEAD "age_range", -======= ->>>>>>> main "care_site_id", "care_site_specialty", "care_sites_set", "specialties_set", -<<<<<<< HEAD "pmsi_type", "provenance_source", -======= ->>>>>>> main ] super().__init__( completeness_predictor=completeness_predictor, @@ -72,14 +66,10 @@ def compute_process( care_site_specialties: List[str] = None, care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, -<<<<<<< HEAD - stay_durations: List[float] = None, + length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, -======= - length_of_stays: List[float] = None, ->>>>>>> main **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -108,8 +98,7 @@ def compute_process( **EXAMPLE**: `{"All AP-HP": ".*"}` or `{"All AP-HP": ".*", "Pediatrics": r"debre|trousseau|necker"}` specialties_sets : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` -<<<<<<< HEAD - stay_durations : List[float], optional + length_of_stays : List[float], optional **EXAMPLE**: `[1, 30]` pmsi_type : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` @@ -124,17 +113,6 @@ def compute_process( self._index.remove("care_sites_set") if age_list is None and "age_range" in self._index: self._index.remove("age_range") -======= - length_of_stays : List[float], optional - **EXAMPLE**: `[1, 30]` - """ - if specialties_sets is None and "specialties_set" in self._index: - self._index.remove("specialties_set") - if length_of_stays is None and "length_of_stay" in self._index: - self._index.remove("length_of_stay") - if care_sites_sets is None and "care_sites_set" in self._index: - self._index.remove("care_sites_set") ->>>>>>> main return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -148,14 +126,10 @@ def compute_process( care_site_specialties=care_site_specialties, care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, -<<<<<<< HEAD - stay_durations=stay_durations, + length_of_stays=length_of_stays, provenance_source=provenance_source, pmsi_type=pmsi_type, age_list=age_list, -======= - length_of_stays=length_of_stays, ->>>>>>> main **kwargs, ) diff --git a/edsteva/probes/visit/viz_configs/n_visit/defaults.py b/edsteva/probes/visit/viz_configs/n_visit/defaults.py index ab379335..eadb36f8 100644 --- a/edsteva/probes/visit/viz_configs/n_visit/defaults.py +++ b/edsteva/probes/visit/viz_configs/n_visit/defaults.py @@ -53,14 +53,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -83,22 +80,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - max_visit="max(sum_visit)", - groupby=["value"], - ), - ], - calculates=[ - dict(normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) / alt.datum.c_0) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -140,8 +121,6 @@ sort={"field": "n_visit", "op": "sum", "order": "descending"}, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), @@ -149,7 +128,6 @@ "sum(n_visit):Q", title="Number of administrative records", format="," ), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py b/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py +++ b/edsteva/probes/visit/viz_configs/n_visit/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py +++ b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py +++ b/edsteva/probes/visit/viz_configs/n_visit/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py b/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py +++ b/edsteva/probes/visit/viz_configs/n_visit/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py b/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py +++ b/edsteva/probes/visit/viz_configs/n_visit/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/per_visit/defaults.py b/edsteva/probes/visit/viz_configs/per_visit/defaults.py index c2b4e389..bbadc600 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/defaults.py +++ b/edsteva/probes/visit/viz_configs/per_visit/defaults.py @@ -53,14 +53,11 @@ "field": "specialties_set", "sort": "-x", }, -<<<<<<< HEAD -======= { "title": "Care sites-set", "field": "care_sites_set", "sort": "-x", }, ->>>>>>> main ], x=[ dict( @@ -83,22 +80,6 @@ ) normalized_main_chart = dict( -<<<<<<< HEAD - aggregates=[ - dict( - sum_visit="sum(n_visit)", - groupby=["value", "date"], - ), - dict( - max_visit="max(sum_visit)", - groupby=["value"], - ), - ], - calculates=[ - dict(normalized_c=(alt.datum.sum_visit / alt.datum.max_visit) / alt.datum.c_0) - ], -======= ->>>>>>> main legend_title="Mean", encode=dict( x=alt.X( @@ -153,14 +134,11 @@ sort={"field": "n_visit", "op": "sum", "order": "descending"}, title=None, ), -<<<<<<< HEAD -======= tooltip=[ alt.Tooltip("value:N", title="Index"), alt.Tooltip("yearmonth(date):T", title="Date"), alt.Tooltip("completeness:Q", title="c(t)", format=".2f"), ], ->>>>>>> main ), properties=dict( height=300, diff --git a/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py b/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py index 22042927..7f0313aa 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py +++ b/edsteva/probes/visit/viz_configs/per_visit/estimates_densities_plot.py @@ -2,17 +2,8 @@ def get_estimates_densities_plot_config(self): -<<<<<<< HEAD - estimates_densities_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return estimates_densities_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py index 9253d0c1..efbf9d29 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py +++ b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_dashboard.py @@ -9,11 +9,7 @@ def get_normalized_probe_dashboard_config(self): -<<<<<<< HEAD - normalized_probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, time_line=normalized_time_line, @@ -21,8 +17,3 @@ def get_normalized_probe_dashboard_config(self): vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - - return normalized_probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py index f37226f5..baf98c80 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py +++ b/edsteva/probes/visit/viz_configs/per_visit/normalized_probe_plot.py @@ -2,16 +2,8 @@ def get_normalized_probe_plot_config(self): -<<<<<<< HEAD - normalized_probe_plot_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=normalized_main_chart, error_line=error_line, ) -<<<<<<< HEAD - return normalized_probe_plot_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py b/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py index b33fbffe..c0a99061 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py +++ b/edsteva/probes/visit/viz_configs/per_visit/probe_dashboard.py @@ -8,18 +8,10 @@ def get_probe_dashboard_config(self): -<<<<<<< HEAD - probe_dashboard_config = dict( -======= return dict( ->>>>>>> main chart_style=chart_style, main_chart=main_chart, time_line=time_line, vertical_bar_charts=vertical_bar_charts, horizontal_bar_charts=horizontal_bar_charts, ) -<<<<<<< HEAD - return probe_dashboard_config -======= ->>>>>>> main diff --git a/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py b/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py index 3541d44e..bcd45614 100644 --- a/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py +++ b/edsteva/probes/visit/viz_configs/per_visit/probe_plot.py @@ -2,15 +2,7 @@ def get_probe_plot_config(self): -<<<<<<< HEAD - probe_plot_config = dict( - chart_style=chart_style, - main_chart=main_chart, - ) - return probe_plot_config -======= return dict( chart_style=chart_style, main_chart=main_chart, ) ->>>>>>> main diff --git a/edsteva/utils/file_management.py b/edsteva/utils/file_management.py index 39073967..7c77d628 100644 --- a/edsteva/utils/file_management.py +++ b/edsteva/utils/file_management.py @@ -1,7 +1,3 @@ -<<<<<<< HEAD -import os -======= ->>>>>>> main from pathlib import Path import _pickle as pickle @@ -11,26 +7,16 @@ def save_object(obj, filename: Path): if not isinstance(filename, Path): filename = Path(filename) -<<<<<<< HEAD - os.makedirs(filename.parent, exist_ok=True) - with open(filename, "wb") as outp: # Overwrites any existing file. -======= Path.mkdir(filename.parent, exist_ok=True, parents=True) with Path.open(filename, "wb") as outp: # Overwrites any existing file. ->>>>>>> main pickle.dump(obj, outp, -1) logger.info("Saved to {}", filename) def load_object(filename: str): -<<<<<<< HEAD - if os.path.isfile(filename): - with open(filename, "rb") as obj: -======= file = Path(filename) if Path.is_file(file): with Path.open(file, "rb") as obj: ->>>>>>> main logger.info("Successfully loaded from {}", filename) return pickle.load(obj) else: @@ -42,14 +28,9 @@ def load_object(filename: str): def delete_object(obj, filename: str): -<<<<<<< HEAD - if os.path.isfile(filename): - os.remove(filename) -======= file = Path(filename) if Path.is_file(file): Path.unlink(file) ->>>>>>> main logger.info( "Removed from {}", filename, diff --git a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py index 879ec7e6..53ecd6ac 100644 --- a/edsteva/viz/dashboards/normalized_probe/normalized_probe.py +++ b/edsteva/viz/dashboards/normalized_probe/normalized_probe.py @@ -1,10 +1,6 @@ import uuid from copy import deepcopy -<<<<<<< HEAD -from typing import Dict -======= from typing import Dict, List ->>>>>>> main import altair as alt import pandas as pd @@ -27,10 +23,7 @@ generate_probe_line, generate_time_line, generate_vertical_bar_charts, -<<<<<<< HEAD -======= get_indexes_to_groupby, ->>>>>>> main month_diff, save_html, ) @@ -41,10 +34,6 @@ def normalized_probe_dashboard( fitted_model: BaseModel, care_site_level: str = CARE_SITE_LEVEL_NAMES["Hospital"], save_path: str = None, -<<<<<<< HEAD - remove_singleton_bar_chart: bool = True, -======= ->>>>>>> main x_axis_title: str = None, y_axis_title: str = None, main_chart_config: Dict[str, str] = None, @@ -57,10 +46,7 @@ def normalized_probe_dashboard( horizontal_bar_charts_config: Dict[str, str] = None, time_line_config: Dict[str, str] = None, chart_style: Dict[str, float] = None, -<<<<<<< HEAD -======= indexes_to_remove: List[str] = ["care_site_id", "care_site_level"], ->>>>>>> main **kwargs, ): r"""Displays an interactive chart with: @@ -80,12 +66,6 @@ def normalized_probe_dashboard( **EXAMPLE**: `"Hospital"`, `"Hôpital"` or `"UF"` save_path : str, optional Folder path where to save the chart in HTML format. -<<<<<<< HEAD - remove_singleton_bar_chart : bool, optional - If set to True, remove the bar charts with only one element - **EXAMPLE**: `True` -======= ->>>>>>> main x_axis_title: str, optional, Label name for the x axis. y_axis_title: str, optional, @@ -111,26 +91,6 @@ def normalized_probe_dashboard( chart_style: Dict[str, float], optional If not None, configuration used to configure the chart style. **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` -<<<<<<< HEAD - """ - alt.data_transformers.disable_max_rows() - - predictor = probe.predictor.copy() - estimates = fitted_model.estimates.copy() - predictor = predictor.merge(estimates, on=probe._index) - - predictor["normalized_date"] = month_diff( - predictor["date"], predictor["t_0"] - ).astype(int) - predictor["normalized_c_0"] = predictor["c_0"].mask( - (predictor["normalized_date"] < 0) | (predictor["c_0"] == 0), 1 - ) - - predictor["model"] = 1 - predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) - - predictor.t_0 = predictor.t_0.dt.strftime("%Y-%m") -======= indexes_to_remove: List[str], optional indexes to remove from the groupby selection. """ @@ -164,7 +124,6 @@ def normalized_probe_dashboard( ) # Get viz config ->>>>>>> main probe_config = deepcopy(probe.get_viz_config("normalized_probe_dashboard")) model_config = deepcopy( fitted_model.get_viz_config("normalized_probe_dashboard", predictor=predictor) @@ -197,22 +156,9 @@ def normalized_probe_dashboard( if not estimates_filters: estimates_filters = model_config["estimates_filters"] -<<<<<<< HEAD - predictor["legend_predictor"] = main_chart_config["legend_title"] - predictor["legend_error_band"] = error_line_config["legend_title"] - predictor["legend_model"] = type(fitted_model).__name__ - predictor = filter_predictor( - predictor=predictor, care_site_level=care_site_level, **kwargs - ) - for estimate in fitted_model._coefs + fitted_model._metrics: - if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): - predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") - -======= # Viz predictor["legend_predictor"] = main_chart_config["legend_title"] predictor["legend_error_band"] = error_line_config["legend_title"] ->>>>>>> main base = alt.Chart(predictor) time_line, time_selection = generate_time_line( base=base, @@ -223,22 +169,12 @@ def normalized_probe_dashboard( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, ) - -======= - ) ->>>>>>> main selections = dict( date=time_selection, **y_variables_selections, @@ -248,10 +184,6 @@ def normalized_probe_dashboard( horizontal_bar_charts, **vertical_bar_charts, ) -<<<<<<< HEAD - -======= ->>>>>>> main base = add_interactive_selection( base=base, selection_charts=selection_charts, @@ -263,12 +195,8 @@ def normalized_probe_dashboard( estimates_filters=estimates_filters, ) index_selection, index_fields = create_groupby_selection( -<<<<<<< HEAD - indexes=vertical_bar_charts_config["x"] + horizontal_bar_charts_config["y"], -======= indexes=indexes, predictor=predictor, ->>>>>>> main ) main_chart = generate_main_chart( base=base, @@ -290,11 +218,7 @@ def normalized_probe_dashboard( main_chart = probe_line + error_line + model_line if index_selection: -<<<<<<< HEAD - main_chart = main_chart.add_selection(index_selection) -======= main_chart = main_chart.add_params(index_selection) ->>>>>>> main chart = concatenate_charts( main_chart=main_chart, time_line=time_line, @@ -304,11 +228,7 @@ def normalized_probe_dashboard( ) chart = configure_style(chart=chart, chart_style=chart_style) for estimate_selection in estimates_selections: -<<<<<<< HEAD - chart = chart.add_selection(estimate_selection) -======= chart = chart.add_params(estimate_selection) ->>>>>>> main vis_threshold = "id" + uuid.uuid4().hex new_sliders_threshold_id = "id" + uuid.uuid4().hex diff --git a/edsteva/viz/dashboards/probe/fitted_probe.py b/edsteva/viz/dashboards/probe/fitted_probe.py index 29076914..107a460d 100644 --- a/edsteva/viz/dashboards/probe/fitted_probe.py +++ b/edsteva/viz/dashboards/probe/fitted_probe.py @@ -19,10 +19,6 @@ def fitted_probe_dashboard( predictor: pd.DataFrame, -<<<<<<< HEAD - remove_singleton_bar_chart: bool, -======= ->>>>>>> main legend_predictor: str, legend_model: str, x_axis_title: str, @@ -41,12 +37,6 @@ def fitted_probe_dashboard( ---------- predictor : pd.DataFrame $c(t)$ computed in the Probe with its prediction $\hat{c}(t)$ -<<<<<<< HEAD - remove_singleton_bar_chart : bool, optional - If set to True, remove the bar charts with only one element - **EXAMPLE**: `True` -======= ->>>>>>> main legend_predictor: str, optional, Label name for the predictor legend. legend_model: str, optional, @@ -83,19 +73,11 @@ def fitted_probe_dashboard( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) selections = dict( @@ -114,10 +96,7 @@ def fitted_probe_dashboard( index_selection, index_fields = create_groupby_selection( indexes=vertical_bar_charts_config["x"] + horizontal_bar_charts_config["y"], -<<<<<<< HEAD -======= predictor=predictor, ->>>>>>> main ) main_chart = generate_main_chart( base=base, @@ -138,21 +117,11 @@ def fitted_probe_dashboard( main_chart = probe_line + model_line if index_selection: -<<<<<<< HEAD - main_chart = main_chart.add_selection(index_selection) -======= main_chart = main_chart.add_params(index_selection) ->>>>>>> main chart = concatenate_charts( main_chart=main_chart, time_line=time_line, horizontal_bar_charts=horizontal_bar_charts, vertical_bar_charts=vertical_bar_charts, ) -<<<<<<< HEAD - chart = configure_style(chart=chart, chart_style=chart_style) - - return chart -======= return configure_style(chart=chart, chart_style=chart_style) ->>>>>>> main diff --git a/edsteva/viz/dashboards/probe/probe.py b/edsteva/viz/dashboards/probe/probe.py index e9d70a2a..417842dc 100644 --- a/edsteva/viz/dashboards/probe/probe.py +++ b/edsteva/viz/dashboards/probe/probe.py @@ -5,10 +5,7 @@ from edsteva.viz.utils import ( add_interactive_selection, -<<<<<<< HEAD -======= add_selection_on_legend, ->>>>>>> main concatenate_charts, configure_style, create_groupby_selection, @@ -21,10 +18,6 @@ def probe_only_dashboard( predictor: pd.DataFrame, -<<<<<<< HEAD - remove_singleton_bar_chart: bool, -======= ->>>>>>> main x_axis_title: str, y_axis_title: str, main_chart_config: Dict[str, float], @@ -39,12 +32,6 @@ def probe_only_dashboard( ---------- predictor : pd.DataFrame $c(t)$ computed in the Probe. -<<<<<<< HEAD - remove_singleton_bar_chart : bool, optional - If set to True, remove the bar charts with only one element - **EXAMPLE**: `True` -======= ->>>>>>> main x_axis_title: str, optional, Label name for the x axis. y_axis_title: str, optional, @@ -71,19 +58,11 @@ def probe_only_dashboard( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) selections = dict( date=time_selection, @@ -100,10 +79,7 @@ def probe_only_dashboard( index_selection, index_fields = create_groupby_selection( indexes=vertical_bar_charts_config["x"] + horizontal_bar_charts_config["y"], -<<<<<<< HEAD -======= predictor=predictor, ->>>>>>> main ) main_chart = generate_main_chart( base=base, @@ -115,24 +91,13 @@ def probe_only_dashboard( ) main_chart = main_chart.mark_line() -<<<<<<< HEAD - if index_selection: - main_chart = main_chart.add_selection(index_selection) -======= main_chart = add_selection_on_legend(main_chart) if index_selection: main_chart = main_chart.add_params(index_selection) ->>>>>>> main chart = concatenate_charts( main_chart=main_chart, time_line=time_line, horizontal_bar_charts=horizontal_bar_charts, vertical_bar_charts=vertical_bar_charts, ) -<<<<<<< HEAD - chart = configure_style(chart=chart, chart_style=chart_style) - - return chart -======= return configure_style(chart=chart, chart_style=chart_style) ->>>>>>> main diff --git a/edsteva/viz/dashboards/probe/wrapper.py b/edsteva/viz/dashboards/probe/wrapper.py index 855fe541..4bf13b58 100644 --- a/edsteva/viz/dashboards/probe/wrapper.py +++ b/edsteva/viz/dashboards/probe/wrapper.py @@ -17,10 +17,6 @@ def probe_dashboard( fitted_model: BaseModel = None, care_site_level: str = None, save_path: str = None, -<<<<<<< HEAD - remove_singleton_bar_chart: bool = True, -======= ->>>>>>> main legend_predictor: str = "Predictor c(t)", legend_model: str = "Model f(t)", x_axis_title: str = None, @@ -52,12 +48,6 @@ def probe_dashboard( save_path : str, optional Folder path where to save the chart in HTML format. **EXAMPLE**: `"my_folder/my_file.html"` -<<<<<<< HEAD - remove_singleton_bar_chart : bool, optional - If set to True, remove the bar charts with only one element - **EXAMPLE**: `True` -======= ->>>>>>> main legend_predictor: str, optional, Label name for the predictor legend. legend_model: str, optional, @@ -114,14 +104,7 @@ def probe_dashboard( if not chart_style: chart_style = probe_config["chart_style"] -<<<<<<< HEAD - if fitted_model: - predictor = fitted_model.predict(probe) - else: - predictor = probe.predictor.copy() -======= predictor = fitted_model.predict(probe) if fitted_model else probe.predictor.copy() ->>>>>>> main predictor = filter_predictor( predictor=predictor, care_site_level=care_site_level, @@ -133,10 +116,6 @@ def probe_dashboard( predictor=predictor, legend_predictor=legend_predictor, legend_model=legend_model, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main x_axis_title=x_axis_title, y_axis_title=y_axis_title, main_chart_config=main_chart_config, @@ -150,10 +129,6 @@ def probe_dashboard( else: chart = probe_only_dashboard( predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main x_axis_title=x_axis_title, y_axis_title=y_axis_title, main_chart_config=main_chart_config, diff --git a/edsteva/viz/plots/estimates_densities/estimates_densities.py b/edsteva/viz/plots/estimates_densities/estimates_densities.py index 061e8a05..cb105461 100644 --- a/edsteva/viz/plots/estimates_densities/estimates_densities.py +++ b/edsteva/viz/plots/estimates_densities/estimates_densities.py @@ -1,7 +1,3 @@ -<<<<<<< HEAD -import uuid -======= ->>>>>>> main from copy import deepcopy from datetime import datetime from functools import reduce @@ -32,10 +28,6 @@ def estimates_densities_plot( end_date: Union[datetime, str] = None, care_site_short_name: List[int] = None, save_path: str = None, -<<<<<<< HEAD - remove_singleton_bar_chart: bool = True, -======= ->>>>>>> main vertical_bar_charts_config: Dict[str, str] = None, horizontal_bar_charts_config: Dict[str, str] = None, chart_style: Dict[str, float] = None, @@ -66,12 +58,6 @@ def estimates_densities_plot( **EXAMPLE**: `"HOSPITAL XXXX"` save_path : str, optional Folder path where to save the chart in HTML format. -<<<<<<< HEAD - remove_singleton_bar_chart : bool, optional - If set to True, remove the bar charts with only one element - **EXAMPLE**: `True` -======= ->>>>>>> main vertical_bar_charts_config: Dict[str, str], optional Configuration used to construct the vertical bar charts. horizontal_bar_charts_config: Dict[str, str], optional @@ -96,27 +82,11 @@ def estimates_densities_plot( **kwargs, ) estimates = fitted_model.estimates.copy() -<<<<<<< HEAD - predictor = filter_predictor( - predictor=predictor, - care_site_level=care_site_level, - stay_type=stay_type, - care_site_id=care_site_id, - care_site_short_name=care_site_short_name, - start_date=None, - end_date=None, - **kwargs, - ) - estimates = estimates.merge( - predictor[probe._index + ["care_site_short_name"]].drop_duplicates(), - on=probe._index, -======= estimates = estimates.merge( predictor[ predictor.columns.intersection(set([*probe._index, "care_site_short_name"])) ].drop_duplicates(), on=list(predictor.columns.intersection(set(probe._index))), ->>>>>>> main ) probe_config = deepcopy(probe.get_viz_config("estimates_densities_plot")) if not vertical_bar_charts_config: @@ -129,10 +99,7 @@ def estimates_densities_plot( quantitative_estimates = [] time_estimates = [] -<<<<<<< HEAD -======= base_estimate = alt.Chart(estimates) ->>>>>>> main for estimate in fitted_model._coefs + fitted_model._metrics: if estimates[estimate].dtype == float or estimates[estimate].dtype == int: max_value = estimates[estimate].max() @@ -143,12 +110,7 @@ def estimates_densities_plot( alt.vconcat( ( ( -<<<<<<< HEAD - alt.Chart(estimates) - .transform_density( -======= base_estimate.transform_density( ->>>>>>> main estimate, as_=[estimate, "Density"], extent=[min_value, max_value], @@ -159,38 +121,20 @@ def estimates_densities_plot( y=alt.Y("Density:Q", title=y_axis_title), ) ) -<<<<<<< HEAD - + alt.Chart(estimates) - .mark_rule(color="red") - .encode( -======= + base_estimate.mark_rule(color="red").encode( ->>>>>>> main x="median({}):Q".format(estimate), tooltip=alt.Tooltip("median({}):Q".format(estimate)), ) ).properties(width=800, height=300), ( -<<<<<<< HEAD - alt.Chart(estimates) - .mark_tick() - .encode(x=alt.X("{}:Q".format(estimate), axis=None)) -======= base_estimate.mark_tick().encode( x=alt.X("{}:Q".format(estimate), axis=None) ) ->>>>>>> main ), spacing=0, ) & ( -<<<<<<< HEAD - alt.Chart(estimates) - .mark_boxplot() - .encode( -======= base_estimate.mark_boxplot().encode( ->>>>>>> main x="{}:Q".format(estimate), ) ) @@ -201,14 +145,9 @@ def estimates_densities_plot( estimates[estimate] = estimates[estimate].astype("datetime64[ns]") estimate_density = ( ( -<<<<<<< HEAD - alt.Chart(estimates) - .transform_timeunit(estimate="yearmonth({})".format(estimate)) -======= base_estimate.transform_timeunit( estimate="yearmonth({})".format(estimate) ) ->>>>>>> main .mark_bar(size=10) .encode( x=alt.X( @@ -227,13 +166,7 @@ def estimates_densities_plot( ), ) ) -<<<<<<< HEAD - + alt.Chart(estimates) - .mark_rule(color="red") - .encode( -======= + base_estimate.mark_rule(color="red").encode( ->>>>>>> main x="median({}):T".format(estimate), tooltip=alt.Tooltip("median({}):T".format(estimate)), ) @@ -241,14 +174,6 @@ def estimates_densities_plot( time_estimates.append(estimate_density) estimates_densities = time_estimates + quantitative_estimates -<<<<<<< HEAD - care_site_level_selection = alt.selection_single( - fields=["care_site_level"], - bind=alt.binding_select( - name="Care site level : ", options=estimates["care_site_level"].unique() - ), - init={"care_site_level": estimates["care_site_level"].unique()[0]}, -======= care_site_level_dropdwon = alt.binding_select( options=estimates["care_site_level"].unique(), name="Care site level : " ) @@ -256,38 +181,23 @@ def estimates_densities_plot( fields=["care_site_level"], bind=care_site_level_dropdwon, value=estimates["care_site_level"].unique()[0], ->>>>>>> main ) main_chart = reduce( lambda estimate_density_1, estimate_density_2: estimate_density_1 & estimate_density_2, estimates_densities, -<<<<<<< HEAD - ).add_selection(care_site_level_selection) - - base = alt.Chart(predictor) -======= ) base = alt.Chart(predictor).add_params(care_site_level_selection) ->>>>>>> main horizontal_bar_charts, y_variables_selections = generate_horizontal_bar_charts( base=base, horizontal_bar_charts_config=horizontal_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) vertical_bar_charts, x_variables_selections = generate_vertical_bar_charts( base=base, vertical_bar_charts_config=vertical_bar_charts_config, predictor=predictor, -<<<<<<< HEAD - remove_singleton_bar_chart=remove_singleton_bar_chart, -======= ->>>>>>> main ) selections = dict( @@ -310,64 +220,6 @@ def estimates_densities_plot( spacing=0, ) chart = configure_style(chart=chart, chart_style=chart_style) -<<<<<<< HEAD - - vis_threshold = "id" + uuid.uuid4().hex - new_sliders_threshold_id = "id" + uuid.uuid4().hex - old_sliders_threshold_id = "id" + uuid.uuid4().hex - html_chart = f""" - - - - - - - - - -
-
-
-
-
-
-
-
-
-
- -
-
- - - - - """ - if save_path: - save_html( - obj=html_chart, - filename=save_path, - ) - - return html_chart -======= if save_path: save_html( obj=chart, @@ -375,4 +227,3 @@ def estimates_densities_plot( ) return chart ->>>>>>> main diff --git a/edsteva/viz/plots/normalized_probe/normalized_probe.py b/edsteva/viz/plots/normalized_probe/normalized_probe.py index 1b5a334c..c84839b6 100644 --- a/edsteva/viz/plots/normalized_probe/normalized_probe.py +++ b/edsteva/viz/plots/normalized_probe/normalized_probe.py @@ -16,10 +16,7 @@ generate_main_chart, generate_model_line, generate_probe_line, -<<<<<<< HEAD -======= get_indexes_to_groupby, ->>>>>>> main month_diff, save_html, ) @@ -46,10 +43,7 @@ def normalized_probe_plot( estimates_selections: Dict[str, str] = None, estimates_filters: Dict[str, str] = None, chart_style: Dict[str, float] = None, -<<<<<<< HEAD -======= indexes_to_remove: List[str] = ["care_site_id"], ->>>>>>> main **kwargs, ): r"""Displays a chart with the aggregated normalized completeness predictor $\frac{c(\Delta t)}{c_0}$ over normalized time $\Delta t = t - t_0$. It represents the overall deviation from the Model. @@ -101,16 +95,6 @@ def normalized_probe_plot( chart_style: Dict[str, float], optional If not None, configuration used to configure the chart style. **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` -<<<<<<< HEAD - """ - - predictor = probe.predictor.copy() - estimates = fitted_model.estimates.copy() - - indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) - predictor = predictor.merge(estimates, on=probe._index) - -======= indexes_to_remove: List[str], optional indexes to remove from the groupby selection. """ @@ -156,7 +140,6 @@ def normalized_probe_plot( predictor = predictor[predictor.normalized_date <= t_max] # Get viz config ->>>>>>> main probe_config = deepcopy(probe.get_viz_config("normalized_probe_plot")) model_config = deepcopy( fitted_model.get_viz_config("normalized_probe_plot", predictor=predictor) @@ -176,52 +159,12 @@ def normalized_probe_plot( if not chart_style: chart_style = probe_config["chart_style"] -<<<<<<< HEAD - predictor["normalized_date"] = month_diff( - predictor["date"], predictor["t_0"] - ).astype(int) - predictor["legend_predictor"] = "Mean" - predictor["legend_error_band"] = "Standard deviation" - predictor["legend_model"] = type(fitted_model).__name__ - - predictor["model"] = 1 - predictor["model"] = predictor["model"].where(predictor["normalized_date"] >= 0, 0) - - predictor = filter_predictor( - predictor=predictor, - care_site_level=care_site_level, - stay_type=stay_type, - care_site_id=care_site_id, - care_site_short_name=care_site_short_name, - start_date=start_date, - end_date=end_date, - **kwargs, - ) - for estimate in fitted_model._coefs + fitted_model._metrics: - if pd.api.types.is_datetime64_any_dtype(predictor[estimate]): - predictor[estimate] = predictor[estimate].dt.strftime("%Y-%m") - - if t_min: - predictor = predictor[predictor.normalized_date >= t_min] - if t_max: - predictor = predictor[predictor.normalized_date <= t_max] - - indexes = [ - {"field": variable, "title": variable.replace("_", " ").capitalize()} - for variable in indexes - if len(predictor[variable].unique()) >= 2 - ] - - index_selection, index_fields = create_groupby_selection( - indexes=indexes, -======= # Viz predictor["legend_predictor"] = main_chart_config["legend_title"] predictor["legend_error_band"] = error_line_config["legend_title"] index_selection, index_fields = create_groupby_selection( indexes=indexes, predictor=predictor, ->>>>>>> main ) base = alt.Chart(predictor) base = add_estimates_filters( @@ -247,17 +190,10 @@ def normalized_probe_plot( ) main_chart = probe_line + error_line + model_line if index_selection: -<<<<<<< HEAD - main_chart = main_chart.add_selection(index_selection) - - for estimate_selection in estimates_selections: - main_chart = main_chart.add_selection(estimate_selection) -======= main_chart = main_chart.add_params(index_selection) for estimate_selection in estimates_selections: main_chart = main_chart.add_params(estimate_selection) ->>>>>>> main main_chart = configure_style(chart=main_chart, chart_style=chart_style) diff --git a/edsteva/viz/plots/probe/fitted_probe.py b/edsteva/viz/plots/probe/fitted_probe.py index 6de09a5b..60b8bb8b 100644 --- a/edsteva/viz/plots/probe/fitted_probe.py +++ b/edsteva/viz/plots/probe/fitted_probe.py @@ -52,10 +52,7 @@ def fitted_probe_line( index_selection, index_fields = create_groupby_selection( indexes=indexes, -<<<<<<< HEAD -======= predictor=predictor, ->>>>>>> main ) main_chart = generate_main_chart( base=base, @@ -76,10 +73,6 @@ def fitted_probe_line( main_chart = probe_line + model_line if index_selection: -<<<<<<< HEAD - main_chart = main_chart.add_selection(index_selection) -======= main_chart = main_chart.add_params(index_selection) ->>>>>>> main return main_chart diff --git a/edsteva/viz/plots/probe/probe.py b/edsteva/viz/plots/probe/probe.py index 7dc4f39d..410000ef 100644 --- a/edsteva/viz/plots/probe/probe.py +++ b/edsteva/viz/plots/probe/probe.py @@ -3,15 +3,11 @@ import altair as alt import pandas as pd -<<<<<<< HEAD -from edsteva.viz.utils import create_groupby_selection, generate_main_chart -======= from edsteva.viz.utils import ( add_selection_on_legend, create_groupby_selection, generate_main_chart, ) ->>>>>>> main def probe_line( @@ -40,10 +36,7 @@ def probe_line( index_selection, index_fields = create_groupby_selection( indexes=indexes, -<<<<<<< HEAD -======= predictor=predictor, ->>>>>>> main ) main_chart = generate_main_chart( base=base, @@ -54,15 +47,9 @@ def probe_line( y_axis_title=y_axis_title, ) main_chart = main_chart.mark_line() -<<<<<<< HEAD - - if index_selection: - main_chart = main_chart.add_selection(index_selection) -======= main_chart = add_selection_on_legend(main_chart) if index_selection: main_chart = main_chart.add_params(index_selection) ->>>>>>> main return main_chart diff --git a/edsteva/viz/plots/probe/wrapper.py b/edsteva/viz/plots/probe/wrapper.py index 002b9f92..f171229b 100644 --- a/edsteva/viz/plots/probe/wrapper.py +++ b/edsteva/viz/plots/probe/wrapper.py @@ -29,10 +29,7 @@ def probe_plot( model_line_config: Dict[str, str] = None, probe_line_config: Dict[str, str] = None, chart_style: Dict[str, float] = None, -<<<<<<< HEAD -======= indexes_to_remove: List[str] = ["care_site_id"], ->>>>>>> main **kwargs, ): r""" @@ -77,11 +74,8 @@ def probe_plot( chart_style: Dict[str, float], optional If not None, configuration used to configure the chart style. **EXAMPLE**: `{"labelFontSize": 13, "titleFontSize": 14}` -<<<<<<< HEAD -======= indexes_to_remove: List[str], optional indexes to remove from the groupby selection. ->>>>>>> main """ alt.data_transformers.enable("default") alt.data_transformers.disable_max_rows() @@ -92,14 +86,10 @@ def probe_plot( if not chart_style: chart_style = probe_config["chart_style"] predictor = probe.predictor.copy() -<<<<<<< HEAD - indexes = list(set(predictor.columns).difference(["date"] + probe._metrics)) -======= cols_to_remove = ["date", *probe._metrics] if indexes_to_remove: cols_to_remove.extend(indexes_to_remove) indexes = list(set(predictor.columns).difference(cols_to_remove)) ->>>>>>> main if fitted_model: predictor = fitted_model.predict(probe).copy() @@ -120,11 +110,7 @@ def probe_plot( indexes = [ {"field": variable, "title": variable.replace("_", " ").capitalize()} for variable in indexes -<<<<<<< HEAD - if len(predictor[variable].unique()) >= 2 -======= if variable in predictor.columns and len(predictor[variable].unique()) >= 2 ->>>>>>> main ] if fitted_model: diff --git a/edsteva/viz/utils.py b/edsteva/viz/utils.py index 808598c3..f2718ffb 100644 --- a/edsteva/viz/utils.py +++ b/edsteva/viz/utils.py @@ -15,11 +15,7 @@ def generate_main_chart( base: alt.Chart, main_chart_config: Dict[str, str], -<<<<<<< HEAD - index_selection: alt.Selection = None, -======= index_selection: alt.SelectionParameter = None, ->>>>>>> main index_fields: List[str] = None, x_axis_title: str = None, y_axis_title: str = None, @@ -47,10 +43,7 @@ def generate_main_chart( x=main_chart_config["encode"]["x"], y=main_chart_config["encode"]["y"], ) -<<<<<<< HEAD -======= ->>>>>>> main return main_chart.properties(**main_chart_config["properties"]) @@ -69,12 +62,7 @@ def generate_model_line( for filter in model_line_config["filters"]: model_line = model_line.transform_filter(**filter) model_line = model_line.encode(**model_line_config["encode"]) -<<<<<<< HEAD - - return model_line -======= return add_selection_on_legend(model_line) ->>>>>>> main def generate_error_line( @@ -84,11 +72,7 @@ def generate_error_line( error_line = main_chart.mark_errorband( **error_line_config["mark_errorband"] ).encode(**error_line_config["encode"]) -<<<<<<< HEAD - return error_line -======= return add_selection_on_legend(error_line, opacity_true=0.3, opacity_false=0.05) ->>>>>>> main def generate_probe_line( @@ -96,12 +80,7 @@ def generate_probe_line( probe_line_config: Dict[str, str], ): probe_line = main_chart.mark_line().encode(**probe_line_config["encode"]) -<<<<<<< HEAD - - return probe_line -======= return add_selection_on_legend(probe_line) ->>>>>>> main def generate_time_line( @@ -110,13 +89,7 @@ def generate_time_line( ): time_selection = alt.selection_interval(encodings=["x"]) time_line = ( -<<<<<<< HEAD - base.mark_line() - .encode(**time_line_config["encode"]) - .add_selection(time_selection) -======= base.mark_line().encode(**time_line_config["encode"]).add_params(time_selection) ->>>>>>> main ).properties(**time_line_config["properties"]) return time_line, time_selection @@ -125,38 +98,21 @@ def generate_horizontal_bar_charts( base: alt.Chart, horizontal_bar_charts_config: Dict[str, str], predictor: pd.DataFrame, -<<<<<<< HEAD - remove_singleton_bar_chart: bool, -======= ->>>>>>> main ): horizontal_bar_charts = {} y_variables_selections = {} for y_variable in horizontal_bar_charts_config["y"]: -<<<<<<< HEAD - if y_variable["field"] not in predictor.columns or ( - remove_singleton_bar_chart and predictor[y_variable["field"]].nunique() <= 1 - ): - continue - y_variable_bar_charts = [] - y_variable_selection = alt.selection_multi(fields=[y_variable["field"]]) -======= if y_variable["field"] not in predictor.columns: continue y_variable_bar_charts = [] y_variable_selection = alt.selection_point(fields=[y_variable["field"]]) ->>>>>>> main y_variables_selections[y_variable["field"]] = y_variable_selection y_variable_base_chart = ( base.mark_bar() .encode( y=alt.Y(**y_variable), ) -<<<<<<< HEAD - .add_selection(y_variable_selection) -======= .add_params(y_variable_selection) ->>>>>>> main ) for x_variable in horizontal_bar_charts_config["x"]: y_index_variable_color = alt.condition( @@ -183,38 +139,21 @@ def generate_vertical_bar_charts( base: alt.Chart, vertical_bar_charts_config: Dict[str, str], predictor: pd.DataFrame, -<<<<<<< HEAD - remove_singleton_bar_chart: bool, -======= ->>>>>>> main ): vertical_bar_charts = {} x_variables_selections = {} for x_variable in vertical_bar_charts_config["x"]: -<<<<<<< HEAD - if x_variable["field"] not in predictor.columns or ( - remove_singleton_bar_chart and predictor[x_variable["field"]].nunique() <= 1 - ): - continue - x_variable_bar_charts = [] - x_variable_selection = alt.selection_multi(fields=[x_variable["field"]]) -======= if x_variable["field"] not in predictor.columns: continue x_variable_bar_charts = [] x_variable_selection = alt.selection_point(fields=[x_variable["field"]]) ->>>>>>> main x_variables_selections[x_variable["field"]] = x_variable_selection x_variable_base_chart = ( base.mark_bar() .encode( x=alt.X(**x_variable), ) -<<<<<<< HEAD - .add_selection(x_variable_selection) -======= .add_params(x_variable_selection) ->>>>>>> main ) for y_variable in vertical_bar_charts_config["y"]: @@ -240,17 +179,9 @@ def generate_vertical_bar_charts( def add_interactive_selection( base: alt.Chart, -<<<<<<< HEAD - selections: Dict[str, alt.Selection], - selection_charts: Dict[str, List[alt.Chart]] = None, -): - if selection_charts is None: - selection_charts = {} -======= selections: Dict[str, alt.SelectionParameter], selection_charts: Dict[str, List[alt.Chart]], ): ->>>>>>> main for selection_variable, selection in selections.items(): base = base.transform_filter(selection) for chart_variable in selection_charts.keys(): @@ -262,11 +193,6 @@ def add_interactive_selection( return base -<<<<<<< HEAD -def add_estimates_filters( - base: alt.Chart, - estimates_filters: Dict[str, alt.Selection], -======= def add_selection_on_legend( chart: alt.Chart, opacity_true: float = 1, opacity_false: float = 0.2 ): @@ -281,7 +207,6 @@ def add_selection_on_legend( def add_estimates_filters( base: alt.Chart, estimates_filters: Dict[str, alt.SelectionParameter], ->>>>>>> main selection_charts: Dict[str, List[alt.Chart]] = None, ): if selection_charts is None: @@ -297,15 +222,6 @@ def add_estimates_filters( return base -<<<<<<< HEAD -def create_groupby_selection( - indexes: List[str], -): - index_fields = [index["field"] for index in indexes] - if len(index_fields) >= 2: - index_labels = [index["title"] for index in indexes] - index_selection = alt.selection_single( -======= def get_indexes_to_groupby( predictor_columns: List[str], predictor_metrics: List[str], @@ -333,16 +249,11 @@ def create_groupby_selection( index["title"] for index in indexes if index["field"] in predictor.columns ] index_selection = alt.selection_point( ->>>>>>> main fields=["index"], bind=alt.binding_radio( name="Group by: ", options=index_fields, labels=index_labels ), -<<<<<<< HEAD - init={"index": index_fields[0]}, -======= value=index_fields[0], ->>>>>>> main ) else: index_selection = None @@ -353,17 +264,6 @@ def configure_style( chart: alt.Chart, chart_style: Dict[str, float], ): -<<<<<<< HEAD - return chart.configure_axis( - labelFontSize=chart_style["labelFontSize"], - titleFontSize=chart_style["titleFontSize"], - labelLimit=500, - ).configure_legend( - labelFontSize=chart_style["labelFontSize"], - titleFontSize=chart_style["titleFontSize"], - labelLimit=500, - ) -======= if chart_style: chart = chart.configure_axis( labelFontSize=chart_style["labelFontSize"], @@ -375,7 +275,6 @@ def configure_style( labelLimit=500, ) return chart ->>>>>>> main def concatenate_charts( @@ -489,14 +388,8 @@ def save_html(obj: alt.Chart, filename: str): def round_up(x: float, sig: int): if x == 0: return 0 -<<<<<<< HEAD - else: - decimals = sig - floor(log10(abs(x))) - 1 - return ceil(x * 10**decimals) / 10**decimals -======= decimals = sig - floor(log10(abs(x))) - 1 return ceil(x * 10**decimals) / 10**decimals ->>>>>>> main def scale_it(x: float): @@ -585,8 +478,6 @@ def filter_predictor( value, ) -<<<<<<< HEAD -======= # Care site specialty if ( "care_site_specialty" in predictor.columns @@ -594,7 +485,6 @@ def filter_predictor( ): predictor = predictor.drop(columns="care_site_specialty") ->>>>>>> main if predictor.empty: raise TypeError("Empty predictor: no data to plot.") return predictor diff --git a/pyproject.toml b/pyproject.toml index 685e46f2..4dab14cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,6 @@ pgpasslib = "^1.1.0" psycopg2-binary = "^2.9.3" pyarrow = ">=0.15, <0.17.0" catalogue = "^2.0.8" -<<<<<<< HEAD -tqdm = "^4.65.0" -======= ->>>>>>> main [tool.poetry.group.dev.dependencies] black = "^23.1.0" diff --git a/tests/test_model.py b/tests/test_model.py index 9838988b..3ed7e7a7 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -1,8 +1,5 @@ -<<<<<<< HEAD import os -======= from pathlib import Path ->>>>>>> main import pandas as pd import pytest @@ -19,12 +16,6 @@ improve_performances() data_step = SyntheticData(seed=41, mode="step").generate() data_rect = SyntheticData(seed=41, mode="rect").generate() -<<<<<<< HEAD - - -def test_base_model(): -======= - def test_base_model(): data = data_step @@ -79,7 +70,6 @@ def test_base_model(): def test_step_function_visit_occurence(): ->>>>>>> main data = data_step visit = VisitProbe() visit.compute( @@ -99,7 +89,6 @@ def test_step_function_visit_occurence(): with pytest.raises(TypeError): visit_model.fit(pd.DataFrame({"test": [1, 2]})) -<<<<<<< HEAD visit_model.fit(probe=visit) with pytest.raises(Exception): visit_model.estimates = visit_model.estimates.iloc[0:0] @@ -160,7 +149,6 @@ def test_step_function_visit_occurence(): metric_functions="error_after_t0", ) -======= visit_model = StepFunction(algo="quantile") visit_model.fit( probe=visit, @@ -177,7 +165,6 @@ def test_step_function_visit_occurence(): metric_functions="error_after_t0", ) ->>>>>>> main simulation = data.visit_occurrence[ ["care_site_id", "t_0_min", "t_0_max"] ].drop_duplicates() diff --git a/tests/test_probes.py b/tests/test_probes.py index 55fab312..7c496e14 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -32,11 +32,7 @@ care_site_specialties="PSYCHIATRIE", specialties_sets=None, care_sites_sets={"All": ".*"}, -<<<<<<< HEAD - stay_durations=[1, 30], -======= length_of_stays=[1, 30], ->>>>>>> main note_types={"ALL": ".*"}, stay_types=None, diag_types=None, @@ -49,11 +45,7 @@ "entity 4": "A3", "entity 5": "A4", }, -<<<<<<< HEAD - concepts_codes=None, -======= concept_codes=None, ->>>>>>> main start_date=None, end_date=datetime(2020, 1, 1), test_save=False, @@ -70,13 +62,8 @@ care_site_specialties=None, specialties_sets={"All": ".*"}, care_sites_sets=None, -<<<<<<< HEAD - concepts_codes=["A0009", "A0209", "A3109"], - stay_durations=[1], -======= concept_codes=["A0009", "A0209", "A3109"], length_of_stays=[1], ->>>>>>> main note_types="CRH", stay_types="hospitalisés", diag_types="DP", @@ -99,22 +86,14 @@ care_site_specialties=["REA ADULTE", "PSYCHIATRIE"], specialties_sets=None, care_sites_sets=None, -<<<<<<< HEAD - stay_durations=None, -======= length_of_stays=None, ->>>>>>> main stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, note_types={"ALL": ".*", "CRH": "CRH", "Urg": "urg"}, diag_types={"ALL": ".*", "DP/DR": "DP|DR"}, condition_types={"ALL": ".*", "Cancer": "C"}, source_systems=["ORBIS"], concepts_sets=None, -<<<<<<< HEAD - concepts_codes=["A0009", "A0209", "A3109"], -======= concept_codes=["A0009", "A0209", "A3109"], ->>>>>>> main start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, @@ -127,13 +106,9 @@ def test_base_probe(data): visit = VisitProbe() with pytest.raises(Exception): -<<<<<<< HEAD - filter_valid_observations(data.care_site, "care_site") -======= filter_valid_observations( table=data.visit_occurrence, table_name="visit_occurrence" ) ->>>>>>> main with pytest.raises(AttributeError): visit.compute(data=data, care_site_levels=["fail"]) with pytest.raises(TypeError): @@ -156,36 +131,19 @@ def test_base_probe(data): # Test cache saving visit.reset_predictor() visit.save() -<<<<<<< HEAD - assert os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") -======= assert Path.is_file(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") ->>>>>>> main visit = VisitProbe() with pytest.raises(FileNotFoundError): visit.load("fail.pkl") visit.load() visit.delete() visit.delete("fail.pkl") -<<<<<<< HEAD - assert not os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") -======= assert not Path.is_file(CACHE_DIR / "edsteva" / "probes" / "visitprobe.pickle") ->>>>>>> main # Test target saving visit.save( name="TEst", ) -<<<<<<< HEAD - assert os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "test.pickle") - visit.delete() - assert not os.path.isfile(CACHE_DIR / "edsteva" / "probes" / "test.pickle") - visit.save( - path="test.pickle", - ) - assert os.path.isfile("test.pickle") -======= assert Path.is_file(CACHE_DIR / "edsteva" / "probes" / "test.pickle") visit.delete() assert not Path.is_file(CACHE_DIR / "edsteva" / "probes" / "test.pickle") @@ -193,7 +151,6 @@ def test_base_probe(data): path="test.pickle", ) assert Path.is_file(Path("test.pickle")) ->>>>>>> main visit = VisitProbe() visit.load("test.pickle") @@ -205,11 +162,7 @@ def test_base_probe(data): visit.reset_predictor() assert predictor.equals(visit.predictor) visit.delete() -<<<<<<< HEAD - assert not os.path.isfile("test.pickle") -======= assert not Path.is_file(Path("test.pickle")) ->>>>>>> main @pytest.mark.parametrize("data", [data_step, data_rect]) @@ -231,11 +184,7 @@ def test_compute_visit_probe(data, params): care_site_specialties=params["care_site_specialties"], care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], -<<<<<<< HEAD - stay_durations=params["stay_durations"], -======= length_of_stays=params["length_of_stays"], ->>>>>>> main ) # Care site levels @@ -343,25 +292,6 @@ def test_compute_visit_probe(data, params): assert visit.predictor.care_site_id.isin(care_site_filters).all() # Stay durations -<<<<<<< HEAD - if params["stay_durations"]: - if isinstance(params["stay_durations"], list): - min_duration = params["stay_durations"][0] - max_duration = params["stay_durations"][-1] - specialties_sets = [ - "Incomplete stay", - "<= {} days".format(min_duration), - ">= {} days".format(max_duration), - ] - n_duration = len(params["stay_durations"]) - for i in range(0, n_duration - 1): - min = params["stay_durations"][i] - max = params["stay_durations"][i + 1] - specialties_sets.append("{} days - {} days".format(min, max)) - assert set(visit.predictor.length_of_stay.unique()).issubset( - set(specialties_sets) - ) -======= if params["length_of_stays"] and isinstance(params["length_of_stays"], list): min_duration = params["length_of_stays"][0] max_duration = params["length_of_stays"][-1] @@ -378,7 +308,6 @@ def test_compute_visit_probe(data, params): assert set(visit.predictor.length_of_stay.unique()).issubset( set(specialties_sets) ) ->>>>>>> main # Viz config assert isinstance(visit.get_viz_config(viz_type="normalized_probe_plot"), dict) @@ -405,11 +334,7 @@ def test_compute_note_probe(data, params): care_site_specialties=params["care_site_specialties"], care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], -<<<<<<< HEAD - stay_durations=params["stay_durations"], -======= length_of_stays=params["length_of_stays"], ->>>>>>> main note_types=params["note_types"], ) @@ -502,25 +427,6 @@ def test_compute_note_probe(data, params): assert note.predictor.care_site_id.isin(care_site_filters).all() # Stay durations -<<<<<<< HEAD - if params["stay_durations"]: - if isinstance(params["stay_durations"], list): - min_duration = params["stay_durations"][0] - max_duration = params["stay_durations"][-1] - specialties_sets = [ - "Incomplete stay", - "<= {} days".format(min_duration), - ">= {} days".format(max_duration), - ] - n_duration = len(params["stay_durations"]) - for i in range(0, n_duration - 1): - min = params["stay_durations"][i] - max = params["stay_durations"][i + 1] - specialties_sets.append("{} days - {} days".format(min, max)) - assert set(note.predictor.length_of_stay.unique()).issubset( - set(specialties_sets) - ) -======= if params["length_of_stays"] and isinstance(params["length_of_stays"], list): min_duration = params["length_of_stays"][0] max_duration = params["length_of_stays"][-1] @@ -537,7 +443,6 @@ def test_compute_note_probe(data, params): assert set(note.predictor.length_of_stay.unique()).issubset( set(specialties_sets) ) ->>>>>>> main # Note type if params["note_types"]: @@ -590,11 +495,7 @@ def test_compute_condition_probe(data, params): care_site_specialties=params["care_site_specialties"], care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], -<<<<<<< HEAD - stay_durations=params["stay_durations"], -======= length_of_stays=params["length_of_stays"], ->>>>>>> main diag_types=params["diag_types"], condition_types=params["condition_types"], source_systems=params["source_systems"], @@ -710,25 +611,6 @@ def test_compute_condition_probe(data, params): assert condition.predictor.care_site_id.isin(care_site_filters).all() # Stay durations -<<<<<<< HEAD - if params["stay_durations"]: - if isinstance(params["stay_durations"], list): - min_duration = params["stay_durations"][0] - max_duration = params["stay_durations"][-1] - length_of_stays = [ - "Incomplete stay", - "<= {} days".format(min_duration), - ">= {} days".format(max_duration), - ] - n_duration = len(params["stay_durations"]) - for i in range(0, n_duration - 1): - min = params["stay_durations"][i] - max = params["stay_durations"][i + 1] - length_of_stays.append("{} days - {} days".format(min, max)) - assert set(condition.predictor.length_of_stay.unique()).issubset( - set(length_of_stays) - ) -======= if params["length_of_stays"] and isinstance(params["length_of_stays"], list): min_duration = params["length_of_stays"][0] max_duration = params["length_of_stays"][-1] @@ -745,7 +627,6 @@ def test_compute_condition_probe(data, params): assert set(condition.predictor.length_of_stay.unique()).issubset( set(length_of_stays) ) ->>>>>>> main # Diag type if params["diag_types"]: @@ -802,14 +683,9 @@ def test_compute_biology_probe(data, params): care_site_specialties=params["care_site_specialties"], care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], -<<<<<<< HEAD - stay_durations=params["stay_durations"], - concepts_sets=params["concepts_sets"], -======= length_of_stays=params["length_of_stays"], concepts_sets=params["concepts_sets"], concept_codes=params["concept_codes"], ->>>>>>> main ) # Care site levels @@ -901,25 +777,6 @@ def test_compute_biology_probe(data, params): assert biology.predictor.care_site_id.isin(care_site_filters).all() # Stay durations -<<<<<<< HEAD - if params["stay_durations"]: - if isinstance(params["stay_durations"], list): - min_duration = params["stay_durations"][0] - max_duration = params["stay_durations"][-1] - length_of_stays = [ - "Incomplete stay", - "<= {} days".format(min_duration), - ">= {} days".format(max_duration), - ] - n_duration = len(params["stay_durations"]) - for i in range(0, n_duration - 1): - min = params["stay_durations"][i] - max = params["stay_durations"][i + 1] - length_of_stays.append("{} days - {} days".format(min, max)) - assert set(biology.predictor.length_of_stay.unique()).issubset( - set(length_of_stays) - ) -======= if params["length_of_stays"] and isinstance(params["length_of_stays"], list): min_duration = params["length_of_stays"][0] max_duration = params["length_of_stays"][-1] @@ -936,7 +793,6 @@ def test_compute_biology_probe(data, params): assert set(biology.predictor.length_of_stay.unique()).issubset( set(length_of_stays) ) ->>>>>>> main # Concepts sets if params["concepts_sets"]: diff --git a/tests/test_synthetic.py b/tests/test_synthetic.py index 841060f4..47ffc98a 100644 --- a/tests/test_synthetic.py +++ b/tests/test_synthetic.py @@ -15,26 +15,14 @@ def test_bad_params(): -<<<<<<< HEAD - with pytest.raises(Exception): - SyntheticData(mean_visit=100, seed=41, mode="fail").generate() - with pytest.raises(Exception): -======= with pytest.raises(AttributeError): SyntheticData(mean_visit=100, seed=41, mode="fail").generate() with pytest.raises(AttributeError): ->>>>>>> main SyntheticData(mean_visit=100, seed=41, module="fail").generate() def test_convert(): -<<<<<<< HEAD - data_koalas = SyntheticData( - mean_visit=100, seed=41, mode="step", module="koalas" - ).generate() -======= data_koalas = SyntheticData(mean_visit=100, mode="step", module="koalas").generate() ->>>>>>> main for table in data_koalas.available_tables: assert isinstance(getattr(data_koalas, table), type(ks.DataFrame())) data_koalas.convert_to_koalas() diff --git a/tests/test_viz.py b/tests/test_viz.py index 7077fdac..0ba223cc 100644 --- a/tests/test_viz.py +++ b/tests/test_viz.py @@ -1,7 +1,4 @@ -<<<<<<< HEAD -======= import altair as alt ->>>>>>> main import pytest from edsteva import improve_performances @@ -9,10 +6,7 @@ from edsteva.models.rectangle_function import RectangleFunction from edsteva.models.step_function import StepFunction from edsteva.probes import BiologyProbe, ConditionProbe, NoteProbe, VisitProbe -<<<<<<< HEAD -======= from edsteva.probes.visit.viz_configs import viz_configs ->>>>>>> main from edsteva.viz.dashboards import normalized_probe_dashboard, probe_dashboard from edsteva.viz.plots import ( estimates_densities_plot, @@ -29,12 +23,7 @@ @pytest.fixture(scope="session") def tmp_dir(tmp_path_factory): -<<<<<<< HEAD - template_dir = tmp_path_factory.mktemp("Test") - return template_dir -======= return tmp_path_factory.mktemp("Test") ->>>>>>> main @pytest.mark.parametrize( @@ -98,8 +87,6 @@ def test_viz_fail(data, Model, Probe, tmp_dir): model.reset_estimates() -<<<<<<< HEAD -======= def test_custom_config(tmp_dir): probe = VisitProbe() probe.compute( @@ -185,7 +172,6 @@ def get_custom_filters(self): ) ->>>>>>> main @pytest.mark.parametrize( "data,Model", [ @@ -202,11 +188,7 @@ def get_custom_filters(self): VisitProbe, ], ) -<<<<<<< HEAD -def test_viz_visit(data, Model, Probe, tmp_dir): -======= def test_viz_probe(data, Model, Probe, tmp_dir): ->>>>>>> main probe = Probe() for completness_predictor in probe.available_completeness_predictors(): probe._completness_predictor = completness_predictor @@ -219,10 +201,7 @@ def test_viz_probe(data, Model, Probe, tmp_dir): care_site_short_names=["Hôpital-1", "Hôpital-2"], concepts_sets=None, note_types=None, -<<<<<<< HEAD -======= length_of_stays=None, ->>>>>>> main ) model = Model() model.fit( @@ -246,23 +225,15 @@ def test_viz_probe(data, Model, Probe, tmp_dir): probe_plot( probe=probe, care_site_level="Hospital", -<<<<<<< HEAD -======= stay_type="HC", care_site_id="1", care_site_short_name="Hôpital-1", care_site_specialty="Non renseigné", ->>>>>>> main start_date=data.t_min, end_date=data.t_max, x_axis_title="x_axis", y_axis_title="y_axis", -<<<<<<< HEAD - save_path=tmp_dir / "test.html", - care_site_specialty="Non Renseigné", -======= save_path=str(tmp_dir.resolve()) + "/test.html", ->>>>>>> main ) model.reset_estimates() From 2918806aaaf28262776c0e1f81e734df8d12372e Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Thu, 6 Jul 2023 12:00:53 +0200 Subject: [PATCH 042/127] solving conflicts --- edsteva/io/synthetic/synthetic.py | 10 +++++++++- pyproject.toml | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 775f4a86..c97906bc 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -75,6 +75,14 @@ ], person_id=[(str(i), 0.01) for i in range(100)], provenance_source_value=[("service d'urgence", 0.8), ("non renseigné", 0.2)], + stay_source_value=[ + ("MCO", 0.9), + ("Psychiatrie", 0.05), + ("SSR", 0.02), + ("SLD", 0.03), + ], + provenance_source_value=[("service d'urgence", 0.8), ("non renseigné", 0.2)], + ) OTHER_CONDITION_COLUMNS = dict( @@ -913,4 +921,4 @@ def list_available_tables(self) -> List[str]: for key, item in self.__dict__.items(): if isinstance(item, DataFrame.__args__): available_tables.append(key) - self.available_tables = available_tables + self.available_tables = available_tables \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 4dab14cc..865e80c6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ pgpasslib = "^1.1.0" psycopg2-binary = "^2.9.3" pyarrow = ">=0.15, <0.17.0" catalogue = "^2.0.8" +tqdm = "^4.65.0" [tool.poetry.group.dev.dependencies] black = "^23.1.0" From 7a912b7334e486f231af65c6a3d35c8996fd6795 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Thu, 6 Jul 2023 12:05:21 +0200 Subject: [PATCH 043/127] solving conflicts --- edsteva/probes/note/completeness_predictors/per_note.py | 2 +- edsteva/probes/visit/completeness_predictors/per_visit.py | 2 +- edsteva/probes/visit/visit.py | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 29330192..30f9983e 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -37,11 +37,11 @@ def compute_completeness_predictor_per_note( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], extra_data: Data, + length_of_stays: List[float], note_types: Union[str, Dict[str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], pmsi_type: Union[str, Dict[str, str]], - length_of_stays: List[float], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 836fd981..71bf4f90 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -130,7 +130,7 @@ def compute_completeness( self, visit_predictor: DataFrame, ): - partition_cols = self._index.copy() + ["date"] + partition_cols = [*self._index.copy(), "date"] n_visit = ( visit_predictor.groupby( diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 019a0cb7..92875b13 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -109,6 +109,8 @@ def compute_process( """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") + if length_of_stays is None and "length_of_stay" in self._index: + self._index.remove("length_of_stay") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") if age_list is None and "age_range" in self._index: From 8f389fabb7cf1542764a89ef44e57ffb066ab7e5 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Thu, 6 Jul 2023 13:23:48 +0200 Subject: [PATCH 044/127] solving conflicts --- edsteva/io/synthetic/synthetic.py | 209 ------------------------------ 1 file changed, 209 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index c97906bc..cd757f07 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -669,215 +669,6 @@ def _generate_measurement( other_columns=self.other_measurement_columns, ) - def _generate_concept( - self, n_entity: int = 5, units: List[str] = ["g", "g/l", "mol", "s"] - ): - loinc_concept_id = [] - loinc_itm_concept_id = [] - loinc_concept_code = [] - loinc_itm_concept_code = [] - anabio_concept_id = [] - anabio_itm_concept_id = [] - anabio_concept_code = [] - anabio_itm_concept_code = [] - src_concept_code = [] - loinc_concept_name = [] - loinc_itm_concept_name = [] - anabio_concept_name = [] - anabio_itm_concept_name = [] - src_concept_name = [] - concept_id_1 = [] - concept_id_2 = [] - relationship_id = [] - for i in range(n_entity): - n_loinc = np.random.randint(1, 4) - loinc_codes = [str(i) + str(j) + "-0" for j in range(n_loinc)] - loinc_concept_code.extend(loinc_codes) - loinc_concept_id.extend(loinc_codes) - unit_values = np.random.choice(units, n_loinc) - for loinc_code in loinc_codes: - unit_value = np.random.choice(unit_values) - loinc_concept_name.append("LOINC_" + loinc_code + "_" + unit_value) - has_loinc_itm = np.random.random() >= 0.5 - if has_loinc_itm: - loinc_id_itm = loinc_code + "_ITM" - loinc_itm_concept_code.append(loinc_code) - loinc_itm_concept_id.append(loinc_id_itm) - loinc_itm_concept_name.append( - "LOINC_" + loinc_id_itm + "_" + unit_value - ) - n_anabio = np.random.randint(1, 3) - supp_code = "9" if len(str(i)) == 1 else "" - anabio_codes = [ - "A" + loinc_code.split("-")[0] + str(j) + supp_code - for j in range(n_anabio) - ] - anabio_concept_code.extend(anabio_codes) - anabio_concept_id.extend(anabio_codes) - for anabio_code in anabio_codes: - anabio_concept_name.append( - "ANABIO_" + anabio_code + "_" + unit_value - ) - has_anabio_itm = np.random.random() >= 0.5 - if has_anabio_itm: - anabio_id_itm = anabio_code + "_ITM" - anabio_itm_concept_code.append(anabio_code) - anabio_itm_concept_id.append(anabio_id_itm) - anabio_itm_concept_name.append( - "ANABIO_" + anabio_id_itm + "_" + unit_value - ) - concept_id_1.extend([anabio_id_itm, anabio_code]) - concept_id_2.extend([anabio_code, anabio_id_itm]) - relationship_id.extend(["Maps to", "Mapped from"]) - if has_loinc_itm: - concept_id_1.extend([anabio_id_itm, loinc_id_itm]) - concept_id_2.extend([loinc_id_itm, anabio_id_itm]) - relationship_id.extend(["Maps to", "Mapped from"]) - n_src = np.random.randint(1, 3) - src_codes = [ - loinc_code + "-" + anabio_code + "-" + str(j) - for j in range(n_src) - ] - src_concept_code.extend(src_codes) - src_concept_name.extend( - ["SRC_" + src_code + "_" + unit_value for src_code in src_codes] - ) - for src_code in src_codes: - concept_id_1.extend( - [src_code, src_code, anabio_code, loinc_code] - ) - concept_id_2.extend( - [anabio_code, loinc_code, src_code, src_code] - ) - relationship_id.extend( - ["Maps to", "Maps to", "Mapped from", "Mapped from"] - ) - - src_vocabulary_id = ["Analyses Laboratoire"] * len(src_concept_code) - glims_anabio_vocabulary_id = ["GLIMS XXX Anabio"] * len(anabio_concept_id) - itm_anabio_vocabulary_id = ["ITM - ANABIO"] * len(anabio_itm_concept_id) - glims_loinc_vocabulary_id = ["GLIMS XXX LOINC"] * len(loinc_concept_id) - itm_loinc_vocabulary_id = ["ITM - LOINC"] * len(loinc_itm_concept_id) - - concept_id = ( - src_concept_code - + anabio_concept_id - + anabio_itm_concept_id - + loinc_concept_id - + loinc_itm_concept_id - ) - concept_code = ( - src_concept_code - + anabio_concept_code - + anabio_itm_concept_code - + loinc_concept_code - + loinc_itm_concept_code - ) - concept_name = ( - src_concept_name - + anabio_concept_name - + anabio_itm_concept_name - + loinc_concept_name - + loinc_itm_concept_name - ) - vocabulary_id = ( - src_vocabulary_id - + glims_anabio_vocabulary_id - + itm_anabio_vocabulary_id - + glims_loinc_vocabulary_id - + itm_loinc_vocabulary_id - ) - - concept = pd.DataFrame( - { - "concept_id": concept_id, - "concept_code": concept_code, - "concept_name": concept_name, - "vocabulary_id": vocabulary_id, - } - ) - - concept_relationship = pd.DataFrame( - { - "concept_id_1": concept_id_1, - "concept_id_2": concept_id_2, - "relationship_id": relationship_id, - } - ) - - return concept, concept_relationship, src_concept_name - - def _generate_measurement( - self, - visit_occurrence: pd.DataFrame, - hospital_ids: List[int], - src_concept_name: List[str], - mean_measurement: int = 1000, - units: List[str] = ["g", "g/l", "mol", "s"], - ): - t_min = self.t_min.timestamp() - t_max = self.t_max.timestamp() - measurements = [] - visit_occurrence = visit_occurrence.sample(frac=0.9) - for concept_name in src_concept_name: - concept_code = concept_name.split("_")[1] - unit = concept_name.split("_")[-1] - mean_value = (1 + units.index(unit)) * 2 - std_value = 1 - for care_site_id in hospital_ids: - t_start = t_min + np.random.randint(0, (t_max - t_min) / 20) - t_end = t_max - np.random.randint(0, (t_max - t_min) / 20) - valid_measurements = int( - np.random.normal(mean_measurement, mean_measurement / 5) - ) - missing_value = int(np.random.uniform(1, valid_measurements / 10)) - n_measurements = valid_measurements + missing_value - increase_time = np.random.randint( - (t_end - t_start) / 100, (t_end - t_start) / 10 - ) - increase_ratio = np.random.uniform(150, 200) - concept_code = concept_name.split("_")[1] - unit = concept_name.split("_")[-1] - mean_value = (1 + units.index(unit)) * 2 - std_value = 1 - params = dict( - t_start=t_start, - t_end=t_end, - n_events=n_measurements, - increase_ratio=increase_ratio, - increase_time=increase_time, - bio_date_col=self.bio_date_col, - unit=unit, - concept_code=concept_code, - mode=self.mode, - ) - measurement = generate_bio(**params) - visit_care_site = visit_occurrence[ - visit_occurrence.care_site_id == care_site_id - ] - measurement[self.id_visit_col] = ( - visit_care_site[self.id_visit_col] - .sample(n=measurement.shape[0], replace=True) - .reset_index(drop=True) - ) - measurement["value_as_number"] = [None] * missing_value + list( - np.random.normal( - mean_value, std_value, measurement.shape[0] - missing_value - ) - ) - measurements.append(measurement) - - measurements = pd.concat(measurements).reset_index(drop=True) - measurements["value_source_value"] = ( - measurements["value_as_number"].astype(str) - + " " - + measurements["unit_source_value"].astype(str) - ) - measurements[self.id_bio_col] = range(measurements.shape[0]) - measurements = add_other_columns(measurements, self.other_measurement_columns) - - return measurements - def convert_to_koalas(self): if isinstance(self.care_site, ks.frame.DataFrame): logger.info("Module is already Koalas!") From 3cd4a1c281bf21b2dbb7573aedfd02122d8cbdd7 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Thu, 6 Jul 2023 11:38:31 +0000 Subject: [PATCH 045/127] black correction --- edsteva/io/synthetic/synthetic.py | 10 +- .../note/completeness_predictors/per_note.py | 2 +- edsteva/probes/utils/filter_df.py | 7 +- edsteva/probes/utils/prepare_df.py | 6 +- poetry.lock | 340 +++++++++++------- tests/test_model.py | 75 +--- 6 files changed, 230 insertions(+), 210 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index cd757f07..44d9fc5e 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -75,14 +75,6 @@ ], person_id=[(str(i), 0.01) for i in range(100)], provenance_source_value=[("service d'urgence", 0.8), ("non renseigné", 0.2)], - stay_source_value=[ - ("MCO", 0.9), - ("Psychiatrie", 0.05), - ("SSR", 0.02), - ("SLD", 0.03), - ], - provenance_source_value=[("service d'urgence", 0.8), ("non renseigné", 0.2)], - ) OTHER_CONDITION_COLUMNS = dict( @@ -712,4 +704,4 @@ def list_available_tables(self) -> List[str]: for key, item in self.__dict__.items(): if isinstance(item, DataFrame.__args__): available_tables.append(key) - self.available_tables = available_tables \ No newline at end of file + self.available_tables = available_tables diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 30f9983e..4ce703b4 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -74,7 +74,7 @@ def compute_completeness_predictor_per_note( provenance_source=provenance_source, person=person, age_list=age_list, - ).drop(columns=["visit_occurrence_source_value", "date"]) + ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( data=data, diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index fcd34b62..d030d362 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -1,3 +1,4 @@ +import itertools from datetime import datetime, timedelta from typing import Dict, List, Union @@ -236,7 +237,7 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): visit_occurrence.age <= age_list[0], "age_range" ] = f"age <= {age_list[0]}" - for age_min, age_max in zip(age_list[:-1], age_list[1:]): + for age_min, age_max in itertools.pairwise(age_list[:-1], age_list[1:]): in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" @@ -244,9 +245,7 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): visit_occurrence.age > age_list[-1], "age_range" ] = f"age > {age_list[-1]}" - visit_occurrence = visit_occurrence.drop(columns="age") - - return visit_occurrence + return visit_occurrence.drop(columns="age") def convert_uf_to_pole( diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index e1fc2cf9..9a345d79 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -10,8 +10,8 @@ from .filter_df import ( filter_table_by_age, - filter_table_by_date, filter_table_by_care_site, + filter_table_by_date, filter_table_by_length_of_stay, filter_table_by_type, filter_valid_observations, @@ -697,6 +697,4 @@ def prepare_person( df_name="person", ) - person = data.person[person_columns] - - return person + return data.person[person_columns] diff --git a/poetry.lock b/poetry.lock index 93df7494..a4c1e709 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,13 +1,10 @@ -<<<<<<< HEAD # This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. -======= -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. ->>>>>>> main [[package]] name = "aiofiles" version = "22.1.0" description = "File support for asyncio." +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -19,6 +16,7 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -37,6 +35,7 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] name = "altair" version = "5.0.1" description = "Vega-Altair: A declarative statistical visualization library for Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -59,13 +58,14 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " [[package]] name = "anyio" -version = "3.7.0" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] @@ -75,7 +75,7 @@ sniffio = ">=1.1" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] @@ -83,6 +83,7 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = false python-versions = "*" files = [ @@ -94,6 +95,7 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -114,6 +116,7 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -151,6 +154,7 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -166,6 +170,7 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -187,10 +192,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -<<<<<<< HEAD category = "dev" -======= ->>>>>>> main optional = false python-versions = ">=3.7" files = [ @@ -205,6 +207,7 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" +category = "main" optional = false python-versions = "*" files = [ @@ -216,6 +219,7 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" +category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -234,6 +238,7 @@ lxml = ["lxml"] name = "black" version = "23.3.0" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -284,6 +289,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -302,6 +308,7 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cached-property" version = "1.5.2" description = "A decorator for caching properties in classes." +category = "dev" optional = false python-versions = "*" files = [ @@ -313,7 +320,6 @@ files = [ name = "catalogue" version = "2.0.8" description = "Super lightweight function registries for your library" -<<<<<<< HEAD category = "main" optional = false python-versions = ">=3.6" @@ -334,26 +340,6 @@ category = "dev" optional = false python-versions = ">=3.6" files = [ -======= -optional = false -python-versions = ">=3.6" -files = [ - {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, - {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} - -[[package]] -name = "certifi" -version = "2023.5.7" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ ->>>>>>> main {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] @@ -362,6 +348,7 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." +category = "dev" optional = false python-versions = "*" files = [ @@ -438,6 +425,7 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -449,6 +437,7 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -533,6 +522,7 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -548,6 +538,7 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -559,6 +550,7 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -634,6 +626,7 @@ toml = ["tomli"] name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -661,6 +654,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -672,6 +666,7 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -683,6 +678,7 @@ files = [ name = "distlib" version = "0.3.6" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -694,6 +690,7 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -703,22 +700,14 @@ files = [ [[package]] name = "exceptiongroup" -<<<<<<< HEAD -version = "1.1.1" -======= version = "1.1.2" ->>>>>>> main description = "Backport of PEP 654 (exception groups)" +category = "dev" optional = false python-versions = ">=3.7" files = [ -<<<<<<< HEAD - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, -======= {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ->>>>>>> main ] [package.extras] @@ -728,6 +717,7 @@ test = ["pytest (>=6)"] name = "fastjsonschema" version = "2.17.1" description = "Fastest Python implementation of JSON schema" +category = "dev" optional = false python-versions = "*" files = [ @@ -742,6 +732,7 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.12.2" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -757,6 +748,7 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -771,6 +763,7 @@ cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." +category = "dev" optional = false python-versions = "*" files = [ @@ -788,6 +781,7 @@ dev = ["flake8", "markdown", "twine", "wheel"] name = "gitdb" version = "4.0.10" description = "Git Object Database" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -802,10 +796,7 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.31" description = "GitPython is a Python library used to interact with Git repositories" -<<<<<<< HEAD category = "dev" -======= ->>>>>>> main optional = false python-versions = ">=3.7" files = [ @@ -819,22 +810,14 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "griffe" -<<<<<<< HEAD -version = "0.29.1" -======= version = "0.30.1" ->>>>>>> main description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" optional = false python-versions = ">=3.7" files = [ -<<<<<<< HEAD - {file = "griffe-0.29.1-py3-none-any.whl", hash = "sha256:f9edae6b9bb2eb205bebbdd0512a162713b9342ff6e32dc596d95ff64aa71c1f"}, - {file = "griffe-0.29.1.tar.gz", hash = "sha256:460188b719e363019d0d0f4bf2d9f05cf2df24960b42a4138a1524a17b100d9b"}, -======= {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, ->>>>>>> main ] [package.dependencies] @@ -845,6 +828,7 @@ colorama = ">=0.4" name = "identify" version = "2.5.24" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -859,6 +843,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -870,6 +855,7 @@ files = [ name = "importlib-metadata" version = "6.7.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -890,6 +876,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -908,6 +895,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -919,6 +907,7 @@ files = [ name = "ipykernel" version = "6.16.2" description = "IPython Kernel for Jupyter" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -947,6 +936,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "p name = "ipython" version = "7.34.0" description = "IPython: Productive Interactive Computing" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -983,6 +973,7 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" +category = "dev" optional = false python-versions = "*" files = [ @@ -994,6 +985,7 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1008,6 +1000,7 @@ arrow = ">=0.15.0" name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1027,6 +1020,7 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.0.3" description = "A very fast and expressive template engine." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1044,6 +1038,7 @@ i18n = ["Babel (>=2.7)"] name = "json5" version = "0.9.14" description = "A Python implementation of the JSON5 data format." +category = "dev" optional = false python-versions = "*" files = [ @@ -1058,6 +1053,7 @@ dev = ["hypothesis"] name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ @@ -1069,6 +1065,7 @@ files = [ name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1100,6 +1097,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1124,6 +1122,7 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com name = "jupyter-core" version = "4.12.0" description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1142,6 +1141,7 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1166,6 +1166,7 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-server" version = "1.24.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1178,7 +1179,7 @@ anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbconvert = ">=6.4.4" nbformat = ">=5.2.0" packaging = "*" @@ -1198,6 +1199,7 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console name = "jupyter-server-fileid" version = "0.9.0" description = "" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1217,6 +1219,7 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1236,6 +1239,7 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.4" description = "Document structures for collaborative editing using Ypy" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1255,6 +1259,7 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.5" description = "JupyterLab computational environment" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1283,6 +1288,7 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1294,6 +1300,7 @@ files = [ name = "jupyterlab-rise" version = "0.2.0" description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1311,6 +1318,7 @@ test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-t name = "jupyterlab-server" version = "2.23.0" description = "A set of server components for JupyterLab and JupyterLab like applications." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1337,6 +1345,7 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "koalas" version = "1.8.2" description = "Koalas: pandas API on Apache Spark" +category = "main" optional = false python-versions = ">=3.5,<3.10" files = [ @@ -1359,6 +1368,7 @@ spark = ["pyspark (>=2.4.0)"] name = "latexcodec" version = "2.0.1" description = "A lexer and codec to work with LaTeX code in Python." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1373,6 +1383,7 @@ six = ">=1.4.1" name = "loguru" version = "0.7.0" description = "Python logging made (stupidly) simple" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1391,6 +1402,7 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1408,6 +1420,7 @@ testing = ["coverage", "pyyaml"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1467,6 +1480,7 @@ files = [ name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1481,6 +1495,7 @@ traitlets = "*" name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1492,6 +1507,7 @@ files = [ name = "mike" version = "1.1.2" description = "Manage multiple versions of your MkDocs-powered documentation" +category = "dev" optional = false python-versions = "*" files = [ @@ -1513,10 +1529,7 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"] name = "mistune" version = "3.0.1" description = "A sane and fast Markdown parser with useful plugins and renderers" -<<<<<<< HEAD category = "dev" -======= ->>>>>>> main optional = false python-versions = ">=3.7" files = [ @@ -1528,6 +1541,7 @@ files = [ name = "mkdocs" version = "1.4.3" description = "Project documentation with Markdown." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1557,6 +1571,7 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp name = "mkdocs-autorefs" version = "0.4.1" description = "Automatically link across pages in MkDocs." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1570,20 +1585,13 @@ mkdocs = ">=1.1" [[package]] name = "mkdocs-bibtex" -<<<<<<< HEAD -version = "2.9.0" -======= version = "2.11.0" ->>>>>>> main description = "An MkDocs plugin that enables managing citations with BibTex" +category = "dev" optional = false python-versions = ">=3.6" files = [ -<<<<<<< HEAD - {file = "mkdocs-bibtex-2.9.0.tar.gz", hash = "sha256:a3affdbdcf8f4e78155b9e2e92bd4b579f994821bdb7a6fd700cbbaa42a87585"}, -======= {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, ->>>>>>> main ] [package.dependencies] @@ -1597,6 +1605,7 @@ validators = ">=0.19.0" name = "mkdocs-charts-plugin" version = "0.0.9" description = "MkDocs plugin to add charts from data" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1612,6 +1621,7 @@ pymdown-extensions = ">=9.2" name = "mkdocs-gen-files" version = "0.3.5" description = "MkDocs plugin to programmatically generate documentation pages during the build" +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -1626,6 +1636,7 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-img2fig-plugin" version = "0.9.3" description = "A MkDocs plugin that converts markdown encoded images into
elements." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1639,6 +1650,7 @@ mkdocs = "*" name = "mkdocs-literate-nav" version = "0.4.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1653,6 +1665,7 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-markdown-filter" version = "0.1.1" description = "A MkDocs plugin to add a markdown filter to jinja templates." +category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -1665,22 +1678,14 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -<<<<<<< HEAD -version = "9.1.17" -======= version = "9.1.18" ->>>>>>> main description = "Documentation that simply works" +category = "dev" optional = false python-versions = ">=3.7" files = [ -<<<<<<< HEAD - {file = "mkdocs_material-9.1.17-py3-none-any.whl", hash = "sha256:809ed68427fbab0330b0b07bc93175824c3b98f4187060a5c7b46aa8ae398a75"}, - {file = "mkdocs_material-9.1.17.tar.gz", hash = "sha256:5a076524625047bf4ee4da1509ec90626f8fce915839dc07bdae6b59ff4f36f9"}, -======= {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, ->>>>>>> main ] [package.dependencies] @@ -1698,6 +1703,7 @@ requests = ">=2.26" name = "mkdocs-material-extensions" version = "1.1.1" description = "Extension pack for Python Markdown and MkDocs Material." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1709,6 +1715,7 @@ files = [ name = "mkdocs-section-index" version = "0.3.4" description = "MkDocs plugin to allow clickable sections that lead to an index page" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1723,6 +1730,7 @@ mkdocs = ">=1.1,<2.0" name = "mkdocstrings" version = "0.19.0" description = "Automatic documentation from sources, for MkDocs." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1747,6 +1755,7 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] name = "mkdocstrings-python" version = "0.8.2" description = "A Python handler for mkdocstrings." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1762,6 +1771,7 @@ mkdocstrings = ">=0.19" name = "mknotebooks" version = "0.7.1" description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." +category = "dev" optional = false python-versions = "*" files = [ @@ -1779,6 +1789,7 @@ nbconvert = ">=6.0.0" name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1790,6 +1801,7 @@ files = [ name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1825,6 +1837,7 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1834,7 +1847,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbformat = ">=5.1" traitlets = ">=5.3" @@ -1847,6 +1860,7 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p name = "nbconvert" version = "7.6.0" description = "Converting Jupyter Notebooks" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1885,6 +1899,7 @@ webpdf = ["pyppeteer (>=1,<1.1)"] name = "nbformat" version = "5.8.0" description = "The Jupyter Notebook format" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1907,6 +1922,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1918,6 +1934,7 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1932,6 +1949,7 @@ setuptools = "*" name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1966,6 +1984,7 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1983,6 +2002,7 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.19.5" description = "NumPy is the fundamental package for array computing with Python." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2026,6 +2046,7 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2037,6 +2058,7 @@ files = [ name = "pandas" version = "1.3.3" description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2075,6 +2097,7 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandas" version = "1.3.5" description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2107,7 +2130,7 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, + {version = ">=1.17.3", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, ] python-dateutil = ">=2.7.3" @@ -2120,6 +2143,7 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2131,6 +2155,7 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2146,6 +2171,7 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2157,6 +2183,7 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = false python-versions = "*" files = [ @@ -2171,6 +2198,7 @@ ptyprocess = ">=0.5" name = "pgpasslib" version = "1.1.0" description = "Library for getting passwords from PostgreSQL password files" +category = "main" optional = false python-versions = "*" files = [ @@ -2182,6 +2210,7 @@ files = [ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" +category = "main" optional = false python-versions = "*" files = [ @@ -2193,6 +2222,7 @@ files = [ name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2204,6 +2234,7 @@ files = [ name = "platformdirs" version = "3.8.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2222,6 +2253,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2240,6 +2272,7 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2259,6 +2292,7 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.17.0" description = "Python client for the Prometheus monitoring system." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2271,13 +2305,14 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" +category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -2287,6 +2322,7 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2313,6 +2349,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psycopg2-binary" version = "2.9.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2384,6 +2421,7 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -2395,6 +2433,7 @@ files = [ name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2406,6 +2445,7 @@ files = [ name = "py4j" version = "0.10.7" description = "Enables Python programs to dynamically access arbitrary Java objects" +category = "main" optional = false python-versions = "*" files = [ @@ -2417,6 +2457,7 @@ files = [ name = "pyarrow" version = "0.16.0" description = "Python library for Apache Arrow" +category = "main" optional = false python-versions = "*" files = [ @@ -2456,6 +2497,7 @@ six = ">=1.0.0" name = "pybtex" version = "0.24.0" description = "A BibTeX-compatible bibliography processor in Python" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" files = [ @@ -2475,6 +2517,7 @@ test = ["pytest"] name = "pycparser" version = "2.21" description = "C parser in Python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2486,6 +2529,7 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2500,6 +2544,7 @@ plugins = ["importlib-metadata"] name = "pylic" version = "3.5.0" description = "A Python license checker" +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -2515,6 +2560,7 @@ toml = ">=0.10.2,<0.11.0" name = "pymdown-extensions" version = "10.0.1" description = "Extension pack for Python Markdown." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2530,6 +2576,7 @@ pyyaml = "*" name = "pypandoc" version = "1.7.5" description = "Thin wrapper for pandoc." +category = "dev" optional = false python-versions = "^2.7 || ^3.6" files = [ @@ -2540,6 +2587,7 @@ files = [ name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2576,6 +2624,7 @@ files = [ name = "pyspark" version = "2.4.8" description = "Apache Spark Python API" +category = "main" optional = false python-versions = "*" files = [ @@ -2594,6 +2643,7 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2617,6 +2667,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2635,6 +2686,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-html" version = "3.2.0" description = "pytest plugin for generating HTML reports" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2651,6 +2703,7 @@ pytest-metadata = "*" name = "pytest-metadata" version = "3.0.0" description = "pytest plugin for test session metadata" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2668,6 +2721,7 @@ test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (> name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2682,6 +2736,7 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2693,6 +2748,7 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -2704,6 +2760,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "dev" optional = false python-versions = "*" files = [ @@ -2727,6 +2784,7 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2742,6 +2800,7 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2791,6 +2850,7 @@ files = [ name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2805,6 +2865,7 @@ pyyaml = "*" name = "pyzmq" version = "25.1.0" description = "Python bindings for 0MQ" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2894,6 +2955,7 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "regex" version = "2023.6.3" description = "Alternative regular expression module, to replace re." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2991,6 +3053,7 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3012,6 +3075,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3026,6 +3090,7 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3037,6 +3102,7 @@ files = [ name = "ruff" version = "0.0.275" description = "An extremely fast Python linter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3063,10 +3129,7 @@ files = [ name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -<<<<<<< HEAD category = "dev" -======= ->>>>>>> main optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -3083,6 +3146,7 @@ win32 = ["pywin32"] name = "setuptools" version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3099,6 +3163,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3110,6 +3175,7 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3121,6 +3187,7 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3132,6 +3199,7 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3143,6 +3211,7 @@ files = [ name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3163,6 +3232,7 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "termynal" version = "0.2.0" description = "" +category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -3180,6 +3250,7 @@ mkdocs = ["mkdocs"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3198,6 +3269,7 @@ test = ["flake8", "isort", "pytest"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3209,6 +3281,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3220,6 +3293,7 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3231,6 +3305,7 @@ files = [ name = "tornado" version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" optional = false python-versions = ">= 3.7" files = [ @@ -3272,6 +3347,7 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3285,61 +3361,72 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typed-ast" -version = "1.5.4" +version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, + {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, + {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, + {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, + {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, + {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, + {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, + {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, + {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, + {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, ] [[package]] name = "typing-extensions" -<<<<<<< HEAD -version = "4.7.0" -======= version = "4.7.1" ->>>>>>> main description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" optional = false python-versions = ">=3.7" files = [ -<<<<<<< HEAD - {file = "typing_extensions-4.7.0-py3-none-any.whl", hash = "sha256:5d8c9dac95c27d20df12fb1d97b9793ab8b2af8a3a525e68c80e21060c161771"}, - {file = "typing_extensions-4.7.0.tar.gz", hash = "sha256:935ccf31549830cda708b42289d44b6f74084d616a00be651601a4f968e77c82"}, -======= {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ->>>>>>> main ] [[package]] name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3354,6 +3441,7 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3371,6 +3459,7 @@ zstd = ["zstandard (>=0.18.0)"] name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." +category = "dev" optional = false python-versions = ">=3.4" files = [ @@ -3387,6 +3476,7 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "verspec" version = "0.1.0" description = "Flexible version handling" +category = "dev" optional = false python-versions = "*" files = [ @@ -3401,6 +3491,7 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] name = "virtualenv" version = "20.23.1" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3422,6 +3513,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3461,6 +3553,7 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -3472,10 +3565,7 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -<<<<<<< HEAD category = "dev" -======= ->>>>>>> main optional = false python-versions = ">=3.7" files = [ @@ -3491,6 +3581,7 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "dev" optional = false python-versions = "*" files = [ @@ -3502,6 +3593,7 @@ files = [ name = "websocket-client" version = "1.6.1" description = "WebSocket client for Python with low level API options" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3518,6 +3610,7 @@ test = ["websockets"] name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3532,6 +3625,7 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] name = "y-py" version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" +category = "dev" optional = false python-versions = "*" files = [ @@ -3607,6 +3701,7 @@ files = [ name = "ypy-websocket" version = "0.8.2" description = "WebSocket connector for Ypy" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3626,6 +3721,7 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3640,8 +3736,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -<<<<<<< HEAD -content-hash = "00ed480391f1b77786b49df51586eb9b39337407db0d606373697cae91d7bac1" -======= -content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" ->>>>>>> main +content-hash = "9f999141a04c26b3a43442eb43612080d241b9caa9a842c3b507f595cc1ba874" diff --git a/tests/test_model.py b/tests/test_model.py index 3ed7e7a7..1e0c0595 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -1,4 +1,3 @@ -import os from pathlib import Path import pandas as pd @@ -9,7 +8,6 @@ from edsteva.models.rectangle_function import RectangleFunction from edsteva.models.step_function import StepFunction from edsteva.probes import NoteProbe, VisitProbe -from edsteva.utils.loss_functions import l1_loss pytestmark = pytest.mark.filterwarnings("ignore") @@ -17,6 +15,7 @@ data_step = SyntheticData(seed=41, mode="step").generate() data_rect = SyntheticData(seed=41, mode="rect").generate() + def test_base_model(): data = data_step visit = VisitProbe() @@ -97,88 +96,28 @@ def test_step_function_visit_occurence(): visit_model.reset_estimates() # Test Cache saving visit_model.save() - assert os.path.isfile(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") + assert Path.is_file(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") visit_model = StepFunction() visit_model.load() visit_model.delete() - assert not os.path.isfile(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") + assert not Path.is_file(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") # Test target saving visit_model.save( name="Test", ) - assert os.path.isfile(CACHE_DIR / "edsteva" / "models" / "test.pickle") + assert Path.is_file(CACHE_DIR / "edsteva" / "models" / "test.pickle") visit_model.delete() - assert not os.path.isfile(CACHE_DIR / "edsteva" / "models" / "test.pickle") + assert not Path.is_file(CACHE_DIR / "edsteva" / "models" / "test.pickle") visit_model.save( path="test.pickle", ) - assert os.path.isfile("test.pickle") + assert Path.is_file("test.pickle") visit_model = StepFunction() visit_model.load("test.pickle") visit_model.delete() - assert not os.path.isfile("test.pickle") - - -def test_step_function_visit_occurence(): - data = data_step - visit = VisitProbe() - visit.compute( - data=data, - start_date=data.t_min, - end_date=data.t_max, - stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, - care_site_ids=["1", "2"], - care_site_short_names=["Hôpital-1", "Hôpital-2"], - ) - - visit_model = StepFunction(algo="quantile") - visit_model.fit( - probe=visit, - metric_functions=["error", "error_after_t0"], - start_date=data.t_min, - end_date=data.t_max, - ) - visit_model = StepFunction(algo="loss_minimization") - visit_model.fit(probe=visit, loss_function=l1_loss) - visit_model.fit( - probe=visit, - start_date=data.t_min, - end_date=data.t_max, - metric_functions="error_after_t0", - ) - - visit_model = StepFunction(algo="quantile") - visit_model.fit( - probe=visit, - metric_functions=["error", "error_after_t0"], - start_date=data.t_min, - end_date=data.t_max, - ) - visit_model = StepFunction(algo="loss_minimization") - visit_model.fit(probe=visit, loss_function=l1_loss) - visit_model.fit( - probe=visit, - start_date=data.t_min, - end_date=data.t_max, - metric_functions="error_after_t0", - ) - - simulation = data.visit_occurrence[ - ["care_site_id", "t_0_min", "t_0_max"] - ].drop_duplicates() - model = visit_model.estimates[["care_site_id", "t_0"]].drop_duplicates() - prediction = simulation.merge(model, on="care_site_id") - prediction["t_0_min"] = pd.to_datetime( - prediction["t_0_min"], unit="s" - ) - pd.DateOffset(months=2) - prediction["t_0_max"] = pd.to_datetime( - prediction["t_0_max"], unit="s" - ) + pd.DateOffset(months=2) - true_t0_min = prediction["t_0_min"] <= prediction["t_0"] - true_t0_max = prediction["t_0_max"] >= prediction["t_0"] - assert (true_t0_min & true_t0_max).all() + assert not Path.is_file("test.pickle") def test_rect_function_visit_occurence(): From 325e80c86f67cbf90aca92e00dfac52d11dd7582 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Thu, 6 Jul 2023 11:43:18 +0000 Subject: [PATCH 046/127] black correction --- tests/test_model.py | 63 ++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/tests/test_model.py b/tests/test_model.py index 1e0c0595..407d697d 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -8,6 +8,7 @@ from edsteva.models.rectangle_function import RectangleFunction from edsteva.models.step_function import StepFunction from edsteva.probes import NoteProbe, VisitProbe +from edsteva.utils.loss_functions import l1_loss pytestmark = pytest.mark.filterwarnings("ignore") @@ -79,45 +80,37 @@ def test_step_function_visit_occurence(): care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], ) - visit_model = StepFunction(algo="quantile") - with pytest.raises(Exception): - visit_model.is_computed_estimates() - with pytest.raises(Exception): - visit_model.estimates = "fail" - visit_model.is_computed_estimates() - with pytest.raises(TypeError): - visit_model.fit(pd.DataFrame({"test": [1, 2]})) - - visit_model.fit(probe=visit) - with pytest.raises(Exception): - visit_model.estimates = visit_model.estimates.iloc[0:0] - visit_model.is_computed_estimates() - visit_model.reset_estimates() - # Test Cache saving - visit_model.save() - assert Path.is_file(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") - visit_model = StepFunction() - visit_model.load() - visit_model.delete() - assert not Path.is_file(CACHE_DIR / "edsteva" / "models" / "stepfunction.pickle") - - # Test target saving - visit_model.save( - name="Test", + visit_model = StepFunction(algo="quantile") + visit_model.fit( + probe=visit, + metric_functions=["error", "error_after_t0"], + start_date=data.t_min, + end_date=data.t_max, ) - assert Path.is_file(CACHE_DIR / "edsteva" / "models" / "test.pickle") - visit_model.delete() - assert not Path.is_file(CACHE_DIR / "edsteva" / "models" / "test.pickle") - visit_model.save( - path="test.pickle", + visit_model = StepFunction(algo="loss_minimization") + visit_model.fit(probe=visit, loss_function=l1_loss) + visit_model.fit( + probe=visit, + start_date=data.t_min, + end_date=data.t_max, + metric_functions="error_after_t0", ) - assert Path.is_file("test.pickle") - visit_model = StepFunction() - visit_model.load("test.pickle") - visit_model.delete() - assert not Path.is_file("test.pickle") + simulation = data.visit_occurrence[ + ["care_site_id", "t_0_min", "t_0_max"] + ].drop_duplicates() + model = visit_model.estimates[["care_site_id", "t_0"]].drop_duplicates() + prediction = simulation.merge(model, on="care_site_id") + prediction["t_0_min"] = pd.to_datetime( + prediction["t_0_min"], unit="s" + ) - pd.DateOffset(months=2) + prediction["t_0_max"] = pd.to_datetime( + prediction["t_0_max"], unit="s" + ) + pd.DateOffset(months=2) + true_t0_min = prediction["t_0_min"] <= prediction["t_0"] + true_t0_max = prediction["t_0_max"] >= prediction["t_0"] + assert (true_t0_min & true_t0_max).all() def test_rect_function_visit_occurence(): From 1cbe6b1517dac8b2fd97f0bb3de978d9a632132d Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Thu, 6 Jul 2023 14:44:38 +0000 Subject: [PATCH 047/127] tests correction --- edsteva/probes/biology/biology.py | 2 ++ .../completeness_predictors/per_visit.py | 10 +++++- edsteva/probes/condition/condition.py | 2 ++ edsteva/probes/note/note.py | 2 ++ edsteva/probes/utils/prepare_df.py | 16 ++++------ .../completeness_predictors/per_visit.py | 31 +++++++++++++++++-- edsteva/probes/visit/visit.py | 2 ++ 7 files changed, 51 insertions(+), 14 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 75ef7d74..8349dfb6 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -165,6 +165,8 @@ def compute_process( self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") + if pmsi_type is None and "pmsi_type" in self._index: + self._index.remove("pmsi_type") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") if concepts_sets is None and "concepts_set" in self._index: diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 36ab7a55..f5062c53 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -241,7 +241,15 @@ def get_uf_visit( visit_detail = visit_detail.merge( visit_occurrence[ visit_occurrence.columns.intersection( - set(["visit_occurrence_id", "length_of_stay", "stay_type"]) + set( + [ + "visit_occurrence_id", + "length_of_stay", + "stay_type", + "pmsi_type", + "provenance_source", + ] + ) ) ], on="visit_occurrence_id", diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index 20e3c5a3..4b54aab2 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -130,6 +130,8 @@ def compute_process( self._index.remove("condition_type") if age_list is None and "age_range" in self._index: self._index.remove("age_range") + if pmsi_type is None and "pmsi_type" in self._index: + self._index.remove("pmsi_type") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 69a1efdc..4bec87bf 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -130,6 +130,8 @@ def compute_process( self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") + if pmsi_type is None and "pmsi_type" in self._index: + self._index.remove("pmsi_type") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 9a345d79..3f434338 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -49,6 +49,12 @@ def prepare_visit_occurrence( ) visit_occurrence = data.visit_occurrence[required_columns] + visit_occurrence = filter_valid_observations( + table=visit_occurrence, + table_name="visit_occurrence", + invalid_naming="supprimé", + ) + visit_occurrence = filter_table_by_type( table=visit_occurrence, table_name="visit_occurrence", @@ -65,16 +71,6 @@ def prepare_visit_occurrence( target_col="provenance_source", ) - visit_occurrence = visit_occurrence.rename( - columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} - ) - - visit_occurrence = filter_valid_observations( - table=visit_occurrence, - table_name="visit_occurrence", - invalid_naming="supprimé", - ) - if length_of_stays: visit_occurrence = filter_table_by_length_of_stay( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 71bf4f90..9576f0f5 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -80,6 +80,7 @@ def compute_completeness_predictor_per_visit( visit_occurrence, care_site, ) + hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] visit_predictor_by_level = {hospital_name: hospital_visit} @@ -199,7 +200,15 @@ def get_uf_visit( uf_visit = uf_visit.merge( visit_occurrence[ visit_occurrence.columns.intersection( - set(["visit_occurrence_id", "length_of_stay", "stay_type"]) + set( + [ + "visit_occurrence_id", + "length_of_stay", + "stay_type", + "pmsi_type", + "provenance_source", + ] + ) ) ], on="visit_occurrence_id", @@ -221,7 +230,15 @@ def get_uc_visit( uc_visit = uc_visit.merge( visit_occurrence[ visit_occurrence.columns.intersection( - set(["visit_occurrence_id", "length_of_stay", "stay_type"]) + set( + [ + "visit_occurrence_id", + "length_of_stay", + "stay_type", + "pmsi_type", + "provenance_source", + ] + ) ) ], on="visit_occurrence_id", @@ -243,7 +260,15 @@ def get_uh_visit( uh_visit = uh_visit.merge( visit_occurrence[ visit_occurrence.columns.intersection( - set(["visit_occurrence_id", "length_of_stay", "stay_type"]) + set( + [ + "visit_occurrence_id", + "length_of_stay", + "stay_type", + "pmsi_type", + "provenance_source", + ] + ) ) ], on="visit_occurrence_id", diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 92875b13..0d4ce872 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -115,6 +115,8 @@ def compute_process( self._index.remove("care_sites_set") if age_list is None and "age_range" in self._index: self._index.remove("age_range") + if pmsi_type is None and "pmsi_type" in self._index: + self._index.remove("pmsi_type") return completeness_predictors.get(self._completeness_predictor)( self, data=data, From e346a96f7e4c046994c19a21e0a6186c32010ab7 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Thu, 6 Jul 2023 16:11:09 +0000 Subject: [PATCH 048/127] precommit --- .../models/rectangle_function/algos/loss_minimization.py | 6 ++++-- edsteva/models/step_function/algos/loss_minimization.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index bb3a99fb..77d4958b 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -72,8 +72,10 @@ def loss_minimization( row["t_0"] = t_0 row["c_0"] = c_0 row["t_1"] = t_1 - row["visit_median"] = group[[n_col]][group[[n_col]] > 0].quantile(0.5).values[0] - row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().values[0] + row["visit_median"] = ( + group[[n_col]][group[[n_col]] > 0].quantile(0.5).to_numpy()[0] + ) + row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().to_numpy()[0] results.append(row) return pd.DataFrame(results) diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index 2f6daff0..b9b93636 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -66,8 +66,10 @@ def loss_minimization( ) row["t_0"] = t_0 row["c_0"] = c_0 - row["visit_median"] = group[[n_col]][group[[n_col]] > 0].quantile(0.5).values[0] - row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().values[0] + row["visit_median"] = ( + group[[n_col]][group[[n_col]] > 0].quantile(0.5).to_numpy()[0] + ) + row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().to_numpy()[0] results.append(row) return pd.DataFrame(results) From 6f86f842fa592d2f2214700334d9e8b4990aaf79 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Thu, 6 Jul 2023 16:16:46 +0000 Subject: [PATCH 049/127] precommit --- .../rectangle_function/algos/loss_minimization.py | 11 ++--------- .../models/step_function/algos/loss_minimization.py | 11 ++--------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/edsteva/models/rectangle_function/algos/loss_minimization.py b/edsteva/models/rectangle_function/algos/loss_minimization.py index 77d4958b..155b8e20 100644 --- a/edsteva/models/rectangle_function/algos/loss_minimization.py +++ b/edsteva/models/rectangle_function/algos/loss_minimization.py @@ -13,7 +13,6 @@ def loss_minimization( index: List[str], x_col: str = "date", y_col: str = "c", - n_col: str = "n_visit", loss_function: Callable = l2_loss, min_rect_month_width=3, ): @@ -48,16 +47,14 @@ def loss_minimization( Column name for the time variable $t$. y_col : str, optional Column name for the completeness variable $c(t)$. - n_col : str, optional - Column name for the number of visits. loss_function : Callable, optional The loss function $\mathcal{L}$. min_rect_month_width : int, optional Min number of months between $t_0$ and $t_1$. """ - check_columns(df=predictor, required_columns=[*index, x_col, y_col, n_col]) + check_columns(df=predictor, required_columns=[*index, x_col, y_col]) predictor = predictor.sort_values(x_col) - cols = [*index, x_col, y_col, n_col] + cols = [*index, x_col, y_col] iter = predictor[cols].groupby(index) results = [] for partition, group in tqdm.tqdm(iter): @@ -72,10 +69,6 @@ def loss_minimization( row["t_0"] = t_0 row["c_0"] = c_0 row["t_1"] = t_1 - row["visit_median"] = ( - group[[n_col]][group[[n_col]] > 0].quantile(0.5).to_numpy()[0] - ) - row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().to_numpy()[0] results.append(row) return pd.DataFrame(results) diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index b9b93636..b6c58267 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -12,7 +12,6 @@ def loss_minimization( index: List[str], x_col: str = "date", y_col: str = "c", - n_col: str = "n_visit", loss_function: Callable = l2_loss, ) -> pd.DataFrame: r"""Computes the threshold $t_0$ of a predictor $c(t)$ by minimizing the following loss function: @@ -46,14 +45,12 @@ def loss_minimization( Column name for the time variable $t$ y_col : str, optional Column name for the completeness variable $c(t)$ - n_col : str, optional - Column name for the number of visits. loss_function : Callable, optional The loss function $\mathcal{L}$ """ - check_columns(df=predictor, required_columns=[*index, x_col, y_col, n_col]) + check_columns(df=predictor, required_columns=[*index, x_col, y_col]) predictor = predictor.sort_values(x_col) - cols = [*index, x_col, y_col, n_col] + cols = [*index, x_col, y_col] iter = predictor[cols].groupby(index) results = [] for partition, group in iter: @@ -66,10 +63,6 @@ def loss_minimization( ) row["t_0"] = t_0 row["c_0"] = c_0 - row["visit_median"] = ( - group[[n_col]][group[[n_col]] > 0].quantile(0.5).to_numpy()[0] - ) - row["visit_max"] = group[[n_col]][group[[n_col]] > 0].max().to_numpy()[0] results.append(row) return pd.DataFrame(results) From eed7da8665f2398c4d87e2e3a60a6a98f6aecdcb Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Tue, 11 Jul 2023 15:58:46 +0000 Subject: [PATCH 050/127] small fix --- .../completeness_predictors/per_visit.py | 20 ++++++++++--------- edsteva/probes/utils/filter_df.py | 15 ++++++++------ edsteva/probes/utils/prepare_df.py | 13 +++++++++++- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index a0b932b3..c0b949e8 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -89,15 +89,6 @@ def compute_completeness_predictor_per_visit( person=person, age_list=age_list, ) - measurement = prepare_measurement( - data=data, - biology_relationship=biology_relationship, - concept_codes=concept_codes, - concepts_sets=concepts_sets, - root_terminology=root_terminology, - standard_terminologies=standard_terminologies, - per_visit=True, - ) care_site = prepare_care_site( data=data, @@ -109,6 +100,16 @@ def compute_completeness_predictor_per_visit( care_site_relationship=care_site_relationship, ) + measurement = prepare_measurement( + data=data, + biology_relationship=biology_relationship, + concept_codes=concept_codes, + concepts_sets=concepts_sets, + root_terminology=root_terminology, + standard_terminologies=standard_terminologies, + per_visit=True, + ) + hospital_visit = get_hospital_visit( self, measurement=measurement, @@ -128,6 +129,7 @@ def compute_completeness_predictor_per_visit( predictor_by_level=biology_predictor_by_level, care_site_levels=care_site_levels, ) + return compute_completeness(self, biology_predictor) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index d030d362..777a4ef1 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -211,13 +211,16 @@ def filter_table_by_care_site( ) extended_care_site_id_to_filter = list( - extended_care_site_id_to_filter[ - ( - extended_care_site_id_to_filter.care_site_level.isin( - CARE_SITE_LEVEL_NAMES.values() + map( + int, + extended_care_site_id_to_filter[ + ( + extended_care_site_id_to_filter.care_site_level.isin( + CARE_SITE_LEVEL_NAMES.values() + ) ) - ) - ].care_site_id.unique() + ].care_site_id.unique(), + ) ) return table_to_filter[ diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 3f434338..f88a9860 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -665,6 +665,7 @@ def prepare_biology_relationship( ].isna(), biology_relationship["GLIMS_{}_concept_name".format(standard_terminology)], ) + biology_relationship["{}_vocabulary".format(standard_terminology)] = "ITM" biology_relationship[ "{}_vocabulary".format(standard_terminology) @@ -674,7 +675,17 @@ def prepare_biology_relationship( ].isna(), "GLIMS", ) - return biology_relationship + + return biology_relationship.drop_duplicates( + [ + "{}_concept_name".format(standard_terminology) + for standard_terminology in standard_terminologies + ] + + [ + "{}_concept_code".format(standard_terminology) + for standard_terminology in standard_terminologies + ], + ) def prepare_person( From c4a91f7107e81827f3682d50a6b7ee732a642b04 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Tue, 25 Jul 2023 08:42:04 +0000 Subject: [PATCH 051/127] precommit --- edsteva/probes/note/completeness_predictors/per_visit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index a8a8273f..0975b240 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -9,6 +9,7 @@ prepare_care_site, prepare_note, prepare_note_care_site, + prepare_person, prepare_visit_detail, prepare_visit_occurrence, ) From 51c2c1a8d7d44ea4c70bb4f9971d603e15185992 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Tue, 25 Jul 2023 12:22:35 +0000 Subject: [PATCH 052/127] persons test --- edsteva/io/synthetic/synthetic.py | 40 +++++++++++++++++++++++++++---- tests/test_probes.py | 8 +++++++ 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 44d9fc5e..59396d45 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -68,13 +68,13 @@ ("supprimé", 0.001), ], stay_source_value=[ - ("MCO", 0.9), - ("Psychiatrie", 0.05), - ("SSR", 0.02), - ("SLD", 0.03), + ("MCO", 0.7), + ("Psychiatrie", 0.1), + ("SSR", 0.1), + ("SLD", 0.1), ], person_id=[(str(i), 0.01) for i in range(100)], - provenance_source_value=[("service d'urgence", 0.8), ("non renseigné", 0.2)], + provenance_source_value=[("service d'urgence", 0.2), ("non renseigné", 0.8)], ) OTHER_CONDITION_COLUMNS = dict( @@ -105,6 +105,7 @@ ], ) + OTHER_NOTE_COLUMNS = dict( note_text=[ ("Losem Ipsum", 0.999), @@ -127,6 +128,8 @@ ], ) +PERSONS_COLUMN = dict(ratio_of_visits=0.9, age_mean=45, age_std=25) + def add_other_columns( generator: np.random.Generator, @@ -149,6 +152,7 @@ class SyntheticData: id_detail_col: str = "visit_detail_id" id_note_col: str = "note_id" id_bio_col: str = "measurement_id" + id_person_col: str = "person_id" note_type_col: str = "note_class_source_value" note_date_col: str = "note_datetime" condition_date_col: str = "condition_start_datetime" @@ -156,6 +160,7 @@ class SyntheticData: end_date_col: str = "visit_end_datetime" detail_date_col: str = "visit_detail_start_datetime" bio_date_col: str = "measurement_datetime" + birth_date_col: str = "birth_datetime" t_min: datetime = datetime(2010, 1, 1) t_max: datetime = datetime(2020, 1, 1) other_visit_columns: Dict = field(default_factory=lambda: OTHER_VISIT_COLUMNS) @@ -167,6 +172,7 @@ class SyntheticData: other_measurement_columns: Dict = field( default_factory=lambda: OTHER_MEASUREMENT_COLUMNS ) + persons_column: Dict = field(default_factory=lambda: PERSONS_COLUMN) seed: int = None mode: str = "step" @@ -199,6 +205,7 @@ def generate(self): hospital_ids=hospital_ids, src_concept_name=src_concept_name, ) + persons = self._generate_person(visit_occurrence) self.care_site = care_site self.visit_occurrence = visit_occurrence @@ -209,6 +216,7 @@ def generate(self): self.concept = concept self.concept_relationship = concept_relationship self.measurement = measurement + self.persons = persons self.list_available_tables() @@ -293,6 +301,13 @@ def _generate_visit_occurrence(self, hospital_ids): ) visit_occurrence[self.id_visit_col] = range(visit_occurrence.shape[0]) visit_occurrence[self.id_visit_source_col] = range(visit_occurrence.shape[0]) + + visit_occurrence[self.id_person_col] = self.generator.integers( + 0, + int(self.mean_visit * self.persons_column.ratio_of_visits), + self.mean_visit, + ) + return add_other_columns( generator=self.generator, table=visit_occurrence, @@ -661,6 +676,21 @@ def _generate_measurement( other_columns=self.other_measurement_columns, ) + def _generate_person(self, visit_occurrence): + persons = visit_occurrence.groupby(self.id_person_col, as_index=False)[ + self.date_col + ].min() + persons = persons.rename(columns={self.date_col: self.birth_date_col}) + persons[self.birth_date_col] = persons[self.birth_date_col] - pd.to_timedelta( + self.generator.normal( + self.persons_column.age_mean, self.persons_column.age_std, len(persons) + ) + * 365, + unit="D", + ) + + return persons + def convert_to_koalas(self): if isinstance(self.care_site, ks.frame.DataFrame): logger.info("Module is already Koalas!") diff --git a/tests/test_probes.py b/tests/test_probes.py index 7c496e14..d2fa947d 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -20,6 +20,7 @@ data_step = SyntheticData(mean_visit=100, seed=41, mode="step").generate() data_rect = SyntheticData(mean_visit=100, seed=41, mode="rect").generate() + params = [ dict( visit_predictor="per_visit_default", @@ -50,6 +51,9 @@ end_date=datetime(2020, 1, 1), test_save=False, module="koalas", + pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, + provenance_source={"All": ".*"}, + age_list=[18, 64], ), dict( visit_predictor="per_visit_default", @@ -74,6 +78,8 @@ end_date=None, test_save=False, module="koalas", + pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, + provenance_source={"urgence": "service d'urgence"}, ), dict( visit_predictor="per_visit_default", @@ -98,6 +104,8 @@ end_date=datetime(2020, 1, 1), test_save=True, module="pandas", + pmsi_type={"All": ".*"}, + provenance_source={"All": ".*"}, ), ] From 61092acbf23a8968dfa2768efa7d1ac7278a65f8 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Tue, 25 Jul 2023 12:50:10 +0000 Subject: [PATCH 053/127] persons test --- edsteva/io/synthetic/synthetic.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 59396d45..5e65571b 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -73,7 +73,6 @@ ("SSR", 0.1), ("SLD", 0.1), ], - person_id=[(str(i), 0.01) for i in range(100)], provenance_source_value=[("service d'urgence", 0.2), ("non renseigné", 0.8)], ) @@ -304,8 +303,8 @@ def _generate_visit_occurrence(self, hospital_ids): visit_occurrence[self.id_person_col] = self.generator.integers( 0, - int(self.mean_visit * self.persons_column.ratio_of_visits), - self.mean_visit, + int(self.mean_visit * self.persons_column["ratio_of_visits"]), + len(visit_occurrence), ) return add_other_columns( @@ -683,7 +682,9 @@ def _generate_person(self, visit_occurrence): persons = persons.rename(columns={self.date_col: self.birth_date_col}) persons[self.birth_date_col] = persons[self.birth_date_col] - pd.to_timedelta( self.generator.normal( - self.persons_column.age_mean, self.persons_column.age_std, len(persons) + self.persons_column["age_mean"], + self.persons_column["age_std"], + len(persons), ) * 365, unit="D", From 61992996f31545c835f6b96d81bc983deafd13ce Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Tue, 25 Jul 2023 13:17:02 +0000 Subject: [PATCH 054/127] test --- tests/test_probes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index d2fa947d..ab70d8c1 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -53,7 +53,7 @@ module="koalas", pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, - age_list=[18, 64], + age_list=[40], ), dict( visit_predictor="per_visit_default", From ab8554919e2c6308b65a6cd46b93bf1c60ff027a Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Tue, 25 Jul 2023 13:33:50 +0000 Subject: [PATCH 055/127] test --- tests/test_probes.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index ab70d8c1..74ba4614 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -53,7 +53,6 @@ module="koalas", pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, - age_list=[40], ), dict( visit_predictor="per_visit_default", From ba205c5168f552fa882b723655a182289dda8664 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 26 Jul 2023 14:55:36 +0000 Subject: [PATCH 056/127] test synthetic --- edsteva/io/synthetic/synthetic.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 5e65571b..f7a38bf2 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -705,6 +705,7 @@ def convert_to_koalas(self): self.concept = ks.DataFrame(self.concept) self.concept_relationship = ks.DataFrame(self.concept_relationship) self.measurement = ks.DataFrame(self.measurement) + self.persons = ks.DataFrame(self.persons) self.module = "koalas" def reset_to_pandas(self): @@ -720,6 +721,7 @@ def reset_to_pandas(self): self.concept = self.concept.to_pandas() self.concept_relationship = self.concept_relationship.to_pandas() self.measurement = self.measurement.to_pandas() + self.persons = self.persons.to_pandas() self.module = "pandas" def delete_table(self, table_name: str) -> None: From 4191cf6ac73551eb20ddc832558d22f8184fc7f9 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 26 Jul 2023 16:34:30 +0000 Subject: [PATCH 057/127] fix test --- edsteva/probes/utils/filter_df.py | 15 ++++++--------- edsteva/probes/utils/prepare_df.py | 1 - .../visit/completeness_predictors/per_visit.py | 1 - tests/test_probes.py | 16 +++++++++------- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index 777a4ef1..d030d362 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -211,16 +211,13 @@ def filter_table_by_care_site( ) extended_care_site_id_to_filter = list( - map( - int, - extended_care_site_id_to_filter[ - ( - extended_care_site_id_to_filter.care_site_level.isin( - CARE_SITE_LEVEL_NAMES.values() - ) + extended_care_site_id_to_filter[ + ( + extended_care_site_id_to_filter.care_site_level.isin( + CARE_SITE_LEVEL_NAMES.values() ) - ].care_site_id.unique(), - ) + ) + ].care_site_id.unique() ) return table_to_filter[ diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index f88a9860..a8571582 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -358,7 +358,6 @@ def prepare_care_site( source_col="care_site_short_name", target_col="care_sites_set", ) - # Add specialties_set if specialties_sets: care_site = filter_table_by_type( diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 9576f0f5..f5e9d7b5 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -83,7 +83,6 @@ def compute_completeness_predictor_per_visit( hospital_name = CARE_SITE_LEVEL_NAMES["Hospital"] visit_predictor_by_level = {hospital_name: hospital_visit} - if not hospital_only(care_site_levels=care_site_levels): visit_detail = prepare_visit_detail(data, start_date, end_date) diff --git a/tests/test_probes.py b/tests/test_probes.py index 74ba4614..22df61ad 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -20,7 +20,6 @@ data_step = SyntheticData(mean_visit=100, seed=41, mode="step").generate() data_rect = SyntheticData(mean_visit=100, seed=41, mode="rect").generate() - params = [ dict( visit_predictor="per_visit_default", @@ -50,9 +49,10 @@ start_date=None, end_date=datetime(2020, 1, 1), test_save=False, - module="koalas", + module="pandas", pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, + age_list=[18], ), dict( visit_predictor="per_visit_default", @@ -76,9 +76,10 @@ start_date="2010-01-03", end_date=None, test_save=False, - module="koalas", - pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, - provenance_source={"urgence": "service d'urgence"}, + pmsi_type={"MCO": "MCO"}, + provenance_source={"All": ".*"}, + age_list=None, + module="pandas", ), dict( visit_predictor="per_visit_default", @@ -102,9 +103,10 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, + pmsi_type={"MCO": "MCO"}, + provenance_source={"All": ".*", "urgence": "service d'urgence"}, + age_list=None, module="pandas", - pmsi_type={"All": ".*"}, - provenance_source={"All": ".*"}, ), ] From 34b6dfeee7abd3a6adb8136278430b7996701e6e Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 26 Jul 2023 16:35:14 +0000 Subject: [PATCH 058/127] fix tests --- tests/test_probes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index 22df61ad..f6ea47a2 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -49,7 +49,7 @@ start_date=None, end_date=datetime(2020, 1, 1), test_save=False, - module="pandas", + module="koalas", pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, age_list=[18], @@ -79,7 +79,7 @@ pmsi_type={"MCO": "MCO"}, provenance_source={"All": ".*"}, age_list=None, - module="pandas", + module="koalas", ), dict( visit_predictor="per_visit_default", From 248ddee519edb6e321cbbd41dd6048973aeb9072 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Fri, 28 Jul 2023 09:12:22 +0000 Subject: [PATCH 059/127] correcting test --- edsteva/io/synthetic/note.py | 18 +++++++++++------- tests/test_model.py | 9 ++++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/edsteva/io/synthetic/note.py b/edsteva/io/synthetic/note.py index 92617546..4e5711e7 100644 --- a/edsteva/io/synthetic/note.py +++ b/edsteva/io/synthetic/note.py @@ -55,11 +55,13 @@ def _generate_note_step( ): t_end = visit_care_site[date_col].max() t0 = generator.integers(t0_visit, t_end) - c_before = generator.uniform(0, 0.2) + c_before = generator.uniform(0, 0.01) c_after = generator.uniform(0.8, 1) + sample_seed = generator.integers(0, 100) + note_before_t0_visit = ( visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] - .sample(frac=c_before) + .sample(frac=c_before, random_state=sample_seed) .rename(columns={date_col: note_date_col}) ) # Stratify visit between t0_visit and t0 to @@ -69,13 +71,13 @@ def _generate_note_step( visit_care_site[ (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) ][[id_visit_col, date_col]] - .sample(frac=c_before) + .sample(frac=c_before, random_state=sample_seed) .rename(columns={date_col: note_date_col}) ) note_after_t0 = ( visit_care_site[visit_care_site[date_col] > t0][[id_visit_col, date_col]] - .sample(frac=c_after) + .sample(frac=c_after, random_state=sample_seed) .rename(columns={date_col: note_date_col}) ) @@ -85,6 +87,7 @@ def _generate_note_step( note[note_type_col] = note_type note["care_site_id"] = care_site_id note["t_0"] = t0 + logger.debug("Generate synthetic note deploying as step function") return note @@ -106,23 +109,24 @@ def _generate_note_rect( t1 = generator.integers(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) c_out = generator.uniform(0, 0.1) c_in = generator.uniform(0.8, 1) + sample_seed = generator.integers(0, 100) note_before_t0 = ( visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] - .sample(frac=c_out) + .sample(frac=c_out, random_state=sample_seed) .rename(columns={date_col: note_date_col}) ) note_between_t0_t1 = ( visit_care_site[ (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) ][[id_visit_col, date_col]] - .sample(frac=c_in) + .sample(frac=c_in, random_state=sample_seed) .rename(columns={date_col: note_date_col}) ) note_after_t1 = ( visit_care_site[(visit_care_site[date_col] > t1)][[id_visit_col, date_col]] - .sample(frac=c_out) + .sample(frac=c_out, random_state=sample_seed) .rename(columns={date_col: note_date_col}) ) diff --git a/tests/test_model.py b/tests/test_model.py index 407d697d..e382192e 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -174,9 +174,12 @@ def test_step_function_note(): end_date=data.t_max, ) - simulation = data.note[ - ["care_site_id", "t_0", "note_class_source_value"] - ].drop_duplicates() + simulation = data_step.note[["care_site_id", "t_0", "note_class_source_value"]] + simulation = ( + simulation.sort_values("t_0") + .groupby(["care_site_id", "note_class_source_value"], as_index=False) + .first() + ) simulation = simulation.rename(columns={"note_class_source_value": "note_type"}) simulation["t_0_min"] = pd.to_datetime(simulation["t_0"], unit="s") - pd.DateOffset( months=2 From 9414a636b2e7ee1a958d9620ae729055825584c0 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 08:06:28 +0000 Subject: [PATCH 060/127] fixing error --- edsteva/probes/utils/prepare_df.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index a8571582..04fee749 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -675,16 +675,7 @@ def prepare_biology_relationship( "GLIMS", ) - return biology_relationship.drop_duplicates( - [ - "{}_concept_name".format(standard_terminology) - for standard_terminology in standard_terminologies - ] - + [ - "{}_concept_code".format(standard_terminology) - for standard_terminology in standard_terminologies - ], - ) + return biology_relationship def prepare_person( From e2474e841e4def22595cb0524f267c7ebf6f3880 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 08:50:12 +0000 Subject: [PATCH 061/127] person cleaning --- .../probes/biology/completeness_predictors/per_measurement.py | 2 +- edsteva/probes/biology/completeness_predictors/per_visit.py | 2 +- .../probes/condition/completeness_predictors/per_condition.py | 2 +- edsteva/probes/condition/completeness_predictors/per_visit.py | 2 +- edsteva/probes/note/completeness_predictors/per_note.py | 2 +- edsteva/probes/note/completeness_predictors/per_visit.py | 2 +- edsteva/probes/utils/prepare_df.py | 1 - edsteva/probes/visit/completeness_predictors/per_visit.py | 2 +- 8 files changed, 7 insertions(+), 8 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 5de7ac96..bc891360 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -76,7 +76,7 @@ def compute_completeness_predictor_per_measurement( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - person = prepare_person(data) if age_list else None + person = prepare_person(data) measurement = prepare_measurement( data=data, diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index c0b949e8..95f265f2 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -76,7 +76,7 @@ def compute_completeness_predictor_per_visit( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - person = prepare_person(data) if age_list else None + person = prepare_person(data) visit_occurrence = prepare_visit_occurrence( data=data, diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index e6d261b8..813a19b0 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -65,7 +65,7 @@ def compute_completeness_predictor_per_condition( ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") - person = prepare_person(data) if age_list else None + person = prepare_person(data) visit_occurrence = prepare_visit_occurrence( data=data, diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index f5062c53..bbaf7743 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -65,7 +65,7 @@ def compute_completeness_predictor_per_visit( ): # pragma: no cover logger.info("AREM claim data are only available at hospital level") - person = prepare_person(data) if age_list else None + person = prepare_person(data) visit_occurrence = prepare_visit_occurrence( data=data, diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 4ce703b4..74e35c71 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -64,7 +64,7 @@ def compute_completeness_predictor_per_note( note_types=note_types, ) - person = prepare_person(data) if age_list else None + person = prepare_person(data) visit_occurrence = prepare_visit_occurrence( data=data, diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 0975b240..4d1d0e46 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -59,7 +59,7 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit", "n_visit_with_note"] check_tables(data=data, required_tables=["note"]) - person = prepare_person(data) if age_list else None + person = prepare_person(data) visit_occurrence = prepare_visit_occurrence( data=data, diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 04fee749..0e618331 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -693,5 +693,4 @@ def prepare_person( required_columns=person_columns, df_name="person", ) - return data.person[person_columns] diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index f5e9d7b5..ede866c6 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -52,7 +52,7 @@ def compute_completeness_predictor_per_visit( """ self._metrics = ["c", "n_visit"] - person = prepare_person(data) if age_list else None + person = prepare_person(data) visit_occurrence = prepare_visit_occurrence( data=data, From ef6c17978e6c4ca016d3f8a128ce62853fba4664 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Wed, 2 Aug 2023 11:11:04 +0200 Subject: [PATCH 062/127] changing naming --- edsteva/probes/biology/biology.py | 12 ++++++------ .../completeness_predictors/per_measurement.py | 4 ++-- .../biology/completeness_predictors/per_visit.py | 4 ++-- .../completeness_predictors/per_condition.py | 4 ++-- .../condition/completeness_predictors/per_visit.py | 6 +++--- edsteva/probes/condition/condition.py | 12 ++++++------ .../probes/note/completeness_predictors/per_note.py | 4 ++-- .../probes/note/completeness_predictors/per_visit.py | 4 ++-- edsteva/probes/note/note.py | 12 ++++++------ edsteva/probes/utils/prepare_df.py | 6 +++--- .../visit/completeness_predictors/per_visit.py | 10 +++++----- edsteva/probes/visit/visit.py | 12 ++++++------ tests/test_probes.py | 6 +++--- 13 files changed, 48 insertions(+), 48 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 8349dfb6..34327f86 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -60,7 +60,7 @@ def __init__( "care_site_specialty", "care_sites_set", "specialties_set", - "pmsi_type", + "stay_source", "provenance_source", ] + [ "{}_concept_code".format(terminology) @@ -110,7 +110,7 @@ def compute_process( ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, - pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, **kwargs, ): @@ -152,7 +152,7 @@ def compute_process( mapping : List[Tuple[str, str, str]], optional List of values to filter in the column `relationship_id` in order to map between 2 terminologies. **EXAMPLE**: `[("ANALYSES_LABORATOIRE", "GLIMS_ANABIO", "Maps to")]` - pmsi_type : Union[str, Dict[str, str]], optional + stay_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` @@ -165,8 +165,8 @@ def compute_process( self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if pmsi_type is None and "pmsi_type" in self._index: - self._index.remove("pmsi_type") + if stay_source is None and "stay_source" in self._index: + self._index.remove("stay_source") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") if concepts_sets is None and "concepts_set" in self._index: @@ -194,7 +194,7 @@ def compute_process( source_terminologies=source_terminologies, mapping=mapping, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index bc891360..0fc6e8ab 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -42,7 +42,7 @@ def compute_completeness_predictor_per_measurement( mapping: List[Tuple[str, str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -97,7 +97,7 @@ def compute_completeness_predictor_per_measurement( stay_types=stay_types, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, person=person, age_list=age_list, ).drop(columns=["visit_occurrence_source_value", "date"]) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 95f265f2..0e36d527 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -42,7 +42,7 @@ def compute_completeness_predictor_per_visit( mapping: List[Tuple[str, str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -85,7 +85,7 @@ def compute_completeness_predictor_per_visit( stay_types=stay_types, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, person=person, age_list=age_list, ) diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 813a19b0..1f09f290 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -43,7 +43,7 @@ def compute_completeness_predictor_per_condition( length_of_stays: List[float], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -72,7 +72,7 @@ def compute_completeness_predictor_per_condition( stay_types=stay_types, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, person=person, age_list=age_list, ).drop(columns="date") diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index bbaf7743..312ae96c 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -43,7 +43,7 @@ def compute_completeness_predictor_per_visit( length_of_stays: List[float], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -74,7 +74,7 @@ def compute_completeness_predictor_per_visit( stay_types=stay_types, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, person=person, age_list=age_list, ) @@ -246,7 +246,7 @@ def get_uf_visit( "visit_occurrence_id", "length_of_stay", "stay_type", - "pmsi_type", + "stay_source", "provenance_source", ] ) diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index 4b54aab2..d39d901d 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -48,7 +48,7 @@ def __init__( "care_site_specialty", "care_sites_set", "specialties_set", - "pmsi_type", + "stay_source", "provenance_source", ] super().__init__( @@ -75,7 +75,7 @@ def compute_process( source_systems: List[str] = ["ORBIS"], length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, - pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, **kwargs, ): @@ -113,7 +113,7 @@ def compute_process( **EXAMPLE**: `["AREM", "ORBIS"]` length_of_stays : List[float], optional **EXAMPLE**: `[1, 30]` - pmsi_type : Union[str, Dict[str, str]], optional + stay_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` @@ -130,8 +130,8 @@ def compute_process( self._index.remove("condition_type") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if pmsi_type is None and "pmsi_type" in self._index: - self._index.remove("pmsi_type") + if stay_source is None and "stay_source" in self._index: + self._index.remove("stay_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -151,7 +151,7 @@ def compute_process( provenance_source=provenance_source, length_of_stays=length_of_stays, condition_types=condition_types, - pmsi_type=pmsi_type, + stay_source=stay_source, age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 74e35c71..4666ba13 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -41,7 +41,7 @@ def compute_completeness_predictor_per_note( note_types: Union[str, Dict[str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -69,7 +69,7 @@ def compute_completeness_predictor_per_note( visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, - pmsi_type=pmsi_type, + stay_source=stay_source, length_of_stays=length_of_stays, provenance_source=provenance_source, person=person, diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 4d1d0e46..bafa1844 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -42,7 +42,7 @@ def compute_completeness_predictor_per_visit( note_types: Union[str, Dict[str, str]], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -68,7 +68,7 @@ def compute_completeness_predictor_per_visit( stay_types=stay_types, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, person=person, age_list=age_list, ) diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 4bec87bf..b035b9b6 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -46,7 +46,7 @@ def __init__( "care_site_specialty", "care_sites_set", "specialties_set", - "pmsi_type", + "stay_source", "provenance_source", ] super().__init__( @@ -75,7 +75,7 @@ def compute_process( "CRH": "crh", }, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, - pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, **kwargs, ): @@ -113,7 +113,7 @@ def compute_process( **EXAMPLE**: `[1, 30]` note_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}` or `{"CRH": "crh", "Urgence": "urge"}` - pmsi_type : Union[str, Dict[str, str]], optional + stay_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` @@ -130,8 +130,8 @@ def compute_process( self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if pmsi_type is None and "pmsi_type" in self._index: - self._index.remove("pmsi_type") + if stay_source is None and "stay_source" in self._index: + self._index.remove("stay_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -149,7 +149,7 @@ def compute_process( note_types=note_types, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, age_list=age_list, **kwargs, ) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 0e618331..14752a79 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -21,7 +21,7 @@ def prepare_visit_occurrence( data: Data, stay_types: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], length_of_stays: List[float], age_list: List[int] = None, @@ -58,9 +58,9 @@ def prepare_visit_occurrence( visit_occurrence = filter_table_by_type( table=visit_occurrence, table_name="visit_occurrence", - type_groups=pmsi_type, + type_groups=stay_source, source_col="stay_source_value", - target_col="pmsi_type", + target_col="stay_source", ) visit_occurrence = filter_table_by_type( diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index ede866c6..d2f68689 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -37,7 +37,7 @@ def compute_completeness_predictor_per_visit( length_of_stays: List[float], age_list: List[int], provenance_source: Union[str, Dict[str, str]], - pmsi_type: Union[str, Dict[str, str]], + stay_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -60,7 +60,7 @@ def compute_completeness_predictor_per_visit( end_date=end_date, stay_types=stay_types, length_of_stays=length_of_stays, - pmsi_type=pmsi_type, + stay_source=stay_source, provenance_source=provenance_source, person=person, age_list=age_list, @@ -204,7 +204,7 @@ def get_uf_visit( "visit_occurrence_id", "length_of_stay", "stay_type", - "pmsi_type", + "stay_source", "provenance_source", ] ) @@ -234,7 +234,7 @@ def get_uc_visit( "visit_occurrence_id", "length_of_stay", "stay_type", - "pmsi_type", + "stay_source", "provenance_source", ] ) @@ -264,7 +264,7 @@ def get_uh_visit( "visit_occurrence_id", "length_of_stay", "stay_type", - "pmsi_type", + "stay_source", "provenance_source", ] ) diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 0d4ce872..a38b516b 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -45,7 +45,7 @@ def __init__( "care_site_specialty", "care_sites_set", "specialties_set", - "pmsi_type", + "stay_source", "provenance_source", ] super().__init__( @@ -68,7 +68,7 @@ def compute_process( specialties_sets: Union[str, Dict[str, str]] = None, length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, - pmsi_type: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, age_list: List[int] = None, **kwargs, ): @@ -100,7 +100,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}` or `{"All": ".*", "ICU": r"REA\s|USI\s|SC\s"}` length_of_stays : List[float], optional **EXAMPLE**: `[1, 30]` - pmsi_type : Union[str, Dict[str, str]], optional + stay_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` @@ -115,8 +115,8 @@ def compute_process( self._index.remove("care_sites_set") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if pmsi_type is None and "pmsi_type" in self._index: - self._index.remove("pmsi_type") + if stay_source is None and "stay_source" in self._index: + self._index.remove("stay_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, @@ -132,7 +132,7 @@ def compute_process( specialties_sets=specialties_sets, length_of_stays=length_of_stays, provenance_source=provenance_source, - pmsi_type=pmsi_type, + stay_source=stay_source, age_list=age_list, **kwargs, ) diff --git a/tests/test_probes.py b/tests/test_probes.py index f6ea47a2..e3407785 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -50,7 +50,7 @@ end_date=datetime(2020, 1, 1), test_save=False, module="koalas", - pmsi_type={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, + stay_source={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, age_list=[18], ), @@ -76,7 +76,7 @@ start_date="2010-01-03", end_date=None, test_save=False, - pmsi_type={"MCO": "MCO"}, + stay_source={"MCO": "MCO"}, provenance_source={"All": ".*"}, age_list=None, module="koalas", @@ -103,7 +103,7 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, - pmsi_type={"MCO": "MCO"}, + stay_source={"MCO": "MCO"}, provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_list=None, module="pandas", From 75994fe56c8277a33a3c022de5ac16ead114903e Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 09:39:38 +0000 Subject: [PATCH 063/127] adding tqdm --- edsteva/models/step_function/algos/loss_minimization.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/edsteva/models/step_function/algos/loss_minimization.py b/edsteva/models/step_function/algos/loss_minimization.py index b6c58267..06489ce1 100644 --- a/edsteva/models/step_function/algos/loss_minimization.py +++ b/edsteva/models/step_function/algos/loss_minimization.py @@ -2,6 +2,7 @@ import numpy as np import pandas as pd +import tqdm from edsteva.utils.checks import check_columns from edsteva.utils.loss_functions import l2_loss @@ -53,7 +54,7 @@ def loss_minimization( cols = [*index, x_col, y_col] iter = predictor[cols].groupby(index) results = [] - for partition, group in iter: + for partition, group in tqdm.tqdm(iter): row = dict(zip(index, partition)) t_0, c_0 = _compute_one_threshold( group, From 1008455c9981f3cfa70408301c8afdd8b4909792 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 09:47:41 +0000 Subject: [PATCH 064/127] remove change --- tests/test_model.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/test_model.py b/tests/test_model.py index e382192e..f2774247 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -174,12 +174,10 @@ def test_step_function_note(): end_date=data.t_max, ) - simulation = data_step.note[["care_site_id", "t_0", "note_class_source_value"]] - simulation = ( - simulation.sort_values("t_0") - .groupby(["care_site_id", "note_class_source_value"], as_index=False) - .first() - ) + simulation = data.note[ + ["care_site_id", "t_0", "note_class_source_value"] + ].drop_duplicates() + simulation = simulation.rename(columns={"note_class_source_value": "note_type"}) simulation["t_0_min"] = pd.to_datetime(simulation["t_0"], unit="s") - pd.DateOffset( months=2 From a66a9e0440b2a0a77c62d6ea70c41b2ae8b88e6a Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 10:13:03 +0000 Subject: [PATCH 065/127] persons to person --- edsteva/io/synthetic/synthetic.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index f7a38bf2..25c55908 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -127,7 +127,7 @@ ], ) -PERSONS_COLUMN = dict(ratio_of_visits=0.9, age_mean=45, age_std=25) +PERSON_COLUMN = dict(ratio_of_visits=0.9, age_mean=45, age_std=25) def add_other_columns( @@ -171,7 +171,7 @@ class SyntheticData: other_measurement_columns: Dict = field( default_factory=lambda: OTHER_MEASUREMENT_COLUMNS ) - persons_column: Dict = field(default_factory=lambda: PERSONS_COLUMN) + person_column: Dict = field(default_factory=lambda: PERSON_COLUMN) seed: int = None mode: str = "step" @@ -204,7 +204,7 @@ def generate(self): hospital_ids=hospital_ids, src_concept_name=src_concept_name, ) - persons = self._generate_person(visit_occurrence) + person = self._generate_person(visit_occurrence) self.care_site = care_site self.visit_occurrence = visit_occurrence @@ -215,7 +215,7 @@ def generate(self): self.concept = concept self.concept_relationship = concept_relationship self.measurement = measurement - self.persons = persons + self.person = person self.list_available_tables() @@ -303,7 +303,7 @@ def _generate_visit_occurrence(self, hospital_ids): visit_occurrence[self.id_person_col] = self.generator.integers( 0, - int(self.mean_visit * self.persons_column["ratio_of_visits"]), + int(self.mean_visit * self.person_column["ratio_of_visits"]), len(visit_occurrence), ) @@ -676,21 +676,21 @@ def _generate_measurement( ) def _generate_person(self, visit_occurrence): - persons = visit_occurrence.groupby(self.id_person_col, as_index=False)[ + person = visit_occurrence.groupby(self.id_person_col, as_index=False)[ self.date_col ].min() - persons = persons.rename(columns={self.date_col: self.birth_date_col}) - persons[self.birth_date_col] = persons[self.birth_date_col] - pd.to_timedelta( + person = person.rename(columns={self.date_col: self.birth_date_col}) + person[self.birth_date_col] = person[self.birth_date_col] - pd.to_timedelta( self.generator.normal( - self.persons_column["age_mean"], - self.persons_column["age_std"], - len(persons), + self.person_column["age_mean"], + self.person_column["age_std"], + len(person), ) * 365, unit="D", ) - return persons + return person def convert_to_koalas(self): if isinstance(self.care_site, ks.frame.DataFrame): @@ -705,7 +705,7 @@ def convert_to_koalas(self): self.concept = ks.DataFrame(self.concept) self.concept_relationship = ks.DataFrame(self.concept_relationship) self.measurement = ks.DataFrame(self.measurement) - self.persons = ks.DataFrame(self.persons) + self.person = ks.DataFrame(self.person) self.module = "koalas" def reset_to_pandas(self): @@ -721,7 +721,7 @@ def reset_to_pandas(self): self.concept = self.concept.to_pandas() self.concept_relationship = self.concept_relationship.to_pandas() self.measurement = self.measurement.to_pandas() - self.persons = self.persons.to_pandas() + self.person = self.person.to_pandas() self.module = "pandas" def delete_table(self, table_name: str) -> None: From 60fa6dc442a3ae57bd75900ac8ea167dc8c5ef90 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 11:41:23 +0000 Subject: [PATCH 066/127] measurement place --- .../completeness_predictors/per_visit.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 0e36d527..4583afd0 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -90,16 +90,6 @@ def compute_completeness_predictor_per_visit( age_list=age_list, ) - care_site = prepare_care_site( - data=data, - care_site_ids=care_site_ids, - care_site_short_names=care_site_short_names, - care_site_specialties=care_site_specialties, - care_sites_sets=care_sites_sets, - specialties_sets=specialties_sets, - care_site_relationship=care_site_relationship, - ) - measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, @@ -110,6 +100,16 @@ def compute_completeness_predictor_per_visit( per_visit=True, ) + care_site = prepare_care_site( + data=data, + care_site_ids=care_site_ids, + care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, + specialties_sets=specialties_sets, + care_site_relationship=care_site_relationship, + ) + hospital_visit = get_hospital_visit( self, measurement=measurement, From 176d416cfad3a3db4b3036589f3c2b95d462d486 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Wed, 2 Aug 2023 14:21:29 +0200 Subject: [PATCH 067/127] coverage test --- tests/test_probes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index e3407785..1c62985f 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -78,7 +78,7 @@ test_save=False, stay_source={"MCO": "MCO"}, provenance_source={"All": ".*"}, - age_list=None, + age_list=[18], module="koalas", ), dict( @@ -103,7 +103,7 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, - stay_source={"MCO": "MCO"}, + stay_source=None, provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_list=None, module="pandas", From 38496156fd9caa26762707ccf748594b9ea57ed8 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Wed, 2 Aug 2023 14:42:50 +0200 Subject: [PATCH 068/127] coverage test --- tests/test_probes.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_probes.py b/tests/test_probes.py index 1c62985f..fe4cb3a8 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -194,6 +194,10 @@ def test_compute_visit_probe(data, params): care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], length_of_stays=params["length_of_stays"], + stay_source=params["stay_source"], + provenance_source=params["provenance_source"], + age_list=params["age_list"], + ) # Care site levels @@ -345,6 +349,9 @@ def test_compute_note_probe(data, params): specialties_sets=params["specialties_sets"], length_of_stays=params["length_of_stays"], note_types=params["note_types"], + stay_source=params["stay_source"], + provenance_source=params["provenance_source"], + age_list=params["age_list"], ) # Care site levels @@ -508,6 +515,9 @@ def test_compute_condition_probe(data, params): diag_types=params["diag_types"], condition_types=params["condition_types"], source_systems=params["source_systems"], + stay_source=params["stay_source"], + provenance_source=params["provenance_source"], + age_list=params["age_list"], ) # Care site levels @@ -695,6 +705,10 @@ def test_compute_biology_probe(data, params): length_of_stays=params["length_of_stays"], concepts_sets=params["concepts_sets"], concept_codes=params["concept_codes"], + stay_source=params["stay_source"], + provenance_source=params["provenance_source"], + age_list=params["age_list"], + ) # Care site levels From 0e4d61e0448f429c89ba68a4d3431960ff23bf19 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 13:25:26 +0000 Subject: [PATCH 069/127] remove itertools --- edsteva/probes/utils/filter_df.py | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index d030d362..c9f1e327 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -1,4 +1,3 @@ -import itertools from datetime import datetime, timedelta from typing import Dict, List, Union @@ -19,6 +18,7 @@ def filter_table_by_type( type_groups: Union[str, Dict], source_col: str, target_col: str, + Fitertoo, ): if isinstance(type_groups, str): type_groups = {type_groups: type_groups} @@ -237,7 +237,7 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): visit_occurrence.age <= age_list[0], "age_range" ] = f"age <= {age_list[0]}" - for age_min, age_max in itertools.pairwise(age_list[:-1], age_list[1:]): + for age_min, age_max in zip(age_list[:-1], age_list[1:]): in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" diff --git a/pyproject.toml b/pyproject.toml index c5653009..bf599a30 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,7 +75,7 @@ pylic = "^3.4.0" [tool.ruff] select = ["E", "F", "I", "W", "B", "RUF", "NPY", "PD", "ERA", "PTH", "SIM", "RET", "RSE", "T20", "PIE"] -ignore = ["E501", "B006", "B905", "B017", "W605", "RUF001", "RUF013", "NPY002", "PD901", "SIM118", "RET503"] +ignore = ["E501", "B006", "B905", "B017", "W605", "RUF001", "RUF007", "RUF013", "NPY002", "PD901", "SIM118", "RET503"] # Exclude a variety of commonly ignored directories. exclude = [ ".eggs", From 817aebcb899abc6152fe440fa6f73feba3f59957 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 13:39:34 +0000 Subject: [PATCH 070/127] precommit --- tests/test_probes.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index fe4cb3a8..ef21563f 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -197,7 +197,6 @@ def test_compute_visit_probe(data, params): stay_source=params["stay_source"], provenance_source=params["provenance_source"], age_list=params["age_list"], - ) # Care site levels @@ -708,7 +707,6 @@ def test_compute_biology_probe(data, params): stay_source=params["stay_source"], provenance_source=params["provenance_source"], age_list=params["age_list"], - ) # Care site levels From 197b20c4c28179fa794d7908c1e086612bdb5a93 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 13:41:51 +0000 Subject: [PATCH 071/127] typo --- edsteva/probes/utils/filter_df.py | 1 - 1 file changed, 1 deletion(-) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index c9f1e327..d8bc8c67 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -18,7 +18,6 @@ def filter_table_by_type( type_groups: Union[str, Dict], source_col: str, target_col: str, - Fitertoo, ): if isinstance(type_groups, str): type_groups = {type_groups: type_groups} From c3756f21d734f6e8c95fc6dd9446654d5fc95238 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 14:13:05 +0000 Subject: [PATCH 072/127] correcting test --- edsteva/probes/visit/visit.py | 2 +- tests/test_probes.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index a38b516b..30bbb300 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -40,7 +40,7 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", - "age_range", + "age_list", "care_site_id", "care_site_specialty", "care_sites_set", diff --git a/tests/test_probes.py b/tests/test_probes.py index ef21563f..ca4d62cb 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -103,7 +103,7 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, - stay_source=None, + stay_source={"MCO": "MCO"}, provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_list=None, module="pandas", From 9ed31f10dc938f663b6fca5174ffaf63501d8d36 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 14:52:23 +0000 Subject: [PATCH 073/127] fix test --- edsteva/probes/visit/completeness_predictors/per_visit.py | 3 +++ edsteva/probes/visit/visit.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index d2f68689..97ae1733 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -206,6 +206,7 @@ def get_uf_visit( "stay_type", "stay_source", "provenance_source", + "age_range", ] ) ) @@ -236,6 +237,7 @@ def get_uc_visit( "stay_type", "stay_source", "provenance_source", + "age_range", ] ) ) @@ -266,6 +268,7 @@ def get_uh_visit( "stay_type", "stay_source", "provenance_source", + "age_range", ] ) ) diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 30bbb300..a38b516b 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -40,7 +40,7 @@ def __init__( "care_site_level", "stay_type", "length_of_stay", - "age_list", + "age_range", "care_site_id", "care_site_specialty", "care_sites_set", From d92c8178e2bab8ce30925f71dc4f499f9c54a2cb Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 15:13:04 +0000 Subject: [PATCH 074/127] fix test --- edsteva/probes/condition/completeness_predictors/per_visit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 312ae96c..00f79440 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -248,6 +248,7 @@ def get_uf_visit( "stay_type", "stay_source", "provenance_source", + "age_range", ] ) ) From 79dc102fcbb9986fd8d60b096a077d9a7c7971cd Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 15:35:48 +0000 Subject: [PATCH 075/127] fix test --- tests/test_probes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index ca4d62cb..07233fbe 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -52,7 +52,7 @@ module="koalas", stay_source={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, - age_list=[18], + age_list=[18, 64], ), dict( visit_predictor="per_visit_default", @@ -103,7 +103,7 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, - stay_source={"MCO": "MCO"}, + stay_source=None, provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_list=None, module="pandas", From d34304c6a18572d60a6eeea3708a2aee0667fe17 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 16:04:07 +0000 Subject: [PATCH 076/127] fix test --- edsteva/probes/biology/biology.py | 2 -- edsteva/probes/condition/condition.py | 49 +++++++++++++-------------- edsteva/probes/note/note.py | 2 -- edsteva/probes/visit/visit.py | 2 -- 4 files changed, 24 insertions(+), 31 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 34327f86..077f0946 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -165,8 +165,6 @@ def compute_process( self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if stay_source is None and "stay_source" in self._index: - self._index.remove("stay_source") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") if concepts_sets is None and "concepts_set" in self._index: diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index d39d901d..f7fab4f3 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -130,31 +130,30 @@ def compute_process( self._index.remove("condition_type") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if stay_source is None and "stay_source" in self._index: - self._index.remove("stay_source") - return completeness_predictors.get(self._completeness_predictor)( - self, - data=data, - care_site_relationship=care_site_relationship, - start_date=start_date, - end_date=end_date, - care_site_levels=care_site_levels, - stay_types=stay_types, - care_site_ids=care_site_ids, - extra_data=extra_data, - care_site_short_names=care_site_short_names, - care_site_specialties=care_site_specialties, - care_sites_sets=care_sites_sets, - specialties_sets=specialties_sets, - diag_types=diag_types, - source_systems=source_systems, - provenance_source=provenance_source, - length_of_stays=length_of_stays, - condition_types=condition_types, - stay_source=stay_source, - age_list=age_list, - **kwargs, - ) + + return completeness_predictors.get(self._completeness_predictor)( + self, + data=data, + care_site_relationship=care_site_relationship, + start_date=start_date, + end_date=end_date, + care_site_levels=care_site_levels, + stay_types=stay_types, + care_site_ids=care_site_ids, + extra_data=extra_data, + care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, + specialties_sets=specialties_sets, + diag_types=diag_types, + source_systems=source_systems, + provenance_source=provenance_source, + length_of_stays=length_of_stays, + condition_types=condition_types, + stay_source=stay_source, + age_list=age_list, + **kwargs, + ) def get_viz_config(self, viz_type: str, **kwargs): if viz_type in viz_configs.keys(): diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index b035b9b6..4d74c0cf 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -130,8 +130,6 @@ def compute_process( self._index.remove("length_of_stay") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if stay_source is None and "stay_source" in self._index: - self._index.remove("stay_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index a38b516b..ec670d8f 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -115,8 +115,6 @@ def compute_process( self._index.remove("care_sites_set") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - if stay_source is None and "stay_source" in self._index: - self._index.remove("stay_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, From 70b875e2326194acb14f31a69172c797d30587ff Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 16:04:46 +0000 Subject: [PATCH 077/127] fix test --- tests/test_probes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index 07233fbe..682556d8 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -103,7 +103,7 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, - stay_source=None, + stay_source={"MCO": "MCO"}, provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_list=None, module="pandas", From d950d18760b67ae46e3050e066401bed7af96bb5 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 2 Aug 2023 16:34:53 +0000 Subject: [PATCH 078/127] fix test --- edsteva/probes/condition/condition.py | 47 +++++++++++++-------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index f7fab4f3..c4a9baf4 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -130,30 +130,29 @@ def compute_process( self._index.remove("condition_type") if age_list is None and "age_range" in self._index: self._index.remove("age_range") - - return completeness_predictors.get(self._completeness_predictor)( - self, - data=data, - care_site_relationship=care_site_relationship, - start_date=start_date, - end_date=end_date, - care_site_levels=care_site_levels, - stay_types=stay_types, - care_site_ids=care_site_ids, - extra_data=extra_data, - care_site_short_names=care_site_short_names, - care_site_specialties=care_site_specialties, - care_sites_sets=care_sites_sets, - specialties_sets=specialties_sets, - diag_types=diag_types, - source_systems=source_systems, - provenance_source=provenance_source, - length_of_stays=length_of_stays, - condition_types=condition_types, - stay_source=stay_source, - age_list=age_list, - **kwargs, - ) + return completeness_predictors.get(self._completeness_predictor)( + self, + data=data, + care_site_relationship=care_site_relationship, + start_date=start_date, + end_date=end_date, + care_site_levels=care_site_levels, + stay_types=stay_types, + care_site_ids=care_site_ids, + extra_data=extra_data, + care_site_short_names=care_site_short_names, + care_site_specialties=care_site_specialties, + care_sites_sets=care_sites_sets, + specialties_sets=specialties_sets, + diag_types=diag_types, + source_systems=source_systems, + provenance_source=provenance_source, + length_of_stays=length_of_stays, + condition_types=condition_types, + stay_source=stay_source, + age_list=age_list, + **kwargs, + ) def get_viz_config(self, viz_type: str, **kwargs): if viz_type in viz_configs.keys(): From 523eb7991326d175e110f10bd85f7d5c764970c2 Mon Sep 17 00:00:00 2001 From: svittoz <137794505+svittoz@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:44:32 +0000 Subject: [PATCH 079/127] Adam code review --- edsteva/io/synthetic/note.py | 14 +++++------- edsteva/probes/condition/condition.py | 2 +- edsteva/probes/utils/filter_df.py | 2 +- edsteva/probes/utils/prepare_df.py | 32 ++++++++++++++------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/edsteva/io/synthetic/note.py b/edsteva/io/synthetic/note.py index 4e5711e7..a8903e2f 100644 --- a/edsteva/io/synthetic/note.py +++ b/edsteva/io/synthetic/note.py @@ -57,11 +57,10 @@ def _generate_note_step( t0 = generator.integers(t0_visit, t_end) c_before = generator.uniform(0, 0.01) c_after = generator.uniform(0.8, 1) - sample_seed = generator.integers(0, 100) note_before_t0_visit = ( visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] - .sample(frac=c_before, random_state=sample_seed) + .sample(frac=c_before) .rename(columns={date_col: note_date_col}) ) # Stratify visit between t0_visit and t0 to @@ -71,13 +70,13 @@ def _generate_note_step( visit_care_site[ (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) ][[id_visit_col, date_col]] - .sample(frac=c_before, random_state=sample_seed) + .sample(frac=c_before) .rename(columns={date_col: note_date_col}) ) note_after_t0 = ( visit_care_site[visit_care_site[date_col] > t0][[id_visit_col, date_col]] - .sample(frac=c_after, random_state=sample_seed) + .sample(frac=c_after) .rename(columns={date_col: note_date_col}) ) @@ -109,24 +108,23 @@ def _generate_note_rect( t1 = generator.integers(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) c_out = generator.uniform(0, 0.1) c_in = generator.uniform(0.8, 1) - sample_seed = generator.integers(0, 100) note_before_t0 = ( visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] - .sample(frac=c_out, random_state=sample_seed) + .sample(frac=c_out) .rename(columns={date_col: note_date_col}) ) note_between_t0_t1 = ( visit_care_site[ (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) ][[id_visit_col, date_col]] - .sample(frac=c_in, random_state=sample_seed) + .sample(frac=c_in) .rename(columns={date_col: note_date_col}) ) note_after_t1 = ( visit_care_site[(visit_care_site[date_col] > t1)][[id_visit_col, date_col]] - .sample(frac=c_out, random_state=sample_seed) + .sample(frac=c_out) .rename(columns={date_col: note_date_col}) ) diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index c4a9baf4..bcd8af80 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -145,10 +145,10 @@ def compute_process( care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, diag_types=diag_types, - source_systems=source_systems, provenance_source=provenance_source, length_of_stays=length_of_stays, condition_types=condition_types, + source_systems=source_systems, stay_source=stay_source, age_list=age_list, **kwargs, diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index d8bc8c67..f8dac94b 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -231,7 +231,7 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): visit_occurrence["date"] - visit_occurrence["birth_datetime"] ) / (np.timedelta64(timedelta(days=1)) * 356) - visit_occurrence["age_range"] = "Unkown" + visit_occurrence["age_range"] = "Not specified" visit_occurrence.loc[ visit_occurrence.age <= age_list[0], "age_range" ] = f"age <= {age_list[0]}" diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 14752a79..ac27fd02 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -55,21 +55,23 @@ def prepare_visit_occurrence( invalid_naming="supprimé", ) - visit_occurrence = filter_table_by_type( - table=visit_occurrence, - table_name="visit_occurrence", - type_groups=stay_source, - source_col="stay_source_value", - target_col="stay_source", - ) + if stay_source: + visit_occurrence = filter_table_by_type( + table=visit_occurrence, + table_name="visit_occurrence", + type_groups=stay_source, + source_col="stay_source_value", + target_col="stay_source", + ) - visit_occurrence = filter_table_by_type( - table=visit_occurrence, - table_name="visit_occurrence", - type_groups=provenance_source, - source_col="provenance_source_value", - target_col="provenance_source", - ) + if provenance_source: + visit_occurrence = filter_table_by_type( + table=visit_occurrence, + table_name="visit_occurrence", + type_groups=provenance_source, + source_col="provenance_source_value", + target_col="provenance_source", + ) if length_of_stays: visit_occurrence = filter_table_by_length_of_stay( @@ -98,7 +100,7 @@ def prepare_visit_occurrence( if age_list: visit_occurrence = visit_occurrence.merge( - person, left_on="person_id", right_on="person_id" + person, on="person_id" ) visit_occurrence = filter_table_by_age( visit_occurrence=visit_occurrence, From 1fa79b6386b7596c3afa8e150200603f2b870ea5 Mon Sep 17 00:00:00 2001 From: svittoz <137794505+svittoz@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:47:24 +0000 Subject: [PATCH 080/127] Adam review --- edsteva/probes/biology/biology.py | 8 ++++---- .../completeness_predictors/per_measurement.py | 5 ++--- .../biology/completeness_predictors/per_visit.py | 4 ++-- .../completeness_predictors/per_condition.py | 4 ++-- .../condition/completeness_predictors/per_visit.py | 4 ++-- edsteva/probes/condition/condition.py | 8 ++++---- .../note/completeness_predictors/per_note.py | 4 ++-- .../note/completeness_predictors/per_visit.py | 4 ++-- edsteva/probes/note/note.py | 8 ++++---- edsteva/probes/utils/filter_df.py | 14 +++++++------- edsteva/probes/utils/prepare_df.py | 6 +++--- .../visit/completeness_predictors/per_visit.py | 4 ++-- edsteva/probes/visit/visit.py | 8 ++++---- tests/test_probes.py | 14 +++++++------- 14 files changed, 47 insertions(+), 48 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 077f0946..0bfdc323 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -111,7 +111,7 @@ def compute_process( ], provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, - age_list: List[int] = None, + age_range: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -156,14 +156,14 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - age_list : List[int], optional + age_range : List[int], optional **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: self._index.remove("specialties_set") if length_of_stays is None and "length_of_stay" in self._index: self._index.remove("length_of_stay") - if age_list is None and "age_range" in self._index: + if age_range is None and "age_range" in self._index: self._index.remove("age_range") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") @@ -193,7 +193,7 @@ def compute_process( mapping=mapping, provenance_source=provenance_source, stay_source=stay_source, - age_list=age_list, + age_range=age_range, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 0fc6e8ab..ce376a61 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -40,7 +40,7 @@ def compute_completeness_predictor_per_measurement( length_of_stays: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -62,7 +62,6 @@ def compute_completeness_predictor_per_measurement( "measurement", "concept", "concept_relationship", - "visit_occurrence", ], ) standard_terminologies = self._standard_terminologies @@ -99,7 +98,7 @@ def compute_completeness_predictor_per_measurement( provenance_source=provenance_source, stay_source=stay_source, person=person, - age_list=age_list, + age_range=age_range, ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 4583afd0..66dbb89e 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -40,7 +40,7 @@ def compute_completeness_predictor_per_visit( length_of_stays: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -87,7 +87,7 @@ def compute_completeness_predictor_per_visit( provenance_source=provenance_source, stay_source=stay_source, person=person, - age_list=age_list, + age_range=age_range, ) measurement = prepare_measurement( diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 1f09f290..2ce3d633 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -41,7 +41,7 @@ def compute_completeness_predictor_per_condition( condition_types: Union[str, Dict[str, str]], source_systems: List[str], length_of_stays: List[float], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -74,7 +74,7 @@ def compute_completeness_predictor_per_condition( provenance_source=provenance_source, stay_source=stay_source, person=person, - age_list=age_list, + age_range=age_range, ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 00f79440..61e66c5d 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -41,7 +41,7 @@ def compute_completeness_predictor_per_visit( condition_types: Union[str, Dict[str, str]], source_systems: List[str], length_of_stays: List[float], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -76,7 +76,7 @@ def compute_completeness_predictor_per_visit( provenance_source=provenance_source, stay_source=stay_source, person=person, - age_list=age_list, + age_range=age_range, ) condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index bcd8af80..b265cc83 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -76,7 +76,7 @@ def compute_process( length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, - age_list: List[int] = None, + age_range: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -117,7 +117,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - age_list : List[int], optional + age_range : List[int], optional **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: @@ -128,7 +128,7 @@ def compute_process( self._index.remove("care_sites_set") if condition_types is None and "condition_type" in self._index: self._index.remove("condition_type") - if age_list is None and "age_range" in self._index: + if age_range is None and "age_range" in self._index: self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( self, @@ -150,7 +150,7 @@ def compute_process( condition_types=condition_types, source_systems=source_systems, stay_source=stay_source, - age_list=age_list, + age_range=age_range, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 4666ba13..17fb583a 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -39,7 +39,7 @@ def compute_completeness_predictor_per_note( extra_data: Data, length_of_stays: List[float], note_types: Union[str, Dict[str, str]], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -73,7 +73,7 @@ def compute_completeness_predictor_per_note( length_of_stays=length_of_stays, provenance_source=provenance_source, person=person, - age_list=age_list, + age_range=age_range, ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index bafa1844..c882b3e7 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -40,7 +40,7 @@ def compute_completeness_predictor_per_visit( extra_data: Data, length_of_stays: List[float], note_types: Union[str, Dict[str, str]], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -70,7 +70,7 @@ def compute_completeness_predictor_per_visit( provenance_source=provenance_source, stay_source=stay_source, person=person, - age_list=age_list, + age_range=age_range, ) care_site = prepare_care_site( diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 4d74c0cf..76c9ce98 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -76,7 +76,7 @@ def compute_process( }, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, - age_list: List[int] = None, + age_range: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -117,7 +117,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - age_list : List[int], optional + age_range : List[int], optional **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: @@ -128,7 +128,7 @@ def compute_process( self._index.remove("note_type") if length_of_stays is None and "length_of_stay" in self._index: self._index.remove("length_of_stay") - if age_list is None and "age_range" in self._index: + if age_range is None and "age_range" in self._index: self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( self, @@ -148,7 +148,7 @@ def compute_process( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, - age_list=age_list, + age_range=age_range, **kwargs, ) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index f8dac94b..26666ddc 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -224,8 +224,8 @@ def filter_table_by_care_site( ] -def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): - age_list.sort() +def filter_table_by_age(visit_occurrence: pd.DataFrame, age_range: List[int]): + age_range.sort() visit_occurrence["age"] = ( visit_occurrence["date"] - visit_occurrence["birth_datetime"] @@ -233,16 +233,16 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_list: List[int]): visit_occurrence["age_range"] = "Not specified" visit_occurrence.loc[ - visit_occurrence.age <= age_list[0], "age_range" - ] = f"age <= {age_list[0]}" + visit_occurrence.age <= age_range[0], "age_range" + ] = f"age <= {age_range[0]}" - for age_min, age_max in zip(age_list[:-1], age_list[1:]): + for age_min, age_max in zip(age_range[:-1], age_range[1:]): in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" visit_occurrence.loc[ - visit_occurrence.age > age_list[-1], "age_range" - ] = f"age > {age_list[-1]}" + visit_occurrence.age > age_range[-1], "age_range" + ] = f"age > {age_range[-1]}" return visit_occurrence.drop(columns="age") diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index ac27fd02..a12e2bf9 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -24,7 +24,7 @@ def prepare_visit_occurrence( stay_source: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], length_of_stays: List[float], - age_list: List[int] = None, + age_range: List[int] = None, start_date: datetime = None, end_date: datetime = None, person: DataFrame = None, @@ -98,13 +98,13 @@ def prepare_visit_occurrence( target_col="stay_type", ) - if age_list: + if age_range: visit_occurrence = visit_occurrence.merge( person, on="person_id" ) visit_occurrence = filter_table_by_age( visit_occurrence=visit_occurrence, - age_list=age_list, + age_range=age_range, ) return visit_occurrence diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 97ae1733..23b4ddd1 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -35,7 +35,7 @@ def compute_completeness_predictor_per_visit( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], length_of_stays: List[float], - age_list: List[int], + age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], **kwargs @@ -63,7 +63,7 @@ def compute_completeness_predictor_per_visit( stay_source=stay_source, provenance_source=provenance_source, person=person, - age_list=age_list, + age_range=age_range, ) care_site = prepare_care_site( diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index ec670d8f..e06631dd 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -69,7 +69,7 @@ def compute_process( length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, - age_list: List[int] = None, + age_range: List[int] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -104,7 +104,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - age_list : List[int], optional + age_range : List[int], optional **EXAMPLE**: `[18, 64]` """ if specialties_sets is None and "specialties_set" in self._index: @@ -113,7 +113,7 @@ def compute_process( self._index.remove("length_of_stay") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") - if age_list is None and "age_range" in self._index: + if age_range is None and "age_range" in self._index: self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( self, @@ -131,7 +131,7 @@ def compute_process( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, - age_list=age_list, + age_range=age_range, **kwargs, ) diff --git a/tests/test_probes.py b/tests/test_probes.py index 682556d8..3d7eccf3 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -52,7 +52,7 @@ module="koalas", stay_source={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, - age_list=[18, 64], + age_range=[18, 64], ), dict( visit_predictor="per_visit_default", @@ -78,7 +78,7 @@ test_save=False, stay_source={"MCO": "MCO"}, provenance_source={"All": ".*"}, - age_list=[18], + age_range=[18], module="koalas", ), dict( @@ -105,7 +105,7 @@ test_save=True, stay_source={"MCO": "MCO"}, provenance_source={"All": ".*", "urgence": "service d'urgence"}, - age_list=None, + age_range=None, module="pandas", ), ] @@ -196,7 +196,7 @@ def test_compute_visit_probe(data, params): length_of_stays=params["length_of_stays"], stay_source=params["stay_source"], provenance_source=params["provenance_source"], - age_list=params["age_list"], + age_range=params["age_range"], ) # Care site levels @@ -350,7 +350,7 @@ def test_compute_note_probe(data, params): note_types=params["note_types"], stay_source=params["stay_source"], provenance_source=params["provenance_source"], - age_list=params["age_list"], + age_range=params["age_range"], ) # Care site levels @@ -516,7 +516,7 @@ def test_compute_condition_probe(data, params): source_systems=params["source_systems"], stay_source=params["stay_source"], provenance_source=params["provenance_source"], - age_list=params["age_list"], + age_range=params["age_range"], ) # Care site levels @@ -706,7 +706,7 @@ def test_compute_biology_probe(data, params): concept_codes=params["concept_codes"], stay_source=params["stay_source"], provenance_source=params["provenance_source"], - age_list=params["age_list"], + age_range=params["age_range"], ) # Care site levels From e04b6eaef698e6ea3094e3e6b2175193b22e6f37 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Thu, 3 Aug 2023 13:57:23 +0000 Subject: [PATCH 081/127] precommit --- edsteva/probes/utils/prepare_df.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index a12e2bf9..3b10ac8c 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -62,7 +62,7 @@ def prepare_visit_occurrence( type_groups=stay_source, source_col="stay_source_value", target_col="stay_source", - ) + ) if provenance_source: visit_occurrence = filter_table_by_type( @@ -71,7 +71,7 @@ def prepare_visit_occurrence( type_groups=provenance_source, source_col="provenance_source_value", target_col="provenance_source", - ) + ) if length_of_stays: visit_occurrence = filter_table_by_length_of_stay( @@ -99,9 +99,7 @@ def prepare_visit_occurrence( ) if age_range: - visit_occurrence = visit_occurrence.merge( - person, on="person_id" - ) + visit_occurrence = visit_occurrence.merge(person, on="person_id") visit_occurrence = filter_table_by_age( visit_occurrence=visit_occurrence, age_range=age_range, From bf172e46793692a82e151a9b6c91aa070359dbe4 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 6 Sep 2023 12:46:52 +0000 Subject: [PATCH 082/127] adding all modifications --- edsteva/io/synthetic/synthetic.py | 18 + edsteva/probes/biology/biology.py | 12 + .../per_measurement.py | 4 + .../completeness_predictors/per_visit.py | 24 + .../completeness_predictors/per_condition.py | 4 + .../completeness_predictors/per_visit.py | 4 + edsteva/probes/condition/condition.py | 2 + .../note/completeness_predictors/per_note.py | 4 + .../note/completeness_predictors/per_visit.py | 4 + edsteva/probes/note/note.py | 2 + edsteva/probes/utils/prepare_df.py | 32 + .../completeness_predictors/per_visit.py | 20 + edsteva/probes/visit/visit.py | 6 + poetry.lock | 799 +++++++----------- pyproject.toml | 2 +- tests/test_probes.py | 3 + 16 files changed, 463 insertions(+), 477 deletions(-) diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index ff9654d4..2d2d847d 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -128,6 +128,7 @@ ) PERSON_COLUMN = dict(ratio_of_visits=0.9, age_mean=45, age_std=25) +OTHER_COST_COLUMNS = dict(drg_source_value=[("M", 0.9), ("K", 0.05), ("Z", 0.05)]) def add_other_columns( @@ -152,6 +153,7 @@ class SyntheticData: id_note_col: str = "note_id" id_bio_col: str = "measurement_id" id_person_col: str = "person_id" + id_cost_col: str = "cost_event_id" note_type_col: str = "note_class_source_value" note_date_col: str = "note_datetime" condition_date_col: str = "condition_start_datetime" @@ -160,6 +162,7 @@ class SyntheticData: detail_date_col: str = "visit_detail_start_datetime" bio_date_col: str = "measurement_datetime" birth_date_col: str = "birth_datetime" + id_drg_source_col: str = "drg_source" t_min: datetime = datetime(2010, 1, 1) t_max: datetime = datetime(2020, 1, 1) other_visit_columns: Dict = field(default_factory=lambda: OTHER_VISIT_COLUMNS) @@ -171,6 +174,7 @@ class SyntheticData: other_measurement_columns: Dict = field( default_factory=lambda: OTHER_MEASUREMENT_COLUMNS ) + other_cost_columns: Dict = field(default_factory=lambda: OTHER_COST_COLUMNS) person_column: Dict = field(default_factory=lambda: PERSON_COLUMN) seed: int = None mode: str = "step" @@ -206,6 +210,7 @@ def generate(self): src_concept_name=src_concept_name, ) person = self._generate_person(visit_occurrence) + cost = self._generate_cost(visit_occurrence) self.care_site = care_site self.visit_occurrence = visit_occurrence @@ -217,6 +222,7 @@ def generate(self): self.concept_relationship = concept_relationship self.measurement = measurement self.person = person + self.cost = cost self.list_available_tables() @@ -696,6 +702,16 @@ def _generate_person(self, visit_occurrence): return person + def _generate_cost(self, visit_occurrence): + cost = visit_occurrence[[self.id_visit_col]].rename( + columns={self.id_visit_col: self.id_cost_col} + ) + return add_other_columns( + generator=self.generator, + table=cost, + other_columns=self.other_cost_columns, + ) + def convert_to_koalas(self): if isinstance(self.care_site, ks.frame.DataFrame): logger.info("Module is already Koalas!") @@ -710,6 +726,7 @@ def convert_to_koalas(self): self.concept_relationship = ks.DataFrame(self.concept_relationship) self.measurement = ks.DataFrame(self.measurement) self.person = ks.DataFrame(self.person) + self.cost = ks.DataFrame(self.cost) self.module = "koalas" def reset_to_pandas(self): @@ -726,6 +743,7 @@ def reset_to_pandas(self): self.concept_relationship = self.concept_relationship.to_pandas() self.measurement = self.measurement.to_pandas() self.person = self.person.to_pandas() + self.cost = self.cost.to_pandas() self.module = "pandas" def delete_table(self, table_name: str) -> None: diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 0bfdc323..0a749746 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -62,6 +62,8 @@ def __init__( "specialties_set", "stay_source", "provenance_source", + "drg_source", + "condition_type", ] + [ "{}_concept_code".format(terminology) for terminology in standard_terminologies @@ -109,8 +111,10 @@ def compute_process( ("GLIMS_ANABIO", "ANABIO_ITM", "Mapped from"), ("ANABIO_ITM", "LOINC_ITM", "Maps to"), ], + condition_types: Union[str, Dict[str, str]] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, age_range: List[int] = None, **kwargs, ): @@ -156,6 +160,10 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` provenance_source : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` + condition_types : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` + drg_source : Union[str, Dict[str, str]], optional + **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_range : List[int], optional **EXAMPLE**: `[18, 64]` """ @@ -167,6 +175,8 @@ def compute_process( self._index.remove("age_range") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") + if condition_types is None and "condition_type" in self._index: + self._index.remove("condition_type") if concepts_sets is None and "concepts_set" in self._index: self._index.remove("concepts_set") else: @@ -188,11 +198,13 @@ def compute_process( care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, concepts_sets=concepts_sets, + condition_types=condition_types, length_of_stays=length_of_stays, source_terminologies=source_terminologies, mapping=mapping, provenance_source=provenance_source, stay_source=stay_source, + drg_source=drg_source, age_range=age_range, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index ce376a61..e1f67848 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -7,6 +7,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_biology_relationship, prepare_care_site, + prepare_cost, prepare_measurement, prepare_person, prepare_visit_occurrence, @@ -43,6 +44,7 @@ def compute_completeness_predictor_per_measurement( age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -76,6 +78,7 @@ def compute_completeness_predictor_per_measurement( root_terminology = mapping[0][0] person = prepare_person(data) + cost = prepare_cost(data, drg_source) measurement = prepare_measurement( data=data, @@ -97,6 +100,7 @@ def compute_completeness_predictor_per_measurement( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, + cost=cost, person=person, age_range=age_range, ).drop(columns=["visit_occurrence_source_value", "date"]) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 66dbb89e..126b3ed2 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -7,6 +7,8 @@ from edsteva.probes.utils.prepare_df import ( prepare_biology_relationship, prepare_care_site, + prepare_condition_occurrence, + prepare_cost, prepare_measurement, prepare_person, prepare_visit_occurrence, @@ -41,8 +43,10 @@ def compute_completeness_predictor_per_visit( source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], age_range: List[int], + condition_types: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -55,6 +59,7 @@ def compute_completeness_predictor_per_visit( Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one biological measurement recorded and $t$ is the month. """ + self._metrics = ["c", "n_measurement"] check_tables( data=data, @@ -77,6 +82,7 @@ def compute_completeness_predictor_per_visit( root_terminology = mapping[0][0] person = prepare_person(data) + cost = prepare_cost(data, drg_source) visit_occurrence = prepare_visit_occurrence( data=data, @@ -86,10 +92,25 @@ def compute_completeness_predictor_per_visit( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, + cost=cost, person=person, age_range=age_range, ) + if condition_types: + conditions = prepare_condition_occurrence( + data, + extra_data=None, + visit_occurrence=None, + source_systems="ORBIS", + diag_types=None, + condition_types=condition_types, + start_date=start_date, + end_date=end_date, + )[["visit_occurrence_id", "condition_type"]] + visit_occurrence = visit_occurrence.merge(conditions, on="visit_occurrence_id") + visit_occurrence = visit_occurrence.drop_duplicates() + measurement = prepare_measurement( data=data, biology_relationship=biology_relationship, @@ -139,6 +160,7 @@ def compute_completeness( ): # Visit with measurement partition_cols = [*self._index.copy(), "date"] + n_visit_with_measurement = ( biology_predictor.groupby( partition_cols, @@ -149,6 +171,7 @@ def compute_completeness( .rename(columns={"has_measurement": "n_visit_with_measurement"}) ) n_visit_with_measurement = to("pandas", n_visit_with_measurement) + n_visit_with_measurement = n_visit_with_measurement[ n_visit_with_measurement.n_visit_with_measurement > 0 ] @@ -211,6 +234,7 @@ def get_hospital_visit( on="visit_occurrence_id", how="left", ) + hospital_visit = hospital_visit.rename(columns={"visit_occurrence_id": "visit_id"}) hospital_visit = hospital_visit.merge(care_site, on="care_site_id") diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 2ce3d633..9d00c207 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -8,6 +8,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_care_site, prepare_condition_occurrence, + prepare_cost, prepare_person, prepare_visit_detail, prepare_visit_occurrence, @@ -44,6 +45,7 @@ def compute_completeness_predictor_per_condition( age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -66,6 +68,7 @@ def compute_completeness_predictor_per_condition( logger.info("AREM claim data are only available at hospital level") person = prepare_person(data) + cost = prepare_cost(data, drg_source) visit_occurrence = prepare_visit_occurrence( data=data, @@ -73,6 +76,7 @@ def compute_completeness_predictor_per_condition( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, + cost=cost, person=person, age_range=age_range, ).drop(columns="date") diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 61e66c5d..3f52ed9a 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -8,6 +8,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_care_site, prepare_condition_occurrence, + prepare_cost, prepare_person, prepare_visit_detail, prepare_visit_occurrence, @@ -44,6 +45,7 @@ def compute_completeness_predictor_per_visit( age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -66,6 +68,7 @@ def compute_completeness_predictor_per_visit( logger.info("AREM claim data are only available at hospital level") person = prepare_person(data) + cost = prepare_cost(data, drg_source) visit_occurrence = prepare_visit_occurrence( data=data, @@ -75,6 +78,7 @@ def compute_completeness_predictor_per_visit( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, + cost=cost, person=person, age_range=age_range, ) diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index b265cc83..cef69ae5 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -76,6 +76,7 @@ def compute_process( length_of_stays: List[float] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, age_range: List[int] = None, **kwargs, ): @@ -150,6 +151,7 @@ def compute_process( condition_types=condition_types, source_systems=source_systems, stay_source=stay_source, + drg_source=drg_source, age_range=age_range, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 17fb583a..ffe50967 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -7,6 +7,7 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, + prepare_cost, prepare_note, prepare_note_care_site, prepare_person, @@ -42,6 +43,7 @@ def compute_completeness_predictor_per_note( age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -65,6 +67,7 @@ def compute_completeness_predictor_per_note( ) person = prepare_person(data) + cost = prepare_cost(data, drg_source) visit_occurrence = prepare_visit_occurrence( data=data, @@ -72,6 +75,7 @@ def compute_completeness_predictor_per_note( stay_source=stay_source, length_of_stays=length_of_stays, provenance_source=provenance_source, + cost=cost, person=person, age_range=age_range, ).drop(columns=["visit_occurrence_source_value", "date"]) diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index c882b3e7..978e8462 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -7,6 +7,7 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, + prepare_cost, prepare_note, prepare_note_care_site, prepare_person, @@ -43,6 +44,7 @@ def compute_completeness_predictor_per_visit( age_range: List[int], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -60,6 +62,7 @@ def compute_completeness_predictor_per_visit( check_tables(data=data, required_tables=["note"]) person = prepare_person(data) + cost = prepare_cost(data, drg_source) visit_occurrence = prepare_visit_occurrence( data=data, @@ -69,6 +72,7 @@ def compute_completeness_predictor_per_visit( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, + cost=cost, person=person, age_range=age_range, ) diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 76c9ce98..e2731b9e 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -76,6 +76,7 @@ def compute_process( }, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, age_range: List[int] = None, **kwargs, ): @@ -148,6 +149,7 @@ def compute_process( length_of_stays=length_of_stays, provenance_source=provenance_source, stay_source=stay_source, + drg_source=drg_source, age_range=age_range, **kwargs, ) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 3b10ac8c..b23ee9be 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -23,6 +23,7 @@ def prepare_visit_occurrence( stay_types: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], + cost: DataFrame, length_of_stays: List[float], age_range: List[int] = None, start_date: datetime = None, @@ -78,6 +79,12 @@ def prepare_visit_occurrence( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays ) + cost = cost[["cost_event_id", "drg_source"]] + visit_occurrence = visit_occurrence.merge( + cost, left_on="visit_occurrence_id", right_on="cost_event_id" + ) + visit_occurrence = visit_occurrence.drop_duplicates("visit_occurrence_id") + visit_occurrence = visit_occurrence.rename( columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} ) @@ -125,6 +132,7 @@ def prepare_measurement( "measurement_datetime", "row_status_source_value", "measurement_source_concept_id", + "value_as_number", ] check_columns( @@ -459,6 +467,7 @@ def prepare_visit_detail( "row_status_source_value", ] ] + visit_detail = visit_detail.rename( columns={ "visit_detail_id": "visit_id", @@ -694,3 +703,26 @@ def prepare_person( df_name="person", ) return data.person[person_columns] + + +def prepare_cost(data: Data, drg_source): + check_tables( + data=data, + required_tables=["cost"], + ) + + cost_columns = ["drg_source_value"] + + check_columns( + data.cost, + required_columns=cost_columns, + df_name="cost", + ) + + return filter_table_by_type( + table=data.cost, + table_name="cost", + type_groups=drg_source, + source_col="drg_source_value", + target_col="drg_source", + ) diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 23b4ddd1..d587f921 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -6,6 +6,8 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, + prepare_condition_occurrence, + prepare_cost, prepare_person, prepare_visit_detail, prepare_visit_occurrence, @@ -36,8 +38,10 @@ def compute_completeness_predictor_per_visit( specialties_sets: Union[str, Dict[str, str]], length_of_stays: List[float], age_range: List[int], + condition_types: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], + drg_source: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -53,6 +57,7 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit"] person = prepare_person(data) + cost = prepare_cost(data, drg_source) visit_occurrence = prepare_visit_occurrence( data=data, @@ -62,10 +67,25 @@ def compute_completeness_predictor_per_visit( length_of_stays=length_of_stays, stay_source=stay_source, provenance_source=provenance_source, + cost=cost, person=person, age_range=age_range, ) + if condition_types: + conditions = prepare_condition_occurrence( + data, + extra_data=None, + visit_occurrence=None, + source_systems="ORBIS", + diag_types=None, + condition_types=condition_types, + start_date=start_date, + end_date=end_date, + )[["visit_occurrence_id", "condition_type"]] + visit_occurrence = visit_occurrence.merge(conditions, on="visit_occurrence_id") + visit_occurrence = visit_occurrence.drop_duplicates() + care_site = prepare_care_site( data=data, care_site_ids=care_site_ids, diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index e06631dd..ec420866 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -67,8 +67,10 @@ def compute_process( care_sites_sets: Union[str, Dict[str, str]] = None, specialties_sets: Union[str, Dict[str, str]] = None, length_of_stays: List[float] = None, + condition_types: Union[str, Dict[str, str]] = None, provenance_source: Union[str, Dict[str, str]] = {"All": ".*"}, stay_source: Union[str, Dict[str, str]] = {"MCO": "MCO"}, + drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, age_range: List[int] = None, **kwargs, ): @@ -113,6 +115,8 @@ def compute_process( self._index.remove("length_of_stay") if care_sites_sets is None and "care_sites_set" in self._index: self._index.remove("care_sites_set") + if condition_types is None and "condition_type" in self._index: + self._index.remove("condition_type") if age_range is None and "age_range" in self._index: self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( @@ -129,8 +133,10 @@ def compute_process( care_sites_sets=care_sites_sets, specialties_sets=specialties_sets, length_of_stays=length_of_stays, + condition_types=condition_types, provenance_source=provenance_source, stay_source=stay_source, + drg_source=drg_source, age_range=age_range, **kwargs, ) diff --git a/poetry.lock b/poetry.lock index e9b19660..7c7b05cf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiofiles" version = "22.1.0" description = "File support for asyncio." -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -35,7 +33,6 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] name = "altair" version = "5.0.1" description = "Vega-Altair: A declarative statistical visualization library for Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -60,7 +57,6 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -83,7 +79,6 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = "*" files = [ @@ -93,14 +88,13 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -category = "dev" +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] @@ -108,15 +102,15 @@ argon2-cffi-bindings = "*" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -154,7 +148,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -170,7 +163,6 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -192,7 +184,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -207,7 +198,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -219,7 +209,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -238,7 +227,6 @@ lxml = ["lxml"] name = "black" version = "23.3.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -289,7 +277,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -308,7 +295,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cached-property" version = "1.5.2" description = "A decorator for caching properties in classes." -category = "dev" optional = false python-versions = "*" files = [ @@ -320,7 +306,6 @@ files = [ name = "catalogue" version = "2.0.9" description = "Super lightweight function registries for your library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -336,7 +321,6 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -348,7 +332,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false python-versions = "*" files = [ @@ -425,7 +408,6 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -437,7 +419,6 @@ files = [ name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -520,14 +501,13 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -538,7 +518,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -550,7 +529,6 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -624,37 +602,35 @@ toml = ["tomli"] [[package]] name = "debugpy" -version = "1.6.7" +version = "1.6.7.post1" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, + {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, + {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, ] [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -666,7 +642,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -678,7 +653,6 @@ files = [ name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -690,7 +664,6 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -700,14 +673,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -717,7 +689,6 @@ test = ["pytest (>=6)"] name = "fastjsonschema" version = "2.18.0" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ @@ -732,7 +703,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -748,7 +718,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -763,7 +732,6 @@ cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." -category = "dev" optional = false python-versions = "*" files = [ @@ -781,7 +749,6 @@ dev = ["flake8", "markdown", "twine", "wheel"] name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -794,14 +761,13 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.32" +version = "3.1.34" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, - {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, + {file = "GitPython-3.1.34-py3-none-any.whl", hash = "sha256:5d3802b98a3bae1c2b8ae0e1ff2e4aa16bcdf02c145da34d092324f599f01395"}, + {file = "GitPython-3.1.34.tar.gz", hash = "sha256:85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"}, ] [package.dependencies] @@ -812,7 +778,6 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" name = "griffe" version = "0.30.1" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -828,7 +793,6 @@ colorama = ">=0.4" name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -843,7 +807,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -855,7 +818,6 @@ files = [ name = "importlib-metadata" version = "6.7.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -876,7 +838,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -895,7 +856,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -907,7 +867,6 @@ files = [ name = "ipykernel" version = "6.16.2" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -936,7 +895,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "p name = "ipython" version = "7.34.0" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -973,7 +931,6 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "dev" optional = false python-versions = "*" files = [ @@ -985,7 +942,6 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -998,29 +954,27 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" version = "3.0.3" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1038,7 +992,6 @@ i18n = ["Babel (>=2.7)"] name = "json5" version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "dev" optional = false python-versions = "*" files = [ @@ -1053,7 +1006,6 @@ dev = ["hypothesis"] name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ @@ -1065,7 +1017,6 @@ files = [ name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1097,7 +1048,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1122,7 +1072,6 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com name = "jupyter-core" version = "4.12.0" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1141,7 +1090,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1166,7 +1114,6 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-server" version = "1.24.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1179,7 +1126,7 @@ anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbconvert = ">=6.4.4" nbformat = ">=5.2.0" packaging = "*" @@ -1199,7 +1146,6 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console name = "jupyter-server-fileid" version = "0.9.0" description = "" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1219,7 +1165,6 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1239,7 +1184,6 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.5" description = "Document structures for collaborative editing using Ypy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1259,7 +1203,6 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.5" description = "JupyterLab computational environment" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1288,7 +1231,6 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1300,7 +1242,6 @@ files = [ name = "jupyterlab-rise" version = "0.2.0" description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1318,7 +1259,6 @@ test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-t name = "jupyterlab-server" version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1345,7 +1285,6 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "koalas" version = "1.8.2" description = "Koalas: pandas API on Apache Spark" -category = "main" optional = false python-versions = ">=3.5,<3.10" files = [ @@ -1368,7 +1307,6 @@ spark = ["pyspark (>=2.4.0)"] name = "latexcodec" version = "2.0.1" description = "A lexer and codec to work with LaTeX code in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1383,7 +1321,6 @@ six = ">=1.4.1" name = "loguru" version = "0.7.0" description = "Python logging made (stupidly) simple" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1402,7 +1339,6 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1420,7 +1356,6 @@ testing = ["coverage", "pyyaml"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1480,7 +1415,6 @@ files = [ name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1495,7 +1429,6 @@ traitlets = "*" name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1507,7 +1440,6 @@ files = [ name = "mike" version = "1.1.2" description = "Manage multiple versions of your MkDocs-powered documentation" -category = "dev" optional = false python-versions = "*" files = [ @@ -1529,7 +1461,6 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"] name = "mistune" version = "3.0.1" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1541,7 +1472,6 @@ files = [ name = "mkdocs" version = "1.4.3" description = "Project documentation with Markdown." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1571,7 +1501,6 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp name = "mkdocs-autorefs" version = "0.4.1" description = "Automatically link across pages in MkDocs." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1587,7 +1516,6 @@ mkdocs = ">=1.1" name = "mkdocs-bibtex" version = "2.11.0" description = "An MkDocs plugin that enables managing citations with BibTex" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1605,7 +1533,6 @@ validators = ">=0.19.0" name = "mkdocs-charts-plugin" version = "0.0.9" description = "MkDocs plugin to add charts from data" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1621,7 +1548,6 @@ pymdown-extensions = ">=9.2" name = "mkdocs-gen-files" version = "0.3.5" description = "MkDocs plugin to programmatically generate documentation pages during the build" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -1636,7 +1562,6 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-img2fig-plugin" version = "0.9.3" description = "A MkDocs plugin that converts markdown encoded images into
elements." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1650,7 +1575,6 @@ mkdocs = "*" name = "mkdocs-literate-nav" version = "0.4.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1665,7 +1589,6 @@ mkdocs = ">=1.0.3,<2.0.0" name = "mkdocs-markdown-filter" version = "0.1.1" description = "A MkDocs plugin to add a markdown filter to jinja templates." -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -1680,7 +1603,6 @@ mkdocs = ">=1.0.4" name = "mkdocs-material" version = "9.1.20" description = "Documentation that simply works" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1703,7 +1625,6 @@ requests = ">=2.26" name = "mkdocs-material-extensions" version = "1.1.1" description = "Extension pack for Python Markdown and MkDocs Material." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1715,7 +1636,6 @@ files = [ name = "mkdocs-section-index" version = "0.3.4" description = "MkDocs plugin to allow clickable sections that lead to an index page" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1730,7 +1650,6 @@ mkdocs = ">=1.1,<2.0" name = "mkdocstrings" version = "0.19.0" description = "Automatic documentation from sources, for MkDocs." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1755,7 +1674,6 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] name = "mkdocstrings-python" version = "0.8.2" description = "A Python handler for mkdocstrings." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1771,7 +1689,6 @@ mkdocstrings = ">=0.19" name = "mknotebooks" version = "0.7.1" description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." -category = "dev" optional = false python-versions = "*" files = [ @@ -1789,7 +1706,6 @@ nbconvert = ">=6.0.0" name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1801,7 +1717,6 @@ files = [ name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1837,7 +1752,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1847,7 +1761,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.3" @@ -1860,7 +1774,6 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p name = "nbconvert" version = "7.6.0" description = "Converting Jupyter Notebooks" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1899,7 +1812,6 @@ webpdf = ["pyppeteer (>=1,<1.1)"] name = "nbformat" version = "5.8.0" description = "The Jupyter Notebook format" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1922,7 +1834,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.7" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1934,7 +1845,6 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1949,7 +1859,6 @@ setuptools = "*" name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1984,7 +1893,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2002,7 +1910,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.19.5" description = "NumPy is the fundamental package for array computing with Python." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2046,7 +1953,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2058,7 +1964,6 @@ files = [ name = "pandas" version = "1.3.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2097,7 +2002,6 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandas" version = "1.3.5" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2130,7 +2034,7 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.17.3", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, ] python-dateutil = ">=2.7.3" @@ -2143,7 +2047,6 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2155,7 +2058,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2169,21 +2071,19 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -2198,7 +2098,6 @@ ptyprocess = ">=0.5" name = "pgpasslib" version = "1.1.0" description = "Library for getting passwords from PostgreSQL password files" -category = "main" optional = false python-versions = "*" files = [ @@ -2210,7 +2109,6 @@ files = [ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -2222,7 +2120,6 @@ files = [ name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2232,28 +2129,26 @@ files = [ [[package]] name = "platformdirs" -version = "3.9.1" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, - {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.dependencies] -typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2272,7 +2167,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2292,7 +2186,6 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2307,7 +2200,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -2322,7 +2214,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2347,81 +2238,77 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psycopg2-binary" -version = "2.9.6" +version = "2.9.7" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, + {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, ] [[package]] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -2433,7 +2320,6 @@ files = [ name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2445,7 +2331,6 @@ files = [ name = "py4j" version = "0.10.7" description = "Enables Python programs to dynamically access arbitrary Java objects" -category = "main" optional = false python-versions = "*" files = [ @@ -2457,7 +2342,6 @@ files = [ name = "pyarrow" version = "0.16.0" description = "Python library for Apache Arrow" -category = "main" optional = false python-versions = "*" files = [ @@ -2497,7 +2381,6 @@ six = ">=1.0.0" name = "pybtex" version = "0.24.0" description = "A BibTeX-compatible bibliography processor in Python" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" files = [ @@ -2517,7 +2400,6 @@ test = ["pytest"] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2527,14 +2409,13 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2544,7 +2425,6 @@ plugins = ["importlib-metadata"] name = "pylic" version = "3.5.0" description = "A Python license checker" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -2558,25 +2438,26 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "pymdown-extensions" -version = "10.1" +version = "10.2.1" description = "Extension pack for Python Markdown." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-10.1-py3-none-any.whl", hash = "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc"}, - {file = "pymdown_extensions-10.1.tar.gz", hash = "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195"}, + {file = "pymdown_extensions-10.2.1-py3-none-any.whl", hash = "sha256:bded105eb8d93f88f2f821f00108cb70cef1269db6a40128c09c5f48bfc60ea4"}, + {file = "pymdown_extensions-10.2.1.tar.gz", hash = "sha256:d0c534b4a5725a4be7ccef25d65a4c97dba58b54ad7c813babf0eb5ba9c81591"}, ] [package.dependencies] markdown = ">=3.2" pyyaml = "*" +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pypandoc" version = "1.7.5" description = "Thin wrapper for pandoc." -category = "dev" optional = false python-versions = "^2.7 || ^3.6" files = [ @@ -2587,7 +2468,6 @@ files = [ name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2624,7 +2504,6 @@ files = [ name = "pyspark" version = "2.4.8" description = "Apache Spark Python API" -category = "main" optional = false python-versions = "*" files = [ @@ -2641,14 +2520,13 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.1" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"}, + {file = "pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"}, ] [package.dependencies] @@ -2667,7 +2545,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2686,7 +2563,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-html" version = "3.2.0" description = "pytest plugin for generating HTML reports" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2703,7 +2579,6 @@ pytest-metadata = "*" name = "pytest-metadata" version = "3.0.0" description = "pytest plugin for test session metadata" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2721,7 +2596,6 @@ test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (> name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2736,7 +2610,6 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2746,21 +2619,19 @@ files = [ [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ @@ -2784,7 +2655,6 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2800,7 +2670,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2850,7 +2719,6 @@ files = [ name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2863,89 +2731,104 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.1" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] @@ -2953,107 +2836,105 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2023.6.3" +version = "2023.8.8" description = "Alternative regular expression module, to replace re." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, ] [[package]] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3075,7 +2956,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3090,7 +2970,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3102,7 +2981,6 @@ files = [ name = "ruff" version = "0.0.275" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3129,7 +3007,6 @@ files = [ name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -3146,7 +3023,6 @@ win32 = ["pywin32"] name = "setuptools" version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3163,7 +3039,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3175,7 +3050,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3187,7 +3061,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3199,7 +3072,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3211,7 +3083,6 @@ files = [ name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3232,7 +3103,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "termynal" version = "0.2.0" description = "" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -3250,7 +3120,6 @@ mkdocs = ["mkdocs"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3269,7 +3138,6 @@ test = ["flake8", "isort", "pytest"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3281,7 +3149,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3293,7 +3160,6 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3305,7 +3171,6 @@ files = [ name = "tornado" version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false python-versions = ">= 3.7" files = [ @@ -3324,21 +3189,20 @@ files = [ [[package]] name = "tqdm" -version = "4.65.0" +version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -3347,7 +3211,6 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3363,7 +3226,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "typed-ast" version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3414,7 +3276,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3426,7 +3287,6 @@ files = [ name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3441,7 +3301,6 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3459,7 +3318,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." -category = "dev" optional = false python-versions = ">=3.4" files = [ @@ -3476,7 +3334,6 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "verspec" version = "0.1.0" description = "Flexible version handling" -category = "dev" optional = false python-versions = "*" files = [ @@ -3489,14 +3346,13 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "virtualenv" -version = "20.24.2" +version = "20.24.4" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, - {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, + {file = "virtualenv-20.24.4-py3-none-any.whl", hash = "sha256:29c70bb9b88510f6414ac3e55c8b413a1f96239b6b789ca123437d5e892190cb"}, + {file = "virtualenv-20.24.4.tar.gz", hash = "sha256:772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca"}, ] [package.dependencies] @@ -3506,14 +3362,13 @@ importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3553,7 +3408,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -3565,7 +3419,6 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3581,7 +3434,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -3593,7 +3445,6 @@ files = [ name = "websocket-client" version = "1.6.1" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3610,7 +3461,6 @@ test = ["websockets"] name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3625,7 +3475,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] name = "y-py" version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "dev" optional = false python-versions = "*" files = [ @@ -3701,7 +3550,6 @@ files = [ name = "ypy-websocket" version = "0.8.4" description = "WebSocket connector for Ypy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3721,7 +3569,6 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3736,4 +3583,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -content-hash = "9f999141a04c26b3a43442eb43612080d241b9caa9a842c3b507f595cc1ba874" +content-hash = "0aad6f0bfe9af27ed2cdebe2d5cfb12c57b4ab8de15fa92c9094166a9549f834" diff --git a/pyproject.toml b/pyproject.toml index bf599a30..4ff866af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ [tool.poetry.dependencies] python = "~3.7.1" -pyspark = "~2.4.3" +#pyspark = "~2.4.3" pandas = "^1.3" altair = "^5.0" numpy = "<1.20.0" # https://github.com/databricks/koalas/pull/2166 diff --git a/tests/test_probes.py b/tests/test_probes.py index 3d7eccf3..be0a73a4 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -53,6 +53,7 @@ stay_source={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, age_range=[18, 64], + drg_source={"M": ".{2}M"}, ), dict( visit_predictor="per_visit_default", @@ -80,6 +81,7 @@ provenance_source={"All": ".*"}, age_range=[18], module="koalas", + drg_source={"All": ".*"}, ), dict( visit_predictor="per_visit_default", @@ -107,6 +109,7 @@ provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_range=None, module="pandas", + drg_source={"All": ".*"}, ), ] From 80cc453d81925c3bec10abf648337d39ea41ac2f Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 6 Sep 2023 14:01:53 +0000 Subject: [PATCH 083/127] merge pb fixed --- edsteva/probes/utils/filter_df.py | 23 - edsteva/probes/utils/prepare_df.py | 37 - .../completeness_predictors/per_visit.py | 19 - poetry.lock | 1274 ++++++++--------- tests/test_probes.py | 41 - 5 files changed, 587 insertions(+), 807 deletions(-) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index c816874f..b3f4bac1 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -147,29 +147,6 @@ def filter_table_by_length_of_stay( return visit_occurrence.drop(columns="visit_end_datetime") -def filter_table_by_age(visit_occurrence: pd.DataFrame, age_ranges: List[int]): - age_ranges.sort() - - visit_occurrence["age"] = ( - visit_occurrence["date"] - visit_occurrence["birth_datetime"] - ) / (np.timedelta64(timedelta(days=1)) * 356) - - visit_occurrence["age_range"] = "Not specified" - visit_occurrence.loc[ - visit_occurrence.age <= age_ranges[0], "age_range" - ] = f"age <= {age_ranges[0]}" - - for age_min, age_max in zip(age_ranges[:-1], age_ranges[1:]): - in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) - visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" - - visit_occurrence.loc[ - visit_occurrence.age > age_ranges[-1], "age_range" - ] = f"age > {age_ranges[-1]}" - - return visit_occurrence.drop(columns="age") - - def filter_table_by_care_site( table_to_filter: DataFrame, care_site_relationship: pd.DataFrame, diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 753ddeb2..41cc65d2 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -20,20 +20,12 @@ def prepare_visit_occurrence( data: Data, -<<<<<<< HEAD stay_types: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], cost: DataFrame, length_of_stays: List[float], - age_range: List[int] = None, -======= - stay_types: Union[bool, str, Dict[str, str]], - stay_sources: Union[bool, str, Dict[str, str]], - provenance_sources: Union[bool, str, Dict[str, str]], - length_of_stays: List[float], age_ranges: List[int] = None, ->>>>>>> main start_date: datetime = None, end_date: datetime = None, person: DataFrame = None, @@ -113,37 +105,11 @@ def prepare_visit_occurrence( target_col="stay_type", ) -<<<<<<< HEAD - if age_range: - visit_occurrence = visit_occurrence.merge(person, on="person_id") - visit_occurrence = filter_table_by_age( - visit_occurrence=visit_occurrence, - age_range=age_range, -======= - if stay_sources and isinstance(stay_sources, (dict, str)): - visit_occurrence = filter_table_by_type( - table=visit_occurrence, - table_name="visit_occurrence", - type_groups=stay_sources, - source_col="stay_source_value", - target_col="stay_source", - ) - - if provenance_sources and isinstance(provenance_sources, (dict, str)): - visit_occurrence = filter_table_by_type( - table=visit_occurrence, - table_name="visit_occurrence", - type_groups=provenance_sources, - source_col="provenance_source_value", - target_col="provenance_source", - ) - if age_ranges: visit_occurrence = visit_occurrence.merge(person, on="person_id") visit_occurrence = filter_table_by_age( visit_occurrence=visit_occurrence, age_ranges=age_ranges, ->>>>>>> main ) return visit_occurrence @@ -746,7 +712,6 @@ def prepare_person( df_name="person", ) return data.person[person_columns] -<<<<<<< HEAD def prepare_cost(data: Data, drg_source): @@ -770,5 +735,3 @@ def prepare_cost(data: Data, drg_source): source_col="drg_source_value", target_col="drg_source", ) -======= ->>>>>>> main diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 086a78bd..8db6f7b0 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -6,11 +6,8 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, -<<<<<<< HEAD prepare_condition_occurrence, prepare_cost, -======= ->>>>>>> main prepare_person, prepare_visit_detail, prepare_visit_occurrence, @@ -40,17 +37,11 @@ def compute_completeness_predictor_per_visit( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], length_of_stays: List[float], -<<<<<<< HEAD age_range: List[int], condition_types: Union[str, Dict[str, str]], provenance_source: Union[str, Dict[str, str]], stay_source: Union[str, Dict[str, str]], drg_source: Union[str, Dict[str, str]], -======= - age_ranges: List[int], - provenance_sources: Union[bool, str, Dict[str, str]], - stay_sources: Union[bool, str, Dict[str, str]], ->>>>>>> main **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -66,10 +57,7 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit"] person = prepare_person(data) -<<<<<<< HEAD cost = prepare_cost(data, drg_source) -======= ->>>>>>> main visit_occurrence = prepare_visit_occurrence( data=data, @@ -77,18 +65,11 @@ def compute_completeness_predictor_per_visit( end_date=end_date, stay_types=stay_types, length_of_stays=length_of_stays, -<<<<<<< HEAD stay_source=stay_source, provenance_source=provenance_source, cost=cost, person=person, age_range=age_range, -======= - stay_sources=stay_sources, - provenance_sources=provenance_sources, - person=person, - age_ranges=age_ranges, ->>>>>>> main ) if condition_types: diff --git a/poetry.lock b/poetry.lock index 651e730a..94cc6932 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,13 +55,13 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " [[package]] name = "anyio" -version = "3.7.1" +version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, + {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, ] [package.dependencies] @@ -71,7 +71,7 @@ sniffio = ">=1.1" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] @@ -88,13 +88,13 @@ files = [ [[package]] name = "argon2-cffi" -version = "23.1.0" -description = "Argon2 for Python" +version = "21.3.0" +description = "The secure Argon2 password hashing algorithm." optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, - {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, ] [package.dependencies] @@ -102,10 +102,9 @@ argon2-cffi-bindings = "*" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["argon2-cffi[tests,typing]", "tox (>4)"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] -tests = ["hypothesis", "pytest"] -typing = ["mypy"] +dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] +docs = ["furo", "sphinx", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] [[package]] name = "argon2-cffi-bindings" @@ -304,13 +303,13 @@ files = [ [[package]] name = "catalogue" -version = "2.0.9" +version = "2.0.8" description = "Super lightweight function registries for your library" optional = false python-versions = ">=3.6" files = [ - {file = "catalogue-2.0.9-py3-none-any.whl", hash = "sha256:5817ce97de17ace366a15eadd4987ac022b28f262006147549cdb3467265dc4d"}, - {file = "catalogue-2.0.9.tar.gz", hash = "sha256:d204c423ec436f2545341ec8a0e026ae033b3ce5911644f95e94d6b887cf631c"}, + {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, + {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, ] [package.dependencies] @@ -319,13 +318,13 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] [[package]] @@ -417,97 +416,97 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.3" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] [package.dependencies] @@ -602,54 +601,29 @@ toml = ["tomli"] [[package]] name = "debugpy" -<<<<<<< HEAD -version = "1.6.7.post1" -======= -version = "1.6.8" ->>>>>>> main +version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.7" files = [ -<<<<<<< HEAD - {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, - {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, - {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, -======= - {file = "debugpy-1.6.8-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:8c1f5a3286fb633f691c594649e9d2e8e30292c9eaf49e38d7da525151b33a83"}, - {file = "debugpy-1.6.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406b3a6cb7548d73260f69a511178ec9196779cafda68e563488c6f94cc88670"}, - {file = "debugpy-1.6.8-cp310-cp310-win32.whl", hash = "sha256:6830947f68b41cd6abe20941ec3303a8452c40ff5fe3637c6efe233e395ecebc"}, - {file = "debugpy-1.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:1fe3baa28f5a14d8d2a60dded9ea088e27b33f1854ae9a0a1faa1ba03a8b7e47"}, - {file = "debugpy-1.6.8-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:5502e14de6b7241ecf7c4fa4ec6dd61d0824da7a09020c7ffe7be4cd09d36f24"}, - {file = "debugpy-1.6.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4a7193cec3f1e188963f6e8699e1187f758a0a4bbce511b3ad40caf618fc888"}, - {file = "debugpy-1.6.8-cp37-cp37m-win32.whl", hash = "sha256:591aac0e69bc75102d9f9294f1228e5d9ff9aa17b8c88e48b1bbb3dab8a54dcc"}, - {file = "debugpy-1.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:bb27b8e08f8e60705de6cf05b5da4c21e5a0bc2ca73f06fc36646f456df18ff5"}, - {file = "debugpy-1.6.8-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:6ca1c92e30e2aaeca156d5bd76e1587c23e332474a7b12e1900dd632b31ce05e"}, - {file = "debugpy-1.6.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:959f9b8181a4c544b067daff8d881cd3ac4c7aec1a3a4f41f81c529795b3d864"}, - {file = "debugpy-1.6.8-cp38-cp38-win32.whl", hash = "sha256:4172383b961a2334d29168c7f7b24f2f99d29291a945016986c78a5683fba915"}, - {file = "debugpy-1.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:05d1b288167ce3bfc8e1912ebed036207a27b9569ae4476f18287902501689c6"}, - {file = "debugpy-1.6.8-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:95f7ce92450b72abcf0c479539a7d00c20e68f1f1fb447eef0b08d2a635d96d7"}, - {file = "debugpy-1.6.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f16bb157b6018ce6a23b64653a6b1892f046cc2b0576df1794c6b22f9fd82118"}, - {file = "debugpy-1.6.8-cp39-cp39-win32.whl", hash = "sha256:f7a80c50b89d8fb49c9e5b6ee28c0bfb822fbd33fef0f2f9843724d0d1984e4e"}, - {file = "debugpy-1.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:2345beced3e79fd8ac4158e839a1604d5cccd19beb45561a1ffe2e5b33465f28"}, - {file = "debugpy-1.6.8-py2.py3-none-any.whl", hash = "sha256:1ca76d3ebb0e6368e107cf2e005e848d3c7705a5b513fdf65470a6f4e49a2de7"}, - {file = "debugpy-1.6.8.zip", hash = "sha256:3b7091d908dec70022b8966c32b1e9eaf183ff05291edf1d147fee153f4cb9f8"}, ->>>>>>> main + {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, + {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, + {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, + {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, + {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, + {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, + {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, + {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, + {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, + {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, + {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, + {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, + {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, + {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, + {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, + {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, + {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, + {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, ] [[package]] @@ -676,13 +650,13 @@ files = [ [[package]] name = "distlib" -version = "0.3.7" +version = "0.3.6" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, ] [[package]] @@ -698,13 +672,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.3" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ] [package.extras] @@ -712,13 +686,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastjsonschema" -version = "2.18.0" +version = "2.17.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, ] [package.extras] @@ -786,13 +760,13 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.34" +version = "3.1.31" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.34-py3-none-any.whl", hash = "sha256:5d3802b98a3bae1c2b8ae0e1ff2e4aa16bcdf02c145da34d092324f599f01395"}, - {file = "GitPython-3.1.34.tar.gz", hash = "sha256:85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"}, + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, ] [package.dependencies] @@ -979,21 +953,21 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.19.0" +version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.0,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1207,22 +1181,22 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes [[package]] name = "jupyter-ydoc" -version = "0.2.5" +version = "0.2.4" description = "Document structures for collaborative editing using Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, - {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, + {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, + {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, ] [package.dependencies] importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.6.0,<0.7.0" +y-py = ">=0.5.3,<0.6.0" [package.extras] dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] [[package]] name = "jupyterlab" @@ -1282,13 +1256,13 @@ test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-t [[package]] name = "jupyterlab-server" -version = "2.24.0" +version = "2.23.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, - {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, ] [package.dependencies] @@ -1304,7 +1278,7 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "koalas" @@ -1626,13 +1600,13 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -version = "9.1.20" +version = "9.1.18" description = "Documentation that simply works" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.20-py3-none-any.whl", hash = "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc"}, - {file = "mkdocs_material-9.1.20.tar.gz", hash = "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7"}, + {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, + {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, ] [package.dependencies] @@ -1857,13 +1831,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.7" +version = "1.5.6" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, ] [[package]] @@ -2096,13 +2070,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] @@ -2154,21 +2128,21 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.8.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, + {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, ] [package.dependencies] -typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -2209,13 +2183,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.1" +version = "0.17.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, - {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, ] [package.extras] @@ -2223,13 +2197,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.39" +version = "3.0.38" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, ] [package.dependencies] @@ -2263,71 +2237,73 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psycopg2-binary" -version = "2.9.7" +version = "2.9.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, + {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, ] [[package]] @@ -2365,45 +2341,42 @@ files = [ [[package]] name = "pyarrow" -version = "8.0.0" +version = "0.16.0" description = "Python library for Apache Arrow" optional = false -python-versions = ">=3.7" +python-versions = "*" files = [ - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, - {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, - {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, - {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, - {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, - {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, - {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, - {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, -] - -[package.dependencies] -numpy = ">=1.16.6" + {file = "pyarrow-0.16.0-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:db6d7ec70beeaea468c9c47241f95e2eecfaa2dbb4a27965bf1f952c12680fe9"}, + {file = "pyarrow-0.16.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:caf50dfcc709c7cfca4f816e9b4442222e9e6d3ec51c2618fb6bde8a73c59be4"}, + {file = "pyarrow-0.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:899d7316ea5610798c42e13ffb1d73323600168ccd6d8f0d58ce9e665b7a341f"}, + {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:94d89482bb5461c55b2ee33eafd44294c7f1244cc9e390ea7855f647957113f7"}, + {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8663ca4ca5c27fcb5c8bfc5c7b7e8780b9d699e47da1cad1b7b170eff98498b5"}, + {file = "pyarrow-0.16.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:5449408037c761a0622d13cc0c21756fcce2ea7346ea9c73e2abf8cdd8385ea2"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a609354433dd31ffc4c8de8637de915391fd6ff781b3d8c5d51d3f4eec6fcf39"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c1214f1689711d6562df70863cbd62d6f2a83e68214bb4c97c489f2f97ddeaf4"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:8a00a8497e2367c4f206bb8b7df01852d1e3f1261107ee77a217af654793ac0e"}, + {file = "pyarrow-0.16.0-cp35-cp35m-win_amd64.whl", hash = "sha256:df8ff1c5de2e454dcab9421d70d0db3985ad4efc40899d947687ca6d36846fc8"}, + {file = "pyarrow-0.16.0-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:7aebec0f1b76e73a6307b5027618c843eadb4dc4f6e1f08ca496a01a7273ac64"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd18bc60cef3e72f8082c46de4cfb0cf9fb294c0ff7a201e2b95924fb5d2d146"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:00abec64636aa506d948926ab5dd37fdfe8c0407b069602ba16c68c19ccb0257"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09e9046e3dc24b5c81d307d150b8c04b127aa9f9b3c6babcf13313f2448dd185"}, + {file = "pyarrow-0.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6c042f192c9a0ba33a927a8d0a1e6bfe3ab29aa48a74fc48040d32b07d65124"}, + {file = "pyarrow-0.16.0-cp37-cp37m-macosx_10_9_intel.whl", hash = "sha256:d746e5f34240199ef8afdd0efb391692b85b1ce3e098febd887efc2128da6570"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5fede6cb5d9fda323098042ece0597f40e5bd78520b87e7b8efdd8f062846ad8"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53d3f3684ca0cc12b64f2446022e2ab4a9b0b0976bba0f47ea53ea16b6af4ece"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:890b9a7d6e2c61968ba93e535fc1cf116e66eea2fcc2d6b2503b44e190f3bc47"}, + {file = "pyarrow-0.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8d212c2c93706fafff39a71bee3d42dfd1ca393fda31ce5e3a05c620e1886a7f"}, + {file = "pyarrow-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcd9347797578b0f65a6fb0cb76f462d5d0d63148f51ac8f9c9b5be9acc3f40e"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ac83d595f9b469bea712ce998270038b08b40794abd7374e4bce2ecf5ee2c1cb"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:fab386e5403cec3f66e1ac1375f3648351f9415f28d7740ee0f813d1fc0a326a"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:5af1cc49225aaf82a3dfbda22e5533d339f540921ea001ba36b0d6d5ad364e2b"}, + {file = "pyarrow-0.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ff6e7b0411e3e163cc6465f1ed6a680f0c78b4ff6a4f507d29eb4ed65860557"}, + {file = "pyarrow-0.16.0.tar.gz", hash = "sha256:bb6bb7ba1b6a1c3c94cc0d0068c96df9498c973ad0ae6ca398164d339b704c97"}, +] + +[package.dependencies] +numpy = ">=1.14" +six = ">=1.0.0" [[package]] name = "pybtex" @@ -2437,13 +2410,13 @@ files = [ [[package]] name = "pygments" -version = "2.16.1" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, ] [package.extras] @@ -2466,22 +2439,19 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "pymdown-extensions" -version = "10.2.1" +version = "10.0.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-10.2.1-py3-none-any.whl", hash = "sha256:bded105eb8d93f88f2f821f00108cb70cef1269db6a40128c09c5f48bfc60ea4"}, - {file = "pymdown_extensions-10.2.1.tar.gz", hash = "sha256:d0c534b4a5725a4be7ccef25d65a4c97dba58b54ad7c813babf0eb5ba9c81591"}, + {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, + {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, ] [package.dependencies] markdown = ">=3.2" pyyaml = "*" -[package.extras] -extra = ["pygments (>=2.12)"] - [[package]] name = "pypandoc" version = "1.7.5" @@ -2548,13 +2518,13 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] [[package]] name = "pytest" -version = "7.4.1" +version = "7.4.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"}, - {file = "pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -2647,13 +2617,13 @@ files = [ [[package]] name = "pytz" -version = "2023.3.post1" +version = "2023.3" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, ] [[package]] @@ -2696,51 +2666,51 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] [[package]] @@ -2759,104 +2729,88 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.1" +version = "25.1.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, - {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, - {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, - {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, - {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, - {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, - {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, - {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, - {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, - {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, - {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, - {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, ] [package.dependencies] @@ -2864,99 +2818,99 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2023.8.8" +version = "2023.6.3" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, - {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, - {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, - {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, - {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, - {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, - {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, - {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, - {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, - {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, - {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, - {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, - {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, - {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, - {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, - {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, - {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, + {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, + {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, + {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, + {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, + {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, + {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, + {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, + {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, + {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, + {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, + {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, + {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, + {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, + {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, + {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, ] [[package]] @@ -3215,39 +3169,6 @@ files = [ {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] -[[package]] -name = "tqdm" -<<<<<<< HEAD -version = "4.66.1" -======= -version = "4.65.0" ->>>>>>> main -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ -<<<<<<< HEAD - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, -======= - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, ->>>>>>> main -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -<<<<<<< HEAD -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -======= -dev = ["py-make (>=0.1.0)", "twine", "wheel"] ->>>>>>> main -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - [[package]] name = "traitlets" version = "5.9.0" @@ -3265,52 +3186,35 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typed-ast" -version = "1.5.5" +version = "1.5.4" description = "a fork of Python 2 and 3 ast modules with type comment support" optional = false python-versions = ">=3.6" files = [ - {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, - {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, - {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, - {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, - {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, - {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, - {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, - {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, - {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, - {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, - {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] [[package]] @@ -3340,13 +3244,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, ] [package.extras] @@ -3387,24 +3291,24 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "virtualenv" -version = "20.24.4" +version = "20.23.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.4-py3-none-any.whl", hash = "sha256:29c70bb9b88510f6414ac3e55c8b413a1f96239b6b789ca123437d5e892190cb"}, - {file = "virtualenv-20.24.4.tar.gz", hash = "sha256:772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca"}, + {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, + {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, ] [package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" +distlib = ">=0.3.6,<1" +filelock = ">=3.12,<4" importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} -platformdirs = ">=3.9.1,<4" +platformdirs = ">=3.5.1,<4" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] [[package]] name = "watchdog" @@ -3514,94 +3418,94 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [[package]] name = "y-py" -version = "0.6.0" +version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" optional = false python-versions = "*" files = [ - {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, - {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, - {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, - {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, - {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, - {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, - {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, - {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, - {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, - {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, - {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, - {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, - {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, - {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, + {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, + {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, + {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, + {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, + {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, + {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, + {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, + {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, + {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, + {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, + {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, + {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, ] [[package]] name = "ypy-websocket" -version = "0.8.4" +version = "0.8.2" description = "WebSocket connector for Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, - {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, + {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, + {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, ] [package.dependencies] aiofiles = ">=22.1.0,<23" aiosqlite = ">=0.17.0,<1" -y-py = ">=0.6.0,<0.7.0" +y-py = ">=0.5.3,<0.6.0" [package.extras] test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] @@ -3624,8 +3528,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -<<<<<<< HEAD -content-hash = "0aad6f0bfe9af27ed2cdebe2d5cfb12c57b4ab8de15fa92c9094166a9549f834" -======= -content-hash = "7296cb655e45865fd5b477dba20918937ec064909a2ed58b4915fe6dd7137094" ->>>>>>> main +content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" diff --git a/tests/test_probes.py b/tests/test_probes.py index 6b972ae3..ca77f341 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -50,16 +50,11 @@ end_date=datetime(2020, 1, 1), test_save=False, module="koalas", -<<<<<<< HEAD stay_source={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_source={"All": ".*"}, age_range=[18, 64], drg_source={"M": ".{2}M"}, -======= - stay_sources={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, provenance_sources={"All": ".*"}, - age_ranges=[18, 64], ->>>>>>> main ), dict( visit_predictor="per_visit_default", @@ -83,15 +78,9 @@ start_date="2010-01-03", end_date=None, test_save=False, -<<<<<<< HEAD stay_source={"MCO": "MCO"}, provenance_source={"All": ".*"}, age_range=[18], -======= - stay_sources=None, - provenance_sources=None, - age_ranges=None, ->>>>>>> main module="koalas", drg_source={"All": ".*"}, ), @@ -117,15 +106,9 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, -<<<<<<< HEAD stay_source={"MCO": "MCO"}, provenance_source={"All": ".*", "urgence": "service d'urgence"}, age_range=None, -======= - stay_sources=None, - provenance_sources=None, - age_ranges=None, ->>>>>>> main module="pandas", drg_source={"All": ".*"}, ), @@ -213,15 +196,9 @@ def test_compute_visit_probe(data, params): care_sites_sets=params["care_sites_sets"], specialties_sets=params["specialties_sets"], length_of_stays=params["length_of_stays"], -<<<<<<< HEAD - stay_source=params["stay_source"], - provenance_source=params["provenance_source"], - age_range=params["age_range"], -======= stay_sources=params["stay_sources"], provenance_sources=params["provenance_sources"], age_ranges=params["age_ranges"], ->>>>>>> main ) # Care site levels @@ -373,15 +350,9 @@ def test_compute_note_probe(data, params): specialties_sets=params["specialties_sets"], length_of_stays=params["length_of_stays"], note_types=params["note_types"], -<<<<<<< HEAD - stay_source=params["stay_source"], - provenance_source=params["provenance_source"], - age_range=params["age_range"], -======= stay_sources=params["stay_sources"], provenance_sources=params["provenance_sources"], age_ranges=params["age_ranges"], ->>>>>>> main ) # Care site levels @@ -534,15 +505,9 @@ def test_compute_condition_probe(data, params): diag_types=params["diag_types"], condition_types=params["condition_types"], source_systems=params["source_systems"], -<<<<<<< HEAD - stay_source=params["stay_source"], - provenance_source=params["provenance_source"], - age_range=params["age_range"], -======= stay_sources=params["stay_sources"], provenance_sources=params["provenance_sources"], age_ranges=params["age_ranges"], ->>>>>>> main ) # Care site levels @@ -730,15 +695,9 @@ def test_compute_biology_probe(data, params): length_of_stays=params["length_of_stays"], concepts_sets=params["concepts_sets"], concept_codes=params["concept_codes"], -<<<<<<< HEAD stay_source=params["stay_source"], provenance_source=params["provenance_source"], age_range=params["age_range"], -======= - stay_sources=params["stay_sources"], - provenance_sources=params["provenance_sources"], - age_ranges=params["age_ranges"], ->>>>>>> main ) # Care site levels From ebb6445999a9f618b4f0a742176d6b6e98cd1095 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 6 Sep 2023 15:06:44 +0000 Subject: [PATCH 084/127] adding all modifications --- edsteva/probes/biology/biology.py | 6 +- .../per_measurement.py | 16 +- .../completeness_predictors/per_visit.py | 16 +- .../completeness_predictors/per_condition.py | 16 +- .../completeness_predictors/per_visit.py | 16 +- edsteva/probes/condition/condition.py | 6 +- .../note/completeness_predictors/per_note.py | 16 +- .../note/completeness_predictors/per_visit.py | 16 +- edsteva/probes/note/note.py | 6 +- edsteva/probes/utils/filter_df.py | 18 +- edsteva/probes/utils/prepare_df.py | 12 +- .../completeness_predictors/per_visit.py | 16 +- edsteva/probes/visit/visit.py | 6 +- poetry.lock | 1261 +++++++++-------- tests/test_probes.py | 29 +- 15 files changed, 742 insertions(+), 714 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 57f7eea7..2dd0ef3c 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -110,7 +110,7 @@ def compute_process( "Bicarbonate": "A0422|H9622|C6408|F4161", }, condition_types: Union[str, Dict[str, str]] = None, - drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, + drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, care_site_ids: List[int] = None, care_site_short_names: List[str] = None, care_site_levels: Union[bool, str, List[str]] = True, @@ -170,7 +170,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` condition_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` - drg_source : Union[str, Dict[str, str]], optional + drg_sources : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` @@ -222,7 +222,7 @@ def compute_process( mapping=mapping, provenance_sources=provenance_sources, stay_sources=stay_sources, - drg_source=drg_source, + drg_sources=drg_sources, age_ranges=age_ranges, **kwargs, ) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 9424da6c..49313e27 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -41,10 +41,10 @@ def compute_completeness_predictor_per_measurement( length_of_stays: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], - age_range: List[int], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + age_ranges: List[int], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -78,7 +78,7 @@ def compute_completeness_predictor_per_measurement( root_terminology = mapping[0][0] person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) measurement = prepare_measurement( data=data, @@ -98,11 +98,11 @@ def compute_completeness_predictor_per_measurement( end_date=None, stay_types=stay_types, length_of_stays=length_of_stays, - provenance_source=provenance_source, - stay_source=stay_source, + provenance_sources=provenance_sources, + stay_sources=stay_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index ec0c2373..b926f343 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -42,11 +42,11 @@ def compute_completeness_predictor_per_visit( length_of_stays: List[float], source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], - age_range: List[int], + age_ranges: List[int], condition_types: Union[str, Dict[str, str]], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -82,7 +82,7 @@ def compute_completeness_predictor_per_visit( root_terminology = mapping[0][0] person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) visit_occurrence = prepare_visit_occurrence( data=data, @@ -90,11 +90,11 @@ def compute_completeness_predictor_per_visit( end_date=end_date, stay_types=stay_types, length_of_stays=length_of_stays, - provenance_source=provenance_source, - stay_source=stay_source, + provenance_sources=provenance_sources, + stay_sources=stay_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ) if condition_types: diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 0720935b..f7459cbd 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -41,10 +41,10 @@ def compute_completeness_predictor_per_condition( condition_types: Union[bool, str, Dict[str, str]], source_systems: Union[bool, List[str]], length_of_stays: List[float], - age_range: List[int], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + age_ranges: List[int], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -64,17 +64,17 @@ def compute_completeness_predictor_per_condition( person = prepare_person(data) person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, length_of_stays=length_of_stays, - provenance_source=provenance_source, - stay_source=stay_source, + provenance_sources=provenance_sources, + stay_sources=stay_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 76993e72..412b343f 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -41,10 +41,10 @@ def compute_completeness_predictor_per_visit( condition_types: Union[bool, str, Dict[str, str]], source_systems: Union[bool, List[str]], length_of_stays: List[float], - age_range: List[int], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + age_ranges: List[int], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -64,7 +64,7 @@ def compute_completeness_predictor_per_visit( person = prepare_person(data) person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) visit_occurrence = prepare_visit_occurrence( data=data, @@ -72,11 +72,11 @@ def compute_completeness_predictor_per_visit( end_date=end_date, stay_types=stay_types, length_of_stays=length_of_stays, - provenance_source=provenance_source, - stay_source=stay_source, + provenance_sources=provenance_sources, + stay_sources=stay_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ) condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index ae048a27..cd7f8d08 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -82,7 +82,7 @@ def compute_process( length_of_stays: List[float] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, age_ranges: List[int] = None, - drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, + drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -125,7 +125,7 @@ def compute_process( **EXAMPLE**: `[1, 30]` provenance_sources: Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - drg_source : Union[str, Dict[str, str]], optional + drg_sources : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` @@ -174,7 +174,7 @@ def compute_process( condition_types=condition_types, source_systems=source_systems, stay_sources=stay_sources, - drg_source=drg_source, + drg_sources=drg_sources, age_ranges=age_ranges, **kwargs, ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index f1b10bbe..95627da1 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -40,10 +40,10 @@ def compute_completeness_predictor_per_note( extra_data: Data, length_of_stays: List[float], note_types: Union[str, Dict[str, str]], - age_range: List[int], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + age_ranges: List[int], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -67,17 +67,17 @@ def compute_completeness_predictor_per_note( ) person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) visit_occurrence = prepare_visit_occurrence( data=data, stay_types=stay_types, - stay_source=stay_source, + stay_sources=stay_sources, length_of_stays=length_of_stays, - provenance_source=provenance_source, + provenance_source=provenance_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) care_site = prepare_care_site( diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index bc4782b4..44a0dc26 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -41,10 +41,10 @@ def compute_completeness_predictor_per_visit( extra_data: Data, length_of_stays: List[float], note_types: Union[str, Dict[str, str]], - age_range: List[int], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + age_ranges: List[int], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -62,7 +62,7 @@ def compute_completeness_predictor_per_visit( check_tables(data=data, required_tables=["note"]) person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) visit_occurrence = prepare_visit_occurrence( data=data, @@ -70,11 +70,11 @@ def compute_completeness_predictor_per_visit( end_date=end_date, stay_types=stay_types, length_of_stays=length_of_stays, - provenance_source=provenance_source, - stay_source=stay_source, + provenance_sources=provenance_sources, + stay_sources=stay_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ) care_site = prepare_care_site( diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 9fa700c8..169a4362 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -83,7 +83,7 @@ def compute_process( length_of_stays: List[float] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, condition_types: Union[str, Dict[str, str]] = None, - drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, + drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, age_ranges: List[int] = None, **kwargs, ): @@ -125,7 +125,7 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` condition_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` - drg_source : Union[str, Dict[str, str]], optional + drg_sources : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` @@ -171,7 +171,7 @@ def compute_process( provenance_sources=provenance_sources, stay_sources=stay_sources, age_ranges=age_ranges, - drg_source=drg_source, + drg_sources=drg_sources, condition_types=condition_types, **kwargs, ) diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index b3f4bac1..72b94eea 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -215,25 +215,25 @@ def filter_table_by_care_site( ] -def filter_table_by_age(visit_occurrence: pd.DataFrame, age_range: List[int]): - age_range.sort() +def filter_table_by_age(visit_occurrence: pd.DataFrame, age_ranges: List[int]): + age_ranges.sort() visit_occurrence["age"] = ( visit_occurrence["date"] - visit_occurrence["birth_datetime"] ) / (np.timedelta64(timedelta(days=1)) * 356) - visit_occurrence["age_range"] = "Not specified" + visit_occurrence["age_ranges"] = "Not specified" visit_occurrence.loc[ - visit_occurrence.age <= age_range[0], "age_range" - ] = f"age <= {age_range[0]}" + visit_occurrence.age <= age_ranges[0], "age_ranges" + ] = f"age <= {age_ranges[0]}" - for age_min, age_max in zip(age_range[:-1], age_range[1:]): + for age_min, age_max in zip(age_ranges[:-1], age_ranges[1:]): in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) - visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" + visit_occurrence.loc[in_range, "age_ranges"] = f"{age_min} < age <= {age_max}" visit_occurrence.loc[ - visit_occurrence.age > age_range[-1], "age_range" - ] = f"age > {age_range[-1]}" + visit_occurrence.age > age_ranges[-1], "age_ranges" + ] = f"age > {age_ranges[-1]}" return visit_occurrence.drop(columns="age") diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 41cc65d2..61f52a64 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -21,8 +21,8 @@ def prepare_visit_occurrence( data: Data, stay_types: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - provenance_source: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + provenance_sources: Union[str, Dict[str, str]], cost: DataFrame, length_of_stays: List[float], age_ranges: List[int] = None, @@ -56,20 +56,20 @@ def prepare_visit_occurrence( invalid_naming="supprimé", ) - if stay_source: + if stay_sources: visit_occurrence = filter_table_by_type( table=visit_occurrence, table_name="visit_occurrence", - type_groups=stay_source, + type_groups=stay_sources, source_col="stay_source_value", target_col="stay_source", ) - if provenance_source: + if provenance_sources: visit_occurrence = filter_table_by_type( table=visit_occurrence, table_name="visit_occurrence", - type_groups=provenance_source, + type_groups=provenance_sources, source_col="provenance_source_value", target_col="provenance_source", ) diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 8db6f7b0..2d9c9f9b 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -37,11 +37,11 @@ def compute_completeness_predictor_per_visit( care_sites_sets: Union[str, Dict[str, str]], specialties_sets: Union[str, Dict[str, str]], length_of_stays: List[float], - age_range: List[int], + age_ranges: List[int], condition_types: Union[str, Dict[str, str]], - provenance_source: Union[str, Dict[str, str]], - stay_source: Union[str, Dict[str, str]], - drg_source: Union[str, Dict[str, str]], + provenance_sources: Union[str, Dict[str, str]], + stay_sources: Union[str, Dict[str, str]], + drg_sources: Union[str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -57,7 +57,7 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit"] person = prepare_person(data) - cost = prepare_cost(data, drg_source) + cost = prepare_cost(data, drg_sources) visit_occurrence = prepare_visit_occurrence( data=data, @@ -65,11 +65,11 @@ def compute_completeness_predictor_per_visit( end_date=end_date, stay_types=stay_types, length_of_stays=length_of_stays, - stay_source=stay_source, - provenance_source=provenance_source, + stay_sources=stay_sources, + provenance_sources=provenance_sources, cost=cost, person=person, - age_range=age_range, + age_ranges=age_ranges, ) if condition_types: diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 062aa856..03ccdffb 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -76,7 +76,7 @@ def compute_process( length_of_stays: List[float] = None, condition_types: Union[str, Dict[str, str]] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, - drg_source: Union[str, Dict[str, str]] = {"All": ".*"}, + drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, age_ranges: List[int] = None, **kwargs, ): @@ -116,7 +116,7 @@ def compute_process( **EXAMPLE**: `[18, 64]` condition_types : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` - drg_source : Union[str, Dict[str, str]], optional + drg_sources : Union[str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` """ if not care_site_levels and "care_site_level" in self._index: @@ -157,7 +157,7 @@ def compute_process( stay_sources=stay_sources, condition_types=condition_types, age_ranges=age_ranges, - drg_source=drg_source, + drg_sources=drg_sources, **kwargs, ) diff --git a/poetry.lock b/poetry.lock index 94cc6932..35847aa6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,13 +55,13 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " [[package]] name = "anyio" -version = "3.7.0" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] @@ -71,7 +71,7 @@ sniffio = ">=1.1" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] @@ -88,13 +88,13 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] @@ -102,9 +102,10 @@ argon2-cffi-bindings = "*" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" @@ -303,13 +304,13 @@ files = [ [[package]] name = "catalogue" -version = "2.0.8" +version = "2.0.9" description = "Super lightweight function registries for your library" optional = false python-versions = ">=3.6" files = [ - {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, - {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, + {file = "catalogue-2.0.9-py3-none-any.whl", hash = "sha256:5817ce97de17ace366a15eadd4987ac022b28f262006147549cdb3467265dc4d"}, + {file = "catalogue-2.0.9.tar.gz", hash = "sha256:d204c423ec436f2545341ec8a0e026ae033b3ce5911644f95e94d6b887cf631c"}, ] [package.dependencies] @@ -318,13 +319,13 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -416,97 +417,97 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -601,29 +602,29 @@ toml = ["tomli"] [[package]] name = "debugpy" -version = "1.6.7" +version = "1.6.7.post1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, + {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, + {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, ] [[package]] @@ -650,13 +651,13 @@ files = [ [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.7" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [[package]] @@ -672,13 +673,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -686,13 +687,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -760,13 +761,13 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.31" +version = "3.1.34" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, - {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, + {file = "GitPython-3.1.34-py3-none-any.whl", hash = "sha256:5d3802b98a3bae1c2b8ae0e1ff2e4aa16bcdf02c145da34d092324f599f01395"}, + {file = "GitPython-3.1.34.tar.gz", hash = "sha256:85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"}, ] [package.dependencies] @@ -953,21 +954,21 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1181,22 +1182,22 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes [[package]] name = "jupyter-ydoc" -version = "0.2.4" +version = "0.2.5" description = "Document structures for collaborative editing using Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, - {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, + {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, + {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, ] [package.dependencies] importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] [[package]] name = "jupyterlab" @@ -1256,13 +1257,13 @@ test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-t [[package]] name = "jupyterlab-server" -version = "2.23.0" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -1278,7 +1279,7 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "koalas" @@ -1600,13 +1601,13 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -version = "9.1.18" +version = "9.1.20" description = "Documentation that simply works" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, - {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, + {file = "mkdocs_material-9.1.20-py3-none-any.whl", hash = "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc"}, + {file = "mkdocs_material-9.1.20.tar.gz", hash = "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7"}, ] [package.dependencies] @@ -1831,13 +1832,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.7" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, ] [[package]] @@ -2070,13 +2071,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] @@ -2128,21 +2129,21 @@ files = [ [[package]] name = "platformdirs" -version = "3.8.0" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, - {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.dependencies] -typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" @@ -2183,13 +2184,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.0" +version = "0.17.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, - {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, ] [package.extras] @@ -2197,13 +2198,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -2237,73 +2238,71 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psycopg2-binary" -version = "2.9.6" +version = "2.9.7" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, + {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, ] [[package]] @@ -2328,55 +2327,47 @@ files = [ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] -[[package]] -name = "py4j" -version = "0.10.7" -description = "Enables Python programs to dynamically access arbitrary Java objects" -optional = false -python-versions = "*" -files = [ - {file = "py4j-0.10.7-py2.py3-none-any.whl", hash = "sha256:a950fe7de1bfd247a0a4dddb9118f332d22a89e01e0699135ea8038c15ee1293"}, - {file = "py4j-0.10.7.zip", hash = "sha256:721189616b3a7d28212dfb2e7c6a1dd5147b03105f1fc37ff2432acd0e863fa5"}, -] - [[package]] name = "pyarrow" -version = "0.16.0" +version = "8.0.0" description = "Python library for Apache Arrow" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "pyarrow-0.16.0-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:db6d7ec70beeaea468c9c47241f95e2eecfaa2dbb4a27965bf1f952c12680fe9"}, - {file = "pyarrow-0.16.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:caf50dfcc709c7cfca4f816e9b4442222e9e6d3ec51c2618fb6bde8a73c59be4"}, - {file = "pyarrow-0.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:899d7316ea5610798c42e13ffb1d73323600168ccd6d8f0d58ce9e665b7a341f"}, - {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:94d89482bb5461c55b2ee33eafd44294c7f1244cc9e390ea7855f647957113f7"}, - {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8663ca4ca5c27fcb5c8bfc5c7b7e8780b9d699e47da1cad1b7b170eff98498b5"}, - {file = "pyarrow-0.16.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:5449408037c761a0622d13cc0c21756fcce2ea7346ea9c73e2abf8cdd8385ea2"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a609354433dd31ffc4c8de8637de915391fd6ff781b3d8c5d51d3f4eec6fcf39"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c1214f1689711d6562df70863cbd62d6f2a83e68214bb4c97c489f2f97ddeaf4"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:8a00a8497e2367c4f206bb8b7df01852d1e3f1261107ee77a217af654793ac0e"}, - {file = "pyarrow-0.16.0-cp35-cp35m-win_amd64.whl", hash = "sha256:df8ff1c5de2e454dcab9421d70d0db3985ad4efc40899d947687ca6d36846fc8"}, - {file = "pyarrow-0.16.0-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:7aebec0f1b76e73a6307b5027618c843eadb4dc4f6e1f08ca496a01a7273ac64"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd18bc60cef3e72f8082c46de4cfb0cf9fb294c0ff7a201e2b95924fb5d2d146"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:00abec64636aa506d948926ab5dd37fdfe8c0407b069602ba16c68c19ccb0257"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09e9046e3dc24b5c81d307d150b8c04b127aa9f9b3c6babcf13313f2448dd185"}, - {file = "pyarrow-0.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6c042f192c9a0ba33a927a8d0a1e6bfe3ab29aa48a74fc48040d32b07d65124"}, - {file = "pyarrow-0.16.0-cp37-cp37m-macosx_10_9_intel.whl", hash = "sha256:d746e5f34240199ef8afdd0efb391692b85b1ce3e098febd887efc2128da6570"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5fede6cb5d9fda323098042ece0597f40e5bd78520b87e7b8efdd8f062846ad8"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53d3f3684ca0cc12b64f2446022e2ab4a9b0b0976bba0f47ea53ea16b6af4ece"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:890b9a7d6e2c61968ba93e535fc1cf116e66eea2fcc2d6b2503b44e190f3bc47"}, - {file = "pyarrow-0.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8d212c2c93706fafff39a71bee3d42dfd1ca393fda31ce5e3a05c620e1886a7f"}, - {file = "pyarrow-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcd9347797578b0f65a6fb0cb76f462d5d0d63148f51ac8f9c9b5be9acc3f40e"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ac83d595f9b469bea712ce998270038b08b40794abd7374e4bce2ecf5ee2c1cb"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:fab386e5403cec3f66e1ac1375f3648351f9415f28d7740ee0f813d1fc0a326a"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:5af1cc49225aaf82a3dfbda22e5533d339f540921ea001ba36b0d6d5ad364e2b"}, - {file = "pyarrow-0.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ff6e7b0411e3e163cc6465f1ed6a680f0c78b4ff6a4f507d29eb4ed65860557"}, - {file = "pyarrow-0.16.0.tar.gz", hash = "sha256:bb6bb7ba1b6a1c3c94cc0d0068c96df9498c973ad0ae6ca398164d339b704c97"}, -] - -[package.dependencies] -numpy = ">=1.14" -six = ">=1.0.0" + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, + {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, + {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, + {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, + {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, + {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, +] + +[package.dependencies] +numpy = ">=1.16.6" [[package]] name = "pybtex" @@ -2410,13 +2401,13 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2439,19 +2430,22 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "pymdown-extensions" -version = "10.0.1" +version = "10.2.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, - {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, + {file = "pymdown_extensions-10.2.1-py3-none-any.whl", hash = "sha256:bded105eb8d93f88f2f821f00108cb70cef1269db6a40128c09c5f48bfc60ea4"}, + {file = "pymdown_extensions-10.2.1.tar.gz", hash = "sha256:d0c534b4a5725a4be7ccef25d65a4c97dba58b54ad7c813babf0eb5ba9c81591"}, ] [package.dependencies] markdown = ">=3.2" pyyaml = "*" +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pypandoc" version = "1.7.5" @@ -2498,33 +2492,15 @@ files = [ {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, ] -[[package]] -name = "pyspark" -version = "2.4.8" -description = "Apache Spark Python API" -optional = false -python-versions = "*" -files = [ - {file = "pyspark-2.4.8.tar.gz", hash = "sha256:3a19b71b8dc8dd91ebc943604a05e1ab01bce052456d42937035632d852d78dc"}, -] - -[package.dependencies] -py4j = "0.10.7" - -[package.extras] -ml = ["numpy (>=1.7)"] -mllib = ["numpy (>=1.7)"] -sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] - [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"}, + {file = "pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"}, ] [package.dependencies] @@ -2617,13 +2593,13 @@ files = [ [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -2666,51 +2642,51 @@ files = [ [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] @@ -2729,88 +2705,104 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.1" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] @@ -2818,99 +2810,99 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2023.6.3" +version = "2023.8.8" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, ] [[package]] @@ -3169,6 +3161,26 @@ files = [ {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "traitlets" version = "5.9.0" @@ -3186,35 +3198,52 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typed-ast" -version = "1.5.4" +version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" optional = false python-versions = ">=3.6" files = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, + {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, + {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, + {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, + {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, + {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, + {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, + {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, + {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, + {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, ] [[package]] @@ -3244,13 +3273,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.3" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] @@ -3291,24 +3320,24 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "virtualenv" -version = "20.23.1" +version = "20.24.4" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, - {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, + {file = "virtualenv-20.24.4-py3-none-any.whl", hash = "sha256:29c70bb9b88510f6414ac3e55c8b413a1f96239b6b789ca123437d5e892190cb"}, + {file = "virtualenv-20.24.4.tar.gz", hash = "sha256:772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.12,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} -platformdirs = ">=3.5.1,<4" +platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "watchdog" @@ -3418,94 +3447,94 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [[package]] name = "y-py" -version = "0.5.9" +version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" optional = false python-versions = "*" files = [ - {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, - {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, - {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, - {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, - {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, - {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, - {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, - {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, - {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, - {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, - {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, - {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, - {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, - {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, + {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, + {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, + {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, + {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, + {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, + {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, + {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, + {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, + {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, + {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, + {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, + {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, ] [[package]] name = "ypy-websocket" -version = "0.8.2" +version = "0.8.4" description = "WebSocket connector for Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, - {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, + {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, + {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, ] [package.dependencies] aiofiles = ">=22.1.0,<23" aiosqlite = ">=0.17.0,<1" -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] @@ -3528,4 +3557,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" +content-hash = "8227212a2f61532a4232b077e53c5775c1b8acba5a7bccfdd01e0c9d11a99f2c" diff --git a/tests/test_probes.py b/tests/test_probes.py index ca77f341..aceda443 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -50,10 +50,9 @@ end_date=datetime(2020, 1, 1), test_save=False, module="koalas", - stay_source={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, - provenance_source={"All": ".*"}, - age_range=[18, 64], - drg_source={"M": ".{2}M"}, + stay_sources={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, + age_ranges=[18, 64], + drg_sources={"M": ".{2}M"}, provenance_sources={"All": ".*"}, ), dict( @@ -78,11 +77,11 @@ start_date="2010-01-03", end_date=None, test_save=False, - stay_source={"MCO": "MCO"}, - provenance_source={"All": ".*"}, - age_range=[18], + stay_sources={"MCO": "MCO"}, + provenance_sources={"All": ".*"}, + age_ranges=[18], module="koalas", - drg_source={"All": ".*"}, + drg_sources={"All": ".*"}, ), dict( visit_predictor="per_visit_default", @@ -106,11 +105,11 @@ start_date=datetime(2010, 5, 10), end_date=datetime(2020, 1, 1), test_save=True, - stay_source={"MCO": "MCO"}, - provenance_source={"All": ".*", "urgence": "service d'urgence"}, - age_range=None, + stay_sources={"MCO": "MCO"}, + provenance_sources={"All": ".*", "urgence": "service d'urgence"}, + age_ranges=None, module="pandas", - drg_source={"All": ".*"}, + drg_sources={"All": ".*"}, ), ] @@ -695,9 +694,9 @@ def test_compute_biology_probe(data, params): length_of_stays=params["length_of_stays"], concepts_sets=params["concepts_sets"], concept_codes=params["concept_codes"], - stay_source=params["stay_source"], - provenance_source=params["provenance_source"], - age_range=params["age_range"], + stay_sources=params["stay_sources"], + provenance_sources=params["provenance_sources"], + age_ranges=params["age_ranges"], ) # Care site levels From a7e1f2b91f171f52b08371cf67339375242e362c Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 6 Sep 2023 16:18:00 +0000 Subject: [PATCH 085/127] correcting tests --- .../completeness_predictors/per_visit.py | 1 + .../note/completeness_predictors/per_note.py | 2 +- edsteva/probes/utils/filter_df.py | 8 ++++---- .../visit/completeness_predictors/per_visit.py | 3 +++ probe | Bin 0 -> 431677 bytes tests/test_custom_probe.py | 7 +++++++ tests/test_viz.py | 1 + 7 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 probe diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 412b343f..24ea3c6f 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -249,6 +249,7 @@ def get_uf_visit( "stay_source", "provenance_source", "age_range", + "drg_source", ] ) ) diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 95627da1..0cf88942 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -74,7 +74,7 @@ def compute_completeness_predictor_per_note( stay_types=stay_types, stay_sources=stay_sources, length_of_stays=length_of_stays, - provenance_source=provenance_sources, + provenance_sources=provenance_sources, cost=cost, person=person, age_ranges=age_ranges, diff --git a/edsteva/probes/utils/filter_df.py b/edsteva/probes/utils/filter_df.py index 72b94eea..694d2457 100644 --- a/edsteva/probes/utils/filter_df.py +++ b/edsteva/probes/utils/filter_df.py @@ -222,17 +222,17 @@ def filter_table_by_age(visit_occurrence: pd.DataFrame, age_ranges: List[int]): visit_occurrence["date"] - visit_occurrence["birth_datetime"] ) / (np.timedelta64(timedelta(days=1)) * 356) - visit_occurrence["age_ranges"] = "Not specified" + visit_occurrence["age_range"] = "Not specified" visit_occurrence.loc[ - visit_occurrence.age <= age_ranges[0], "age_ranges" + visit_occurrence.age <= age_ranges[0], "age_range" ] = f"age <= {age_ranges[0]}" for age_min, age_max in zip(age_ranges[:-1], age_ranges[1:]): in_range = (visit_occurrence.age > age_min) & (visit_occurrence.age <= age_max) - visit_occurrence.loc[in_range, "age_ranges"] = f"{age_min} < age <= {age_max}" + visit_occurrence.loc[in_range, "age_range"] = f"{age_min} < age <= {age_max}" visit_occurrence.loc[ - visit_occurrence.age > age_ranges[-1], "age_ranges" + visit_occurrence.age > age_ranges[-1], "age_range" ] = f"age > {age_ranges[-1]}" return visit_occurrence.drop(columns="age") diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 2d9c9f9b..0075b41b 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -227,6 +227,7 @@ def get_uf_visit( "stay_source", "provenance_source", "age_range", + "drg_source", ] ) ) @@ -258,6 +259,7 @@ def get_uc_visit( "stay_source", "provenance_source", "age_range", + "drg_source", ] ) ) @@ -289,6 +291,7 @@ def get_uh_visit( "stay_source", "provenance_source", "age_range", + "drg_source", ] ) ) diff --git a/probe b/probe new file mode 100644 index 0000000000000000000000000000000000000000..7a7dbaec96d33de28c7b6fea4a4d395946a32fab GIT binary patch literal 431677 zcmeHw3z!^LnRZV|APE731SH&*i-SUxWX*C}HysEFj2SW9^jUD2OggEFlgThM0kXmh zY7zpih*Y?(fdC=|3>Q%WAC`5AxDN`7xUjH-fBY2?P&clwiu&XKRad>$(_hW$Q#D;Z z(^LJXp3K|d^_=t8`TEq`wJc7Q|Rbk;uhah7JCZk7kb>{ zl!3v{)g6PY`wEh6N&m8rft9QJy9#ch__mI&l`Hys3WJ5-!oWaBUw>gqch}&`ez&+= zU!lLF)Q^rOg{7UVdIsI%w2rRME=O8H)6P!L=oo*1DTpfjyFRa)sE>{!w{D7@_7 z*V((Ib6{3SPxs=1S%U*Ubgw9g(~7Gr zYh{07*3$mY71G5i3pxioPb|F-=fT8|70cvoq4y>C?%u&de{W~cz^oOWy+T*N^nTiL zJuACDzR;JY+r=qMSM|!7UfCnYo%)0aIZd8^-+%{|X|WeBu2Xso7j%>aab6?iZFS}z zCNxi!)3CyAn=sHm=q@hqUO{GOe}Cs{iQTuOqi^+vWg6QT%=awEb#{Hcuq4v9A2rK6 zJ0-r|;x01&((6)~1f25V*=OwHvp%VJ)rvluGLx2+rnwAc!os86^_O|4q_u5gvE}dF z_V)Hu{wn`UKiYCqMaNI*9dO%PykpQ^>v}!kqm*Y>Y4j^((s!4-;Z6Pif=sG`!TwcU zgVMCKK+fC}-*~m#mRsW<-?G^CTa$DPH_ce2sI=MDWjr zy$*Usu=wU4w{I8x{-jU7@P=T=jTfD}!|u7<&9}X@VVdCVzyI0HJq5QuyKUnEf|Gu7 z@{d{tuQ~q%XU!IT?&5ok#|n1udH3`a1pjpRU2ePJjaR>Z_*sJQIsDao&lNmx&Z3vQ z1t&c5q2&XD3x4$AO&1A1^YL#Sv{rEG#IN0crQjVq@Au+$f=7R8@6KBUKXKQmuenQb z+JZ~>{<`4C7yjwSM+E2p+aq)TUGV9TKK#w61ZQ*}vi*6%+unG`;LikK$rU&MQt-m- z*B|kF!6~!X-S=0)wxhSdJb6Yg_recLl)Fjr*)4Bece~)S6aTR9eS(`8p1bIq zg2%jk&a+zuFZ$JYc79TDm$l!%@>#(f_kVQvZGzhldH2b$3ZC~!>y!T@c>iNpP56u8 zf{$IfcG4cg=kJSC-y*pB$4}hyHo>Wb-#zs0f*<_EoU`90_~PzIZkr=`z&S1kVgD!~g6K6l0^1^1n@ z=_~65x7@t(y;lkT_Z>Sfy+QDj`4eBeRq)Z1RvfTJ@U)*Uzx5k}KVR*<^IL+4Ui!nc z9~XRJ<`1?#E%?TPNA3B7AnTX)%lc*ga{cA{%k`J*FR!0@{mkoUUO)5qU;h5f-+y`k ziubR0|BCmoc>kIApLze8_n-OqBmVt}e?Q{ikNEdr{{5GK|K;-=e13z^Z}9mIK7YmM zulW2GpTFYslYD-X&rkCCXFmVT=b!ofGe5t;&oA)v3;g^7KYzr}AMx`?{QMC=KgiDy z^7DiI{4YQM%g_Jv^S}K3K0m+D&+qf|``mwn`)_dn4ep=A{d2f~4)@RD{#V@piu+%2 z|10ia$NlTLe;xO)zrgQb;PJJNIwr{_Whqo%^?Q|90-*&i&iD ze>?YY=l<>7zn%NHbN_bk-_HHpxqmzNZ|DB)&AWfQJLoRH*ey=#SlVAW&ut%A=PoWz zUc9QiXRy0>K=cDW-CYIuYPW4-+oZOZb?zc}t^9Z9ICIwswmNeUyV!M(X`3+6E{U8) z&gpHrHLi1}=h)iT(l%k?rWtEp=fvWKrAN8zFZ0zqIH$C?x1aJ?`B(bUmXp}^$K_6G z$z|)`_IdtzfZ^!!!|Ox8z&=^w3>6pp`{}};h|4K|$l4wT2L7RJd4W6{BmD~ULT?-g z+7A$U5eIpCU^nG~e=hiEli^1s14$SN=T(0ADA<$Y@Y&2-iLkw)R4M(tZa1y8Akxw#SwY`D4e^kqp$rKt5S;YV+RGEZPBD+;egLuuj4s>u;Dp zAHGWT0{IdJ(U}Y+WS~*!S=@eUKP_uIYPIWpl*vFX4A|x)a-001HzDFph`7+64_*NS zG2$2Ktq|mi8xKDq)>pI>>H|e&y@jL3ystn!P`jD*+K)0Bh{FKp6EIGU=cE0#95+wB z{Lmkbw)Ws}^0V1ZanRQqk32*&;4z@*la|3!sL%Tv$Uyi-Fz|<7`)e6~HZ;ar+C$zj zUinAtfg<$RGU5Z&et~-g;`&7bsUQO*U_j3|$iNY#99JP}jWex0xQKr~&;a3}Ws5${Z;A`zLqFsrl7TuhV480xebTO^mB-d@ zTJ5Bj$JSrk$v`R$B<9 zZ=gV)P@ne=`uQyQ0g;bL21b>Eyx*FhhoP+Op}xjWhV@~{V{1p-wQNXhR3l!aF+dq~ z9AxE2kqp#@0n`)bonDW1qws?sG7#%_D8sQvH06UHsGEta*M6a#_cKD)sN17V21bQ} zyx$7uBie)v)OyGx#{7sQOM$vywPlM&k2F8xfYHpF$V47dLj}Jd&EEm8AzXjxbxfOXVNF_Y0^AN{Z0Kr9-zrDu3qPX42+wH zeq>-+2J*hvG@qachB+*8p`U&c#6cbAReIRtVwgt-B-N|%oM~Ov_XD&X$wLJhXg~%~ zAHcM_Xv=4_>wYBlH^q-M&q(8RKPWdB1A5-rWUvE2AoO}Yf*lz8nO@`#hCr|LXjw-` z?1nt1xJbNqw8*#*uX(YA(M$$XWdQS7W2%jeLNfHfZcXL=%xDLw+Y9x9zqV6uE(XH+ zU>Uad(=x)f-Xud0M0{ku$%mGT7hzmrhYYN69!7v4Fw$-i6WUddaD7zzh<{!=1Y*Q* zc(+g+`sYJc=|!jy)R2Ld-epPK2*GMoAj_ZJB~I#^=eP&)iTaA z^g!rq#kl$42eh`Ew|Z1{(CuisYH*51-L95XY>KIdFrazX@(|ZpFLgX*jkaV-{gDrG zab@_0>vi7O;68C^S1)usp*bJEiuWS$H{}cUN%QK~W5%OBpiZM@lOOaz9Y;AH16kwG zG@hjTcQ+YRI61_tez;zIoh`xCbt+AnNZ8;Z8TbKJSR`*kyK<*U2C6b(n{QQvs~GE*w@Q;VH4y`tU%+|~9qj!tK{Sl8iAoRrX$pFqHaI8jQ zYd@~N*7Y~;_-*|`9{6d5z0nZ;)ct}UsO_oA`FNS?-j8_QpqGIGo*x4-HLAfYu*P%@ zZ!!ijZ-5xSmZ7)dNaIX-)6S>cNiBa~XRa=r+BNB`XER%MJ}sLfZGJYpDKGWeVgU01 zs7GhgYrmwjEw9b4+e_-N<0&^61NE9O$ZNuSvy66=wiAiVC(TeFfAmXZ;?`0g5Bj6~ z0XR9=wY85tz{+f8$!0Hm`md7u>-bTV z^M;m`-ZUPQUT2N#r{gG-f$_jV-1!~X4`WX1kGRpoM(^Kf@ld~ZZn)n2_xL;@TJq)R z4SM)LKW|Ry-_JtyYC6i+=FNWuW-Ct@H2q0cI&HO{p1WR+)*t5yc^`&%WJ z?>j>uw;kUf@#Xo8JQ|bbjs8A~_JGKz<#>Ag{d4pm`G{no{tT4ssIo1SzS7GsrIp9l zQd;e#mB-d!+Q~p|3}C(R@v+F?OQH7>_lx1TJ-B~tTKC|G`>l|-g>jYbNAtuTU1dMf zPPtuehm8DMhTg~W@28c1<#F6~r}ytQHLk}3x!j-1yp+g5eHrlQE9$mfU%tM4Jy|K2 z{c7u-c^yQ1ru^EjWmB9*Dn z(3GEgGEj|yxbsK*p{}&PT3en?`)e8Twd!sCGv!D7NfGSlj?_$e<^Zb-uKh@-?gl>Q6>Y8$N<(6U|M~&<+Is!Ka%>J;zyciq;a|*l$(oz zr_}mklfe%BfY9sTA7KZ=&xAT2e$eYYT82MR+f8}k4@4Xg`lPtsaDOjp9{Q7kS{T5* z*H}x=v4}(#cdS5te?!@pkrVczkz@qvfQ%((yJq zX?~l(ZcqEiwa4{KnqT{mmK?XvZQ~xT{<0mPfw<>wyzpfjPg4DO8LzFMrg7WiXeR?n z7)biQ4u4>hwubt~jYl28AM(&#ab6=nj<4r~c1&^5!!K^$TK&+jEsx0$dY~;2?PQ>y z42-mX5C^PhADKHl4A|cHv|Y<4CerpZwWH@d+69{8v>h_g6bC*0fY75qS`RzWW`|!~ z)cMelr13gW-1xYDw*0l)q9wQziq|7%?8)b)pFjG(Z{ow&AH=~=BkYZa=%?-%^gwM-OZM~I&qKZYk=A&cJ5TaD zY;L~djvl-MANjx^4cH|>17owV{Ntv^${CcW-=Tv_MSvMGVBQ1u=uCR;msGapwb^xhN&R&^<>q3bUhjX%Yr=Z7jCPZ@qvIN-p3pCi zNynG=c+el+59oo~4q4l^3_oHv8HhU{ zb{&`0U&oJ@tocK`T5lSUNsm0hxPI^_l7aEWfUXx)-{blrKB+(AMhhFae;ZnIEhQG* zL3gp!**2+dr?!@L?jm=s{CDO!bJqyAI&%-Z*maI+n=sJsxh--|Z_BN5oijbh*0z?m zNeeg4SnE0`7AJh@D0ls3zIumZ%SCQ`d;2MWm4BrlZSy30{W)%HvE@kDS<5543=}6E zDW`ZHkL)r~+~G*?9ACyGy9{{ec(&`T=aF3oymLIqbuLfyD72=Tjk#)Ppg2*^vb@rYnkutuDM|K$~PVkEO3(a)M`rcIIb-qyCp>)-CwZkK`40z{Q-mH0K zn1SL%ImhyLy@5w|87NNjPO_ZkYj}*D0a@f5oIknplK1Otd1RLXS(ClD>+5)AmjUk_ zOC4X&BfAX9byum7Z*X`t3uhYQ zqp8lY%;x4gyBnLSeoJF*vhypeJ1aQb=bY!4=Qm4pAlqj%I=U>KyEtQsGLUUe98MDW zjDrpAP2ZPs(nbIx6|f3e1*`&AL336CpOh)pKBs?kPJf6|f3e1*`&A0jq#jz$#!BunJfOtO8a6 ztDqUGfKSSlDxH(P874c=GS70U-1$g|M+3`YC<)o!Kb0f%7~pIlI@`$x*$@Uu0!iRo z0jq#jz$#!BunJfOtO8a6tAJI&Dqt0`3dXPs_?O8N`K&@#;TTpSryr*uryr|;Rlq7> z6|f3e1*`&A0jq#jz$#!BunJfOtO8a6tAJI&Dqt0`3RnfK0#*U5fK|XMU=@r`74S)! zQmt{ijm~r<&*ZsOaQpzdM+3`&B(NM<1*`&A0jq#jz$#!BunJfOtO8a6tAJI&Dqt0` z3RnfK0#*U5Alp??oP5&Oul02gcJ{c=P5!areHdvNRK15aGp+cns|vbVR;(^ELG^^6k_bDf)ckO4A42FO6| z49KdV^80CVpWwZFN#Ve*mAwP2dImeaw{Us)K3?9vZ{d+)26$DLZ3a?)uSom7hxuw_ zptvvIyZ`Sc*E?G`FD~>iE37E=4$7PNN%H1>E063lkp87WZIhAFsWZTfuWU0A+zB0v zn{#Y)6d1_%#U)3V^5r#G^wd|-l+O_RmoWyieSN{vk%4S8(BRh~vZ6P54;#LJT*1iz z85q9|@E$Z7$PfdvqGxC{amG@dibpq(IMQ{##3Q>56sLtxY#wo>ob20pWS4>Be#VD3 z<>brR|1yv4GEn{O&vu>Ld5oL^xk_ko{;Hqy zfV}^2;gMYiELVH8y(Qpo9@%AJ$Squ{^?P_^mw`g-&`W!-vhU@QT?VQx?4`@P`y3vb zWuW@mm$&+_^2ja&)i3L2%dd5=b3c#lGEn}#ez?21-UN^t@U=7#xi^t&K4zN}Lp-v}Kw;2b>@0FlZ_BN5oio?Di`>?>mbOVEoLHRDeU!WYGGDiYb4q)A`ze2w zf2AL7ISE{Ue5=39Y%b^Tyqe2R2oyU6xKn_xxUZG$>)dnP*5Y1$oxMvs2WEAx>@Upf z?p;#2urM%dapyq6El%y|EnLuXvZr&ecAdwIlkoat37oj3bFkBmc6hRM_*3g8wX>5m z#hL0%E_oJQ=TPU6;*74&{zAt<_n`c6R`w5e^meW&xZcQ%6H71KS9x7?zE_+%T)+A| zdzX0~Tjb%8&N$Dt7bgu2cJ>dtZMovafx(r1?!rwoyjO)jx2>g=wBThfPV5+5-RBmk zc)efR@3mf>(y^j2*jXCRIc{-M=ip%ffP1l9+_7V6Pv^4I%eQs*^sKyKpkv9ZzMk%` zPU(J6=i)-ofP2}%s>Q`U%cJTq^pv((8*sY&T<2YfT`GxMog!?N|qsr#8)k&5I^>33WcyE{I_%_SaJ$K39_qWI&`R9wU9ZzQ|6%g&Dd zh2DWe_p;uto89GqBP)UWQQY~|(>{9qNhi-gebLD$4Dl#VJ>#^K51hZ?j1Qh3s7;>b zgvA|?pTB6q$scm7y2_jN3GC z|Mc(8&P~hr^nBjt{V2WKYpCP$nVx>{@W;O1tNpwmCBp&UtJ06Rd#}77VH?X2_Ed+2 zKi=uRY7NDA$*a(}R1e-~I_{8HUOn9DY$+SPvbeWY7Wb6ypvZ5Np>g@)UdAKBAMf#A zy*CtR%d4{QFjGpMK_ylXJ<4mwl(Ty1-&KT`uAMsDa&42_TD+?yZ>eA7UEet0bDs28 z;2%`KP?_vJ>r5~1-X~Wly@MU)<-B`|Tii3E?J1mJ=y8ktL<~c&X^MMCt$l^A?#`aU z)ujs_xn{w&jwFg+gY~XjQRwgPlB=DQdk5$K&CsizVFt6mTy_21`s26TE&?Y84wC}h zF+f}#P7dTL0Zt8Y=K!Y#xJ!V$2Kbf$rw6!OfNu?O_W)-ExJQ6{2KcrB_X==kfO`kH zPk{RdxL<(Y#VnXCUEnz{JFhsua9(v@ldG&>%Ku-NF43mTN$qk99ew?UCEZwSHj1>gCZ-rs#yu=|StJnUh?KOOYUmd6CIc=+ife<1ke)?=4F zC-||mkAD59f}6T-Iq-GCBmZ*KmwqSssJpTCO~IwBU;NgN!toz=`|*P5f=AC>@Q*VE zzkA>OH{T&R?V&s894@%=!*@LJKEYY9-FECe!M@+@dfrKbEtgOG-wz8Of7PmY{e$3t z95!(G62ZcweY1N7KXTLwGcOQ)^{L}FULyGJ=k9uXz2L)ro6o#j@XZU}TKuBmmD8tB z|FYnLn|E>V5nO!l`Hw#+_}h~P7d|TZzEfZP)b|9x^Nau5@fpFhE`9Fup9ucBu-8Ga z2o~Sm-=Fl!7v2!;xbdQMcaS-A^KCC}m?k*;?|(LPPrMeEb^+trc84@oTqVDR{@u`@MLb;L%^&yYm*oPu%tCYwi-9w&2pe zzb?4(g@3y75yAQY_Q>3S7kv7o4}bG1!5N*0Y=2(xwm04}_%p#*a>dQR6uj{I^+)_( zaLVj;_x)9{?da_LpFeZcK7#k0clyDH2mUjD>sg3tf!Z(Gh0T>g>YtXV4f=k33q(kJ--Kb|#jwcz(Z zf5z5N2~NN6kw0D`c=LN7zG#Es?8hI<-6Z(zmN%}uU2xfnf7tgv!OaWLUGz=CV_rVz z*{y;X{pveAKPkA&+HYU^tl*9NKf3!i!EJ}U`{Y*z&wHfx$^Q|&|FNqk{6%oV$F5vE zNoxC<-xsI8MR4_xpSb01f>Q^-d+6H*Klq6`XTMAE#odqGHb?M)eQwy}{et)2f9>@r z3eNxFhW$ow*~Nlq{&vZ<9>G_xSp4}_f)^fq?u<_g?mK1ESJnw` zxq0JzuM+(4J9b=pgWx6eC%$&8;G-w4IADw5X+K?l>o){{zS?=`w*(Kp^oM6ZF8ILA zA8dPC@QnkH+VcfL)-UUq^~?I@`pfl~>o3<|UO)5tnb*&}e&+AL{QZ}||MLD7?_cr$ z74Kj1{xk1C^ZqmMKlATL{QD9Ae#E~Y@$bL<`!E0g%jY-v{05)j;PV@N{)*3E@%bx0 zf5qn~`TQiGpXBq;eEylwKlAx#etv{;}LYmixzY|5)z-%>AFa|15x@V4-+#pKFXQ)@@%zj8{e%4eL4N-rzkiV5AIk3! z<@bm3`$PHtzx@7Re*Z7O|Cit2&F}B#_jk*F#RomJh5NU2|90-*&i&iDe>?YY=l<>7 zzn%NHbN_bk-_HHpxqmzNZ|DB)+`pasw{!n??%&S++qr)`_iyL^?cBee`?qudcJANK z{oA>JJNIwr{_Whqo%^?Q|90-*&i&h)cmH;G&|SP?e$M}QvFn`EKCsSR>~yVl7rD+H zXYLxoR%h;EVmhX6!a%#YJByst+j47M=gf7Uv8|xK=4Dvp2mZO>pG}4zkqjhZAe>kE;iF(rio<6!YmwjV;aehp`Qanr2OQpOh&E;(bzm|9s#QV3(A}8v^3s7aI7242*yQ%qO5u0X;CZ=lxgE14DbAU)b6U z?MeF?`0MWLeA*scHsp^TPe(FP3j_IN!KuxAOS5PPXmQWQ^}{*|f2_Y@{(Sf<(F^2D z6hvn-kdT2!oo8|TrTw(5>8RDN^HC-PwJ>0tkH~HEgWiOQHzDFedp>vt48(|EptnMh zCvH6afLLGAPN)wQk@Xgi8uPva@j&fn(rZ7;WFQU$m`}hsF`ke1*K*uE_3}f1G}_vO zzsb*LH^o6;YdrE0$$-azo=;i^OQAmRYaj#R7s0?EdhM@e_}S1HXK4?4!+7N%u?LFK zU(1LOQ2Pb$5s2#-38aDyjDP_>-yj1=kaApwq&3d8@{B9;*x6BM0P_rJ`#sUx!MyLG zf1gBtjn;gD1L7k7`9K4NgO)A&Fuy4-h!6dck4OgU$bf0Sne<7!l2#sDyJ@wPRvue_ zX(t1zFp&4NnC30?c&-TYUO}8*kI^UiX*pbXbv$GQBt*0aL^xykdhyzA5Q$q&q48)y35x=~jJEFHVsr|K#@S63O{+aTl z{lplwhwF(*JnRtz6=WcN2I9_dlb=bSw5Lh)B=tA-2YG-dzqopx2Qn~j9{Q1iVHwE# zTGM=j9vJ4Z#D#wPMGyydm{;jxkBea*6_8Y~!gHo|Ro@TLawHEGWS{{VKz#ty>Y^>5 z&93{A)ZY|8(mW%L)BT{_Tny-WW0S!S{D9Ew^$2!g=x2J7Hy8rF&ZA`=9kCnonBpSw z+R-B8KD_3|5=Ju_NR} z*Lsr-JrMDc^(G%$Dqe(ffgLii!g&}0e!xh(K}={@Il}c(=_CGm#Ko227p~WN zUxWL^pf^Cj z_A=!!dkp^yalqldMy{<_-jVl+k)z3gKL1)y+7}&flauDR`Rn$ye_VT9zohxK|ES6N zcrDq+9WM*L(qbTM=fgCfr24e@9qT-%agTMs*nYMcNIK8p4;(2QvE%c83!#4?Cv7*3 zj~f`YV~Pv)BkWJyZfL)-U2RaZ$q#y<3ZqB{MwNk)&O^ijN43*zY}_(nn=jg~Wz)dZ z_A|8;-VY8O&@Rvvr|pn|ra0)~2ZSE|iReQI|Ao!2+^u3HU)~y0;edExg)v3JmcLee zid|)@F<`)U{>Pw8v6@WU@1*{^6ScdZ4zaCg&-ISP1;T*E}t|*ef-fcjfq=Jc|7Qk?g#WhZHKJw zT81Ann+(J~-*Nr2$r49J1}YgCt$GOC$=B9C@&GHdl_i_K?CHNs>aXKRP0kxyQhL*P zOnRL)uAh#hOa{gS199hfTtAFCsXyXI3md(Eqs2r0+PUF+@89F|fN05=pEu~?|NOi; zrGGyQ(U0FA#_7Dsk2u{9WNk+r?2v7UJQ{VskhfAF9Y>{KdHje&JHGttJimXYJdX$V zTn_OVkCve)l7Zw5Yzyb%@UgHb#o@D=wa9Pw@GaWUv<|=zXv-Tn5Ap#`d38Sc15I(% zlYvSGZ14B5Yebex{qteH`}*iQjyRz2_iC_i>vgRhk9H7eL-<$rqnsb{@YC|}>uGtt ztc=4tTh0%=j~E}YJT9~gtc(MnuoB6@NEpDn0Mt342f~hZ26`au^+sEJuqW*&{B{3z zK5dUHoASqvrym&@83SjO{=F3berL<#`#&=;X`C&uwpX_EjJ1F8*Lk#zepmXJ>koDv zXOk=Q*}Q2d1GO+vp0BlJNk2AjzqFs0bwJ{Sz{nVg`#x{-gWiO;ULg*CzWh>T zJ=T8kw_#TtD)Ukz1NCLVpRcIfa((&w^7Uk;T=uK2cjk2v z?V0jxyOvFHCOzUcn*6n1$3fP9l*vH-82Cl7K0g&8>I<@NS?eJKv93YZ@gtQ@`Je~t z{BiZ#53(K)^g!JnWil`t3~UeT74s8qLI!F*d8Pg z2I9^i?T5P3`f6=?Htnxv#Mi2~_0NdkTR(}?z1xe}9A>2tO0*c=$oD^Jp3VKy5eWfjq&-{K z+S7TpjB!B^guYgcn-6|KTf5s0b!Ll$UALoU_|+SAyIQVy`^}eM-*?q=Qbu$2`D;$Tsxzpxx;6q-Y0zwtOag-1y4&qW#hN;cwEL?Ao7l zH3rP{uv%2(+Dzj~s!uvXQ+`_>!~t#oN$vH@o3tPF9~%brb&i&k_DaXw@Z+^-_v$2o0v%3&(w~d?`Rijiqm$;KvNv_@B>1R{%AeyK${(YaZ%?(Ka$4l zJaOaW`q}c=YLD9w`ZXp4w)5YZy^ek!($>#f$60H5_Q?N6BuRAaz2539w*vDGVYoVMwcWd`uP3$Wf}MLR&W z=gWAG3EDDhe^{Ug`ugPcg7z!(pp_^l^@Bg!iDpcuNty@k>sGX0%kYOD2)#ya*RuA9 z3_l;E^8j}351H7A3?#3^c%wjGppG)>wO>-%me*$2?Ira`JmP@R6UQ3^cwYmKRsU`6 zC$lG?mwx`}`@V?}TYnG-KaH?A8ls=NU(f@!JuTVKZ$A(9?nheVY3@A9>#(``iaUDn z3XB^^KQiDkfcug_u%cz?Z8*|6Q{J@m>2}h}pS1o=?V9wu-*IJ~Ps^q}Hb0x)l$ZK! zF@Sjw)T1-$wO>-%me*$2?Ircs@syj3fqK3FA+HJR%`)0e+K!HElzKwHG$tKi+T%fg zbU&a6YCB|Y*E0Nw*<>K@e2nXtO_n$+GEm9DXuVIO9bJFWSN6&*!5?VywApoBQhyyk zTC(O3?P|SgJSIKz0OR_>pGXGA69c+lOnr~*hxnxah#M_z-2QE7$+eVNa0lJR&Z@QU zBG;MY%v~ec>dZatV%IsQZNfmiXI$i*-j-YAI%lr)jBPD#lNN58vDS4ywf-FOUCSfW z46Ji_WSN1>93EL_V7ThnA`nCCb3YnsNILD{a>=;#`Y{rdMN%0RX? z^=GuPT1fe9j)N7wvG}ilZ&E(P4Zot-pV7u@q1n#wjSi0tGw^{={?XsSl`n(`l0Xtz z4y*!JL96|f3e1*`&A z0jq#jz$#!BunJfOtO8a6tAJI&Dqs~fXBF^CnNsa@`ZwqF=XvLOFTDZqVR4TJmIFy( zIj{;?1*`&A0jq#jz$#!BunJfOtO8a6tAJI&Dqt0`3RnfK0#*U5fK|XMU=^?mnxP8# zq)e&OIoX?GvhytSESJiikA!$MupEYxz&&KM%>ZZn(AiEl$c8XL5=a8y3RnfK0#*U5 zfK|XMU=^?mSOu&CRspMkRWOECz`snE$Y&L@3dgVtIsG{OIQ>`!tO8a6tAJI&Dqt0` z3RnfK0#*U5fK|XMU=^?mSOu&CRspMkRlq7>6|f3e1*`&A0jpqis(??*lxmIBZFHs^ zc_z=Lg5w9sJsMaJB!T6?Dqt0`3RnfK0#*U5fK|XMU=^?mSOu&CRspMkRlq7>6|f3e z1=+3w=cdL#Hk`A_KM9T8)k13{_pa2pO%9JNGjOxRgA9-XGC&4WU_e&%6tYz0xW(a- zWd^c*b-}T1s;K3(-y4{3>>0S#;gMkm>ae1Z{hVbFhBA=ls|$|pmWIE_HV$s5HZ+I4 z%FH$cL*J`Yc+C}^zmt%GQDuNvA!L9Ij9&&C{Q5#x^ak%?!}l+R>#9**QP^KHKnBVT zWcUs&@2@u>1G1tw+l>B_!z0TK+~)AeG6P?Bcx0J@+Z`S?Fd!>>4bh_#dxyg#%M5IG zcx0J@I~^WbX5cP|M*}e+D|*_!`HI6M%M5IBcx0J@yB!``X5b!&M}`@Y75!cwnP%WV zhewtf_^QJr%M9G_@W?U)UvpADWJOOkAG6iWz}FofS!UoH4v#D|@PNZ3%M3i|H1r`W zdPDbb9Q5uXhew7PC=9xboqt*DE^^no=eVuT_nap$7WjelwDVm1Do-z}7d_Q;?au#c z%Q@Q?Zkplzw5_FNE0i2wc3yFQ;k@d+cCqXHQvUz?vVm2Lixc}g2OYOKsjq+K;)1(s H@vQ$3iwUAE literal 0 HcmV?d00001 diff --git a/tests/test_custom_probe.py b/tests/test_custom_probe.py index a12695cd..c257e8b7 100644 --- a/tests/test_custom_probe.py +++ b/tests/test_custom_probe.py @@ -46,6 +46,7 @@ def __init__( "length_of_stay", "provenance_source", "age_range", + "drg_source", ] super().__init__( completeness_predictor=completeness_predictor, @@ -69,6 +70,8 @@ def compute_process( length_of_stays: List[float] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, age_ranges: List[int] = None, + condition_types: Union[str, Dict[str, str]] = None, + drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, **kwargs, ): if not care_site_levels and "care_site_level" in self._index: @@ -85,6 +88,8 @@ def compute_process( self._index.remove("stay_source") if not length_of_stays and "length_of_stay" in self._index: self._index.remove("length_of_stay") + if condition_types is None and "condition_type" in self._index: + self._index.remove("condition_type") if not provenance_sources and "provenance_source" in self._index: self._index.remove("provenance_source") if not age_ranges and "age_range" in self._index: @@ -105,6 +110,8 @@ def compute_process( length_of_stays=length_of_stays, provenance_sources=provenance_sources, stay_sources=stay_sources, + drg_sources=drg_sources, + condition_types=condition_types, age_ranges=age_ranges, **kwargs, ) diff --git a/tests/test_viz.py b/tests/test_viz.py index cd83d30e..7480e347 100644 --- a/tests/test_viz.py +++ b/tests/test_viz.py @@ -199,6 +199,7 @@ def test_viz_probe(data, Model, Probe, tmp_dir): stay_types={"HC": "hospitalisés", "Urg": "urgences"}, care_site_ids=["1", "2"], care_site_short_names=["Hôpital-1", "Hôpital-2"], + drg_sources={"All": ".*"}, concepts_sets=None, note_types=None, length_of_stays=None, From 6ab6fc9af948072e01a98dde9cdc2f2dd7452b19 Mon Sep 17 00:00:00 2001 From: Vittoz Simon Date: Wed, 6 Sep 2023 16:29:35 +0000 Subject: [PATCH 086/127] remove .lock --- poetry.lock | 3560 --------------------------------------------------- 1 file changed, 3560 deletions(-) delete mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 35847aa6..00000000 --- a/poetry.lock +++ /dev/null @@ -1,3560 +0,0 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "22.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, - {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, -] - -[[package]] -name = "aiosqlite" -version = "0.19.0" -description = "asyncio bridge to the standard sqlite3 module" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, - {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] -docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] - -[[package]] -name = "altair" -version = "5.0.1" -description = "Vega-Altair: A declarative statistical visualization library for Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, - {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -jinja2 = "*" -jsonschema = ">=3.0" -numpy = "*" -pandas = ">=0.18" -toolz = "*" -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] -doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] - -[[package]] -name = "anyio" -version = "3.7.1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] - -[[package]] -name = "argon2-cffi" -version = "23.1.0" -description = "Argon2 for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, - {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["argon2-cffi[tests,typing]", "tox (>4)"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] -tests = ["hypothesis", "pytest"] -typing = ["mypy"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "babel" -version = "2.12.1" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, -] - -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - -[[package]] -name = "beautifulsoup4" -version = "4.12.2" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "23.3.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bleach" -version = "6.0.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] - -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -optional = false -python-versions = "*" -files = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] - -[[package]] -name = "catalogue" -version = "2.0.9" -description = "Super lightweight function registries for your library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "catalogue-2.0.9-py3-none-any.whl", hash = "sha256:5817ce97de17ace366a15eadd4987ac022b28f262006147549cdb3467265dc4d"}, - {file = "catalogue-2.0.9.tar.gz", hash = "sha256:d204c423ec436f2545341ec8a0e026ae033b3ce5911644f95e94d6b887cf631c"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cfgv" -version = "3.3.1" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.2.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.2.7" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "debugpy" -version = "1.6.7.post1" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, - {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, - {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, -] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "distlib" -version = "0.3.7" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, -] - -[[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -optional = false -python-versions = ">=3.6" -files = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastjsonschema" -version = "2.18.0" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - -[[package]] -name = "filelock" -version = "3.12.2" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, -] - -[package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - -[package.dependencies] -cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} - -[[package]] -name = "ghp-import" -version = "2.1.0" -description = "Copy your docs directly to the gh-pages branch." -optional = false -python-versions = "*" -files = [ - {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, - {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, -] - -[package.dependencies] -python-dateutil = ">=2.8.1" - -[package.extras] -dev = ["flake8", "markdown", "twine", "wheel"] - -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.34" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.34-py3-none-any.whl", hash = "sha256:5d3802b98a3bae1c2b8ae0e1ff2e4aa16bcdf02c145da34d092324f599f01395"}, - {file = "GitPython-3.1.34.tar.gz", hash = "sha256:85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} - -[[package]] -name = "griffe" -version = "0.30.1" -description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -optional = false -python-versions = ">=3.7" -files = [ - {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, - {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, -] - -[package.dependencies] -cached-property = {version = "*", markers = "python_version < \"3.8\""} -colorama = ">=0.4" - -[[package]] -name = "identify" -version = "2.5.24" -description = "File identification library for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.7.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, - {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "5.12.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "ipykernel" -version = "6.16.2" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, - {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -debugpy = ">=1.0" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=17" -tornado = ">=6.1" -traitlets = ">=5.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] - -[[package]] -name = "ipython-genutils" -version = "0.2.0" -description = "Vestigial utilities from IPython" -optional = false -python-versions = "*" -files = [ - {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, - {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, -] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - -[[package]] -name = "jedi" -version = "0.19.0" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, -] - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jinja2" -version = "3.0.3" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "json5" -version = "0.9.14" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = "*" -files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, -] - -[package.extras] -dev = ["hypothesis"] - -[[package]] -name = "jsonpointer" -version = "2.4" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, -] - -[[package]] -name = "jsonschema" -version = "4.17.3" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] - -[package.dependencies] -attrs = ">=17.4.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} -uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jupyter-client" -version = "7.4.9" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, - {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, -] - -[package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = "*" - -[package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-core" -version = "4.12.0" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, - {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, -] - -[package.dependencies] -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = "*" - -[package.extras] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.6.3" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, -] - -[package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] - -[[package]] -name = "jupyter-server" -version = "1.24.0" -description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, - {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, -] - -[package.dependencies] -anyio = ">=3.1.0,<4" -argon2-cffi = "*" -jinja2 = "*" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbconvert = ">=6.4.4" -nbformat = ">=5.2.0" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=17" -Send2Trash = "*" -terminado = ">=0.8.3" -tornado = ">=6.1.0" -traitlets = ">=5.1" -websocket-client = "*" - -[package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] - -[[package]] -name = "jupyter-server-fileid" -version = "0.9.0" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, - {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, -] - -[package.dependencies] -jupyter-events = ">=0.5.0" -jupyter-server = ">=1.15,<3" - -[package.extras] -cli = ["click"] -test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] - -[[package]] -name = "jupyter-server-ydoc" -version = "0.8.0" -description = "A Jupyter Server Extension Providing Y Documents." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, - {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, -] - -[package.dependencies] -jupyter-server-fileid = ">=0.6.0,<1" -jupyter-ydoc = ">=0.2.0,<0.4.0" -ypy-websocket = ">=0.8.2,<0.9.0" - -[package.extras] -test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] - -[[package]] -name = "jupyter-ydoc" -version = "0.2.5" -description = "Document structures for collaborative editing using Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, - {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.6.0,<0.7.0" - -[package.extras] -dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] - -[[package]] -name = "jupyterlab" -version = "3.6.5" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, - {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, -] - -[package.dependencies] -ipython = "*" -jinja2 = ">=2.1" -jupyter-core = "*" -jupyter-server = ">=1.16.0,<3" -jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.4,<0.3.0" -jupyterlab-server = ">=2.19,<3.0" -nbclassic = "*" -notebook = "<7" -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} -tornado = ">=6.1.0" - -[package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] - -[[package]] -name = "jupyterlab-pygments" -version = "0.2.2" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, -] - -[[package]] -name = "jupyterlab-rise" -version = "0.2.0" -description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_rise-0.2.0-py3-none-any.whl", hash = "sha256:0c320e090cd5dad7346ab3f80975bcd0c44b98b5add0434435ea737c92258c16"}, - {file = "jupyterlab_rise-0.2.0.tar.gz", hash = "sha256:4300b3a5a4e2e7f7bd7e43ddfe8eb4ae4ccc6c0aeb64bae38ab82db93c243ede"}, -] - -[package.dependencies] -jupyterlab = ">=3.0.0,<4" - -[package.extras] -test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync"] - -[[package]] -name = "jupyterlab-server" -version = "2.24.0" -description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, - {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, -] - -[package.dependencies] -babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.17.3" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.28" - -[package.extras] -docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] - -[[package]] -name = "koalas" -version = "1.8.2" -description = "Koalas: pandas API on Apache Spark" -optional = false -python-versions = ">=3.5,<3.10" -files = [ - {file = "koalas-1.8.2-py3-none-any.whl", hash = "sha256:ebf00963ac604ee8763ab53ebb028bea3c7732a20cb10f4e52c9ae6a008a749f"}, - {file = "koalas-1.8.2.tar.gz", hash = "sha256:cd072f1a9ae97e87e85e53a1c8a3097777c76f45504e79782d0acff5282fe586"}, -] - -[package.dependencies] -numpy = ">=1.14" -pandas = ">=0.23.2" -pyarrow = ">=0.10" - -[package.extras] -matplotlib = ["matplotlib (>=3.0.0,<3.3.0)"] -mlflow = ["mlflow (>=1.0)"] -plotly = ["plotly (>=4.8)"] -spark = ["pyspark (>=2.4.0)"] - -[[package]] -name = "latexcodec" -version = "2.0.1" -description = "A lexer and codec to work with LaTeX code in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, - {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, -] - -[package.dependencies] -six = ">=1.4.1" - -[[package]] -name = "loguru" -version = "0.7.0" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = ">=3.5" -files = [ - {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, - {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] - -[[package]] -name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, - {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markupsafe" -version = "2.1.3" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mergedeep" -version = "1.3.4" -description = "A deep merge function for 🐍." -optional = false -python-versions = ">=3.6" -files = [ - {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, - {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, -] - -[[package]] -name = "mike" -version = "1.1.2" -description = "Manage multiple versions of your MkDocs-powered documentation" -optional = false -python-versions = "*" -files = [ - {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, - {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, -] - -[package.dependencies] -jinja2 = "*" -mkdocs = ">=1.0" -pyyaml = ">=5.1" -verspec = "*" - -[package.extras] -dev = ["coverage", "flake8 (>=3.0)", "shtab"] -test = ["coverage", "flake8 (>=3.0)", "shtab"] - -[[package]] -name = "mistune" -version = "3.0.1" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, -] - -[[package]] -name = "mkdocs" -version = "1.4.3" -description = "Project documentation with Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, - {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} -ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -jinja2 = ">=2.11.1" -markdown = ">=3.2.1,<3.4" -mergedeep = ">=1.3.4" -packaging = ">=20.5" -pyyaml = ">=5.1" -pyyaml-env-tag = ">=0.1" -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} -watchdog = ">=2.0" - -[package.extras] -i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] - -[[package]] -name = "mkdocs-autorefs" -version = "0.4.1" -description = "Automatically link across pages in MkDocs." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, - {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, -] - -[package.dependencies] -Markdown = ">=3.3" -mkdocs = ">=1.1" - -[[package]] -name = "mkdocs-bibtex" -version = "2.11.0" -description = "An MkDocs plugin that enables managing citations with BibTex" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, -] - -[package.dependencies] -mkdocs = ">=1" -pybtex = ">=0.22" -pypandoc = ">=1.5" -requests = ">=2.8.1" -validators = ">=0.19.0" - -[[package]] -name = "mkdocs-charts-plugin" -version = "0.0.9" -description = "MkDocs plugin to add charts from data" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-charts-plugin-0.0.9.tar.gz", hash = "sha256:ffe6852b57e8c567bed36e3b476e8c447af5f74d89d4a9b182d8807088bd6b0c"}, - {file = "mkdocs_charts_plugin-0.0.9-py3-none-any.whl", hash = "sha256:9155f8c9b257dcb6cbc945d4932c8bb65f72cce6f6abcfaac7e32e1bca02e05b"}, -] - -[package.dependencies] -mkdocs = ">=1.1" -pymdown-extensions = ">=9.2" - -[[package]] -name = "mkdocs-gen-files" -version = "0.3.5" -description = "MkDocs plugin to programmatically generate documentation pages during the build" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "mkdocs-gen-files-0.3.5.tar.gz", hash = "sha256:d90d9e1676531a0bb96b1287dc28aa41162986de4dc3c00400214724761ff6ef"}, - {file = "mkdocs_gen_files-0.3.5-py3-none-any.whl", hash = "sha256:69562fddc662482e8f54a00a8b4ede5166ad5384ae4dbb0469f1f338ef3285ca"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3,<2.0.0" - -[[package]] -name = "mkdocs-img2fig-plugin" -version = "0.9.3" -description = "A MkDocs plugin that converts markdown encoded images into
elements." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mkdocs-img2fig-plugin-0.9.3.tar.gz", hash = "sha256:61399d71bb85525d74b1b9435dc6cea747c1af4eff1eb766b98b5605bb78fe4f"}, -] - -[package.dependencies] -mkdocs = "*" - -[[package]] -name = "mkdocs-literate-nav" -version = "0.4.1" -description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "mkdocs-literate-nav-0.4.1.tar.gz", hash = "sha256:9efe26b662f2f901cae5807bfd51446d30ea7e033c2bc43a15d6282c7dfac1ab"}, - {file = "mkdocs_literate_nav-0.4.1-py3-none-any.whl", hash = "sha256:a4b761792ba21defbe2dfd5e0de6ba451639e1ca0f0661c37eda83cc6261e4f9"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3,<2.0.0" - -[[package]] -name = "mkdocs-markdown-filter" -version = "0.1.1" -description = "A MkDocs plugin to add a markdown filter to jinja templates." -optional = false -python-versions = ">=2.7" -files = [ - {file = "mkdocs-markdown-filter-0.1.1.tar.gz", hash = "sha256:f8c0688cda5bb956ec9c68dfe779ff50454c13dc704f62bae264e9e45ab8f878"}, - {file = "mkdocs_markdown_filter-0.1.1-py2-none-any.whl", hash = "sha256:e9991c40beb89a9fd160d92ab4a15863761dc31706c0b151adf62aa863676e2e"}, -] - -[package.dependencies] -mkdocs = ">=1.0.4" - -[[package]] -name = "mkdocs-material" -version = "9.1.20" -description = "Documentation that simply works" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_material-9.1.20-py3-none-any.whl", hash = "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc"}, - {file = "mkdocs_material-9.1.20.tar.gz", hash = "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7"}, -] - -[package.dependencies] -colorama = ">=0.4" -jinja2 = ">=3.0" -markdown = ">=3.2" -mkdocs = ">=1.4.2" -mkdocs-material-extensions = ">=1.1" -pygments = ">=2.14" -pymdown-extensions = ">=9.9.1" -regex = ">=2022.4.24" -requests = ">=2.26" - -[[package]] -name = "mkdocs-material-extensions" -version = "1.1.1" -description = "Extension pack for Python Markdown and MkDocs Material." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, - {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, -] - -[[package]] -name = "mkdocs-section-index" -version = "0.3.4" -description = "MkDocs plugin to allow clickable sections that lead to an index page" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "mkdocs-section-index-0.3.4.tar.gz", hash = "sha256:050151bfe7c0e374f197335e0ecb19c45b53dbafc0f817aa203f0cc24bcf7d10"}, - {file = "mkdocs_section_index-0.3.4-py3-none-any.whl", hash = "sha256:214f7a6df9d35a5772e9577f3899ff3edd90044064589e6dd4d84615b72a8024"}, -] - -[package.dependencies] -mkdocs = ">=1.1,<2.0" - -[[package]] -name = "mkdocstrings" -version = "0.19.0" -description = "Automatic documentation from sources, for MkDocs." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, - {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, -] - -[package.dependencies] -Jinja2 = ">=2.11.1" -Markdown = ">=3.3" -MarkupSafe = ">=1.1" -mkdocs = ">=1.2" -mkdocs-autorefs = ">=0.3.1" -pymdown-extensions = ">=6.3" - -[package.extras] -crystal = ["mkdocstrings-crystal (>=0.3.4)"] -python = ["mkdocstrings-python (>=0.5.2)"] -python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] - -[[package]] -name = "mkdocstrings-python" -version = "0.8.2" -description = "A Python handler for mkdocstrings." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocstrings-python-0.8.2.tar.gz", hash = "sha256:b22528b7a7a0589d007eced019d97ad14de4eba4b2b9ba6a013bb66edc74ab43"}, - {file = "mkdocstrings_python-0.8.2-py3-none-any.whl", hash = "sha256:213d9592e66e084a9bd2fa4956d6294a3487c6dc9cc45164058d6317249b7b6e"}, -] - -[package.dependencies] -griffe = ">=0.24" -mkdocstrings = ">=0.19" - -[[package]] -name = "mknotebooks" -version = "0.7.1" -description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." -optional = false -python-versions = "*" -files = [ - {file = "mknotebooks-0.7.1-py3-none-any.whl", hash = "sha256:e2fa000b706683fc56b93adada7190a0da22ad85c4f1bfd5c4468cc3552b78e5"}, -] - -[package.dependencies] -gitpython = "*" -jupyter-client = "*" -markdown = ">=3.3.3" -mkdocs = ">=1.1" -nbconvert = ">=6.0.0" - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nbclassic" -version = "1.0.0" -description = "Jupyter Notebook as a Jupyter Server extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, - {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.1" -jupyter-server = ">=1.8" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -notebook-shim = ">=0.2.3" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] - -[[package]] -name = "nbclient" -version = "0.7.4" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, - {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.3" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.6.0" -description = "Converting Jupyter Notebooks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, - {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -bleach = "!=5.0.0" -defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0" -jupyter-core = ">=4.7" -jupyterlab-pygments = "*" -markupsafe = ">=2.0" -mistune = ">=2.0.3,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -tinycss2 = "*" -traitlets = ">=5.1" - -[package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] - -[[package]] -name = "nbformat" -version = "5.8.0" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, - {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, -] - -[package.dependencies] -fastjsonschema = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} -jsonschema = ">=2.6" -jupyter-core = "*" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "nest-asyncio" -version = "1.5.7" -description = "Patch asyncio to allow nested event loops" -optional = false -python-versions = ">=3.5" -files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "notebook" -version = "6.5.4" -description = "A web-based notebook environment for interactive computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbclassic = ">=0.4.7" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] - -[[package]] -name = "notebook-shim" -version = "0.2.3" -description = "A shim layer for notebook traits and config" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, -] - -[package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] - -[[package]] -name = "numpy" -version = "1.19.5" -description = "NumPy is the fundamental package for array computing with Python." -optional = false -python-versions = ">=3.6" -files = [ - {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, - {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, - {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, - {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, - {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, - {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, - {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, - {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, - {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, - {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, - {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, - {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, - {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, - {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, -] - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pandas" -version = "1.3.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, - {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, - {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, - {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, - {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, - {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, - {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, - {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, - {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, - {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, - {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, -] - -[package.dependencies] -numpy = ">=1.17.3" -python-dateutil = ">=2.7.3" -pytz = ">=2017.3" - -[package.extras] -test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] - -[[package]] -name = "pandas" -version = "1.3.5" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, - {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, - {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, - {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, - {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, - {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, - {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, - {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, - {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, - {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, - {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, - {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, - {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, - {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, - {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, - {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, - {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, -] -python-dateutil = ">=2.7.3" -pytz = ">=2017.3" - -[package.extras] -test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] - -[[package]] -name = "pandocfilters" -version = "1.5.0" -description = "Utilities for writing pandoc filters in python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, -] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pgpasslib" -version = "1.1.0" -description = "Library for getting passwords from PostgreSQL password files" -optional = false -python-versions = "*" -files = [ - {file = "pgpasslib-1.1.0-py2.py3-none-any.whl", hash = "sha256:290084d524d07b8414d3457545c14ba7761cdcdc86350e9c9efbcb58210b77fc"}, - {file = "pgpasslib-1.1.0.tar.gz", hash = "sha256:f523050cb466f43526b2f4877bf2b1a1f09dfd7c7310e1e836c773f48bc10d27"}, -] - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.2.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "2.21.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "prometheus-client" -version = "0.17.1" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.6" -files = [ - {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, - {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.39" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "5.9.5" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "psycopg2-binary" -version = "2.9.7" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - -[[package]] -name = "pyarrow" -version = "8.0.0" -description = "Python library for Apache Arrow" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, - {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, - {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, - {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, - {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, - {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, - {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, - {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, -] - -[package.dependencies] -numpy = ">=1.16.6" - -[[package]] -name = "pybtex" -version = "0.24.0" -description = "A BibTeX-compatible bibliography processor in Python" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" -files = [ - {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, - {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, -] - -[package.dependencies] -latexcodec = ">=1.0.4" -PyYAML = ">=3.01" -six = "*" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pylic" -version = "3.5.0" -description = "A Python license checker" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "pylic-3.5.0-py3-none-any.whl", hash = "sha256:f4ca7f9d1fe2c5be7601ba2b8388294aad323161d2c62253ea0d53b9ac9b42f4"}, - {file = "pylic-3.5.0.tar.gz", hash = "sha256:78a11f86425ec03d1b2a806b5359bf92ff1239e710a1b302f89aa05c0906a535"}, -] - -[package.dependencies] -importlib-metadata = ">=6.0.0,<7.0.0" -toml = ">=0.10.2,<0.11.0" - -[[package]] -name = "pymdown-extensions" -version = "10.2.1" -description = "Extension pack for Python Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pymdown_extensions-10.2.1-py3-none-any.whl", hash = "sha256:bded105eb8d93f88f2f821f00108cb70cef1269db6a40128c09c5f48bfc60ea4"}, - {file = "pymdown_extensions-10.2.1.tar.gz", hash = "sha256:d0c534b4a5725a4be7ccef25d65a4c97dba58b54ad7c813babf0eb5ba9c81591"}, -] - -[package.dependencies] -markdown = ">=3.2" -pyyaml = "*" - -[package.extras] -extra = ["pygments (>=2.12)"] - -[[package]] -name = "pypandoc" -version = "1.7.5" -description = "Thin wrapper for pandoc." -optional = false -python-versions = "^2.7 || ^3.6" -files = [ - {file = "pypandoc-1.7.5.tar.gz", hash = "sha256:802c26aae17b64136c6d006949d8ce183a7d4d9fbd4f2d051e66f4fb9f45ca50"}, -] - -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - -[[package]] -name = "pytest" -version = "7.4.1" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"}, - {file = "pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "3.0.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-html" -version = "3.2.0" -description = "pytest plugin for generating HTML reports" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, - {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, -] - -[package.dependencies] -py = ">=1.8.2" -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "3.0.0" -description = "pytest plugin for test session metadata" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, - {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, -] - -[[package]] -name = "pytz" -version = "2023.3.post1" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, -] - -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pywinpty" -version = "2.0.10" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "pyyaml-env-tag" -version = "0.1" -description = "A custom YAML tag for referencing environment variables in YAML files. " -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, -] - -[package.dependencies] -pyyaml = "*" - -[[package]] -name = "pyzmq" -version = "25.1.1" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, - {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, - {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, - {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, - {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, - {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, - {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, - {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, - {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, - {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, - {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, - {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, -] - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "regex" -version = "2023.8.8" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.6" -files = [ - {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, - {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, - {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, - {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, - {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, - {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, - {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, - {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, - {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, - {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, - {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, - {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, - {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, - {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, - {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, - {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, - {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] - -[[package]] -name = "ruff" -version = "0.0.275" -description = "An extremely fast Python linter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.0.275-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5e6554a072e7ce81eb6f0bec1cebd3dcb0e358652c0f4900d7d630d61691e914"}, - {file = "ruff-0.0.275-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1cc599022fe5ffb143a965b8d659eb64161ab8ab4433d208777eab018a1aab67"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5206fc1cd8c1c1deadd2e6360c0dbcd690f1c845da588ca9d32e4a764a402c60"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c4e6468da26f77b90cae35319d310999f471a8c352998e9b39937a23750149e"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbdea02942131dbc15dd45f431d152224f15e1dd1859fcd0c0487b658f60f1a"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22efd9f41af27ef8fb9779462c46c35c89134d33e326c889971e10b2eaf50c63"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c09662112cfa22d7467a19252a546291fd0eae4f423e52b75a7a2000a1894db"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80043726662144876a381efaab88841c88e8df8baa69559f96b22d4fa216bef1"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5859ee543b01b7eb67835dfd505faa8bb7cc1550f0295c92c1401b45b42be399"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8ace4d40a57b5ea3c16555f25a6b16bc5d8b2779ae1912ce2633543d4e9b1da"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8347fc16aa185aae275906c4ac5b770e00c896b6a0acd5ba521f158801911998"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ec43658c64bfda44fd84bbea9da8c7a3b34f65448192d1c4dd63e9f4e7abfdd4"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:508b13f7ca37274cceaba4fb3ea5da6ca192356323d92acf39462337c33ad14e"}, - {file = "ruff-0.0.275-py3-none-win32.whl", hash = "sha256:6afb1c4422f24f361e877937e2a44b3f8176774a476f5e33845ebfe887dd5ec2"}, - {file = "ruff-0.0.275-py3-none-win_amd64.whl", hash = "sha256:d9b264d78621bf7b698b6755d4913ab52c19bd28bee1a16001f954d64c1a1220"}, - {file = "ruff-0.0.275-py3-none-win_arm64.whl", hash = "sha256:a19ce3bea71023eee5f0f089dde4a4272d088d5ac0b675867e074983238ccc65"}, - {file = "ruff-0.0.275.tar.gz", hash = "sha256:a63a0b645da699ae5c758fce19188e901b3033ec54d862d93fcd042addf7f38d"}, -] - -[[package]] -name = "send2trash" -version = "1.8.2" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] - -[[package]] -name = "setuptools" -version = "68.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.6" -files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "soupsieve" -version = "2.4.1" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, -] - -[[package]] -name = "terminado" -version = "0.17.1" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.7" -files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] - -[[package]] -name = "termynal" -version = "0.2.0" -description = "" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "termynal-0.2.0-py3-none-any.whl", hash = "sha256:1d8f73c9c21414253e812f1684431cf7eda5d9f4539aa7479e055b5cac33873f"}, - {file = "termynal-0.2.0.tar.gz", hash = "sha256:b83642fff7a5b93bb08aa3655754e0410f124f2e75cd34ce1b161a90fc621f8e"}, -] - -[package.dependencies] -markdown = "*" - -[package.extras] -mkdocs = ["mkdocs"] - -[[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "toolz" -version = "0.12.0" -description = "List processing tools and functional utilities" -optional = false -python-versions = ">=3.5" -files = [ - {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, - {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, -] - -[[package]] -name = "tornado" -version = "6.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.7" -files = [ - {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, - {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, - {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, - {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, - {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, -] - -[[package]] -name = "tqdm" -version = "4.66.1" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.7" -files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] - -[[package]] -name = "typed-ast" -version = "1.5.5" -description = "a fork of Python 2 and 3 ast modules with type comment support" -optional = false -python-versions = ">=3.6" -files = [ - {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, - {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, - {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, - {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, - {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, - {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, - {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, - {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, - {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, - {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, - {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, -] - -[[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - -[[package]] -name = "urllib3" -version = "2.0.4" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "validators" -version = "0.20.0" -description = "Python Data Validation for Humans™." -optional = false -python-versions = ">=3.4" -files = [ - {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, -] - -[package.dependencies] -decorator = ">=3.4.0" - -[package.extras] -test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] - -[[package]] -name = "verspec" -version = "0.1.0" -description = "Flexible version handling" -optional = false -python-versions = "*" -files = [ - {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, - {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, -] - -[package.extras] -test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] - -[[package]] -name = "virtualenv" -version = "20.24.4" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.24.4-py3-none-any.whl", hash = "sha256:29c70bb9b88510f6414ac3e55c8b413a1f96239b6b789ca123437d5e892190cb"}, - {file = "virtualenv-20.24.4.tar.gz", hash = "sha256:772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} -platformdirs = ">=3.9.1,<4" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "watchdog" -version = "3.0.0" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.7" -files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, -] - -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websocket-client" -version = "1.6.1" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, -] - -[package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "y-py" -version = "0.6.0" -description = "Python bindings for the Y-CRDT built from yrs (Rust)" -optional = false -python-versions = "*" -files = [ - {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, - {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, - {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, - {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, - {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, - {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, - {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, - {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, - {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, - {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, - {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, - {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, - {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, - {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, -] - -[[package]] -name = "ypy-websocket" -version = "0.8.4" -description = "WebSocket connector for Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, - {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, -] - -[package.dependencies] -aiofiles = ">=22.1.0,<23" -aiosqlite = ">=0.17.0,<1" -y-py = ">=0.6.0,<0.7.0" - -[package.extras] -test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] - -[[package]] -name = "zipp" -version = "3.15.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.7" -files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "2.0" -python-versions = "~3.7.1" -content-hash = "8227212a2f61532a4232b077e53c5775c1b8acba5a7bccfdd01e0c9d11a99f2c" From 95e2648a6a760f998fee655b82872612f7476c56 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 07:45:48 +0000 Subject: [PATCH 087/127] adding pyspark --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a504782a..4333a71f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ [tool.poetry.dependencies] python = "~3.7.1" -#pyspark = "~2.4.3" +pyspark = "~2.4.3" pandas = "^1.3" altair = "^5.0" numpy = "<1.20.0" # https://github.com/databricks/koalas/pull/2166 From 0d3fd592a873ab46c277b99bb313d615c53f9e4d Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 07:46:51 +0000 Subject: [PATCH 088/127] remove probe --- probe | Bin 431677 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 probe diff --git a/probe b/probe deleted file mode 100644 index 7a7dbaec96d33de28c7b6fea4a4d395946a32fab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431677 zcmeHw3z!^LnRZV|APE731SH&*i-SUxWX*C}HysEFj2SW9^jUD2OggEFlgThM0kXmh zY7zpih*Y?(fdC=|3>Q%WAC`5AxDN`7xUjH-fBY2?P&clwiu&XKRad>$(_hW$Q#D;Z z(^LJXp3K|d^_=t8`TEq`wJc7Q|Rbk;uhah7JCZk7kb>{ zl!3v{)g6PY`wEh6N&m8rft9QJy9#ch__mI&l`Hys3WJ5-!oWaBUw>gqch}&`ez&+= zU!lLF)Q^rOg{7UVdIsI%w2rRME=O8H)6P!L=oo*1DTpfjyFRa)sE>{!w{D7@_7 z*V((Ib6{3SPxs=1S%U*Ubgw9g(~7Gr zYh{07*3$mY71G5i3pxioPb|F-=fT8|70cvoq4y>C?%u&de{W~cz^oOWy+T*N^nTiL zJuACDzR;JY+r=qMSM|!7UfCnYo%)0aIZd8^-+%{|X|WeBu2Xso7j%>aab6?iZFS}z zCNxi!)3CyAn=sHm=q@hqUO{GOe}Cs{iQTuOqi^+vWg6QT%=awEb#{Hcuq4v9A2rK6 zJ0-r|;x01&((6)~1f25V*=OwHvp%VJ)rvluGLx2+rnwAc!os86^_O|4q_u5gvE}dF z_V)Hu{wn`UKiYCqMaNI*9dO%PykpQ^>v}!kqm*Y>Y4j^((s!4-;Z6Pif=sG`!TwcU zgVMCKK+fC}-*~m#mRsW<-?G^CTa$DPH_ce2sI=MDWjr zy$*Usu=wU4w{I8x{-jU7@P=T=jTfD}!|u7<&9}X@VVdCVzyI0HJq5QuyKUnEf|Gu7 z@{d{tuQ~q%XU!IT?&5ok#|n1udH3`a1pjpRU2ePJjaR>Z_*sJQIsDao&lNmx&Z3vQ z1t&c5q2&XD3x4$AO&1A1^YL#Sv{rEG#IN0crQjVq@Au+$f=7R8@6KBUKXKQmuenQb z+JZ~>{<`4C7yjwSM+E2p+aq)TUGV9TKK#w61ZQ*}vi*6%+unG`;LikK$rU&MQt-m- z*B|kF!6~!X-S=0)wxhSdJb6Yg_recLl)Fjr*)4Bece~)S6aTR9eS(`8p1bIq zg2%jk&a+zuFZ$JYc79TDm$l!%@>#(f_kVQvZGzhldH2b$3ZC~!>y!T@c>iNpP56u8 zf{$IfcG4cg=kJSC-y*pB$4}hyHo>Wb-#zs0f*<_EoU`90_~PzIZkr=`z&S1kVgD!~g6K6l0^1^1n@ z=_~65x7@t(y;lkT_Z>Sfy+QDj`4eBeRq)Z1RvfTJ@U)*Uzx5k}KVR*<^IL+4Ui!nc z9~XRJ<`1?#E%?TPNA3B7AnTX)%lc*ga{cA{%k`J*FR!0@{mkoUUO)5qU;h5f-+y`k ziubR0|BCmoc>kIApLze8_n-OqBmVt}e?Q{ikNEdr{{5GK|K;-=e13z^Z}9mIK7YmM zulW2GpTFYslYD-X&rkCCXFmVT=b!ofGe5t;&oA)v3;g^7KYzr}AMx`?{QMC=KgiDy z^7DiI{4YQM%g_Jv^S}K3K0m+D&+qf|``mwn`)_dn4ep=A{d2f~4)@RD{#V@piu+%2 z|10ia$NlTLe;xO)zrgQb;PJJNIwr{_Whqo%^?Q|90-*&i&iD ze>?YY=l<>7zn%NHbN_bk-_HHpxqmzNZ|DB)&AWfQJLoRH*ey=#SlVAW&ut%A=PoWz zUc9QiXRy0>K=cDW-CYIuYPW4-+oZOZb?zc}t^9Z9ICIwswmNeUyV!M(X`3+6E{U8) z&gpHrHLi1}=h)iT(l%k?rWtEp=fvWKrAN8zFZ0zqIH$C?x1aJ?`B(bUmXp}^$K_6G z$z|)`_IdtzfZ^!!!|Ox8z&=^w3>6pp`{}};h|4K|$l4wT2L7RJd4W6{BmD~ULT?-g z+7A$U5eIpCU^nG~e=hiEli^1s14$SN=T(0ADA<$Y@Y&2-iLkw)R4M(tZa1y8Akxw#SwY`D4e^kqp$rKt5S;YV+RGEZPBD+;egLuuj4s>u;Dp zAHGWT0{IdJ(U}Y+WS~*!S=@eUKP_uIYPIWpl*vFX4A|x)a-001HzDFph`7+64_*NS zG2$2Ktq|mi8xKDq)>pI>>H|e&y@jL3ystn!P`jD*+K)0Bh{FKp6EIGU=cE0#95+wB z{Lmkbw)Ws}^0V1ZanRQqk32*&;4z@*la|3!sL%Tv$Uyi-Fz|<7`)e6~HZ;ar+C$zj zUinAtfg<$RGU5Z&et~-g;`&7bsUQO*U_j3|$iNY#99JP}jWex0xQKr~&;a3}Ws5${Z;A`zLqFsrl7TuhV480xebTO^mB-d@ zTJ5Bj$JSrk$v`R$B<9 zZ=gV)P@ne=`uQyQ0g;bL21b>Eyx*FhhoP+Op}xjWhV@~{V{1p-wQNXhR3l!aF+dq~ z9AxE2kqp#@0n`)bonDW1qws?sG7#%_D8sQvH06UHsGEta*M6a#_cKD)sN17V21bQ} zyx$7uBie)v)OyGx#{7sQOM$vywPlM&k2F8xfYHpF$V47dLj}Jd&EEm8AzXjxbxfOXVNF_Y0^AN{Z0Kr9-zrDu3qPX42+wH zeq>-+2J*hvG@qachB+*8p`U&c#6cbAReIRtVwgt-B-N|%oM~Ov_XD&X$wLJhXg~%~ zAHcM_Xv=4_>wYBlH^q-M&q(8RKPWdB1A5-rWUvE2AoO}Yf*lz8nO@`#hCr|LXjw-` z?1nt1xJbNqw8*#*uX(YA(M$$XWdQS7W2%jeLNfHfZcXL=%xDLw+Y9x9zqV6uE(XH+ zU>Uad(=x)f-Xud0M0{ku$%mGT7hzmrhYYN69!7v4Fw$-i6WUddaD7zzh<{!=1Y*Q* zc(+g+`sYJc=|!jy)R2Ld-epPK2*GMoAj_ZJB~I#^=eP&)iTaA z^g!rq#kl$42eh`Ew|Z1{(CuisYH*51-L95XY>KIdFrazX@(|ZpFLgX*jkaV-{gDrG zab@_0>vi7O;68C^S1)usp*bJEiuWS$H{}cUN%QK~W5%OBpiZM@lOOaz9Y;AH16kwG zG@hjTcQ+YRI61_tez;zIoh`xCbt+AnNZ8;Z8TbKJSR`*kyK<*U2C6b(n{QQvs~GE*w@Q;VH4y`tU%+|~9qj!tK{Sl8iAoRrX$pFqHaI8jQ zYd@~N*7Y~;_-*|`9{6d5z0nZ;)ct}UsO_oA`FNS?-j8_QpqGIGo*x4-HLAfYu*P%@ zZ!!ijZ-5xSmZ7)dNaIX-)6S>cNiBa~XRa=r+BNB`XER%MJ}sLfZGJYpDKGWeVgU01 zs7GhgYrmwjEw9b4+e_-N<0&^61NE9O$ZNuSvy66=wiAiVC(TeFfAmXZ;?`0g5Bj6~ z0XR9=wY85tz{+f8$!0Hm`md7u>-bTV z^M;m`-ZUPQUT2N#r{gG-f$_jV-1!~X4`WX1kGRpoM(^Kf@ld~ZZn)n2_xL;@TJq)R z4SM)LKW|Ry-_JtyYC6i+=FNWuW-Ct@H2q0cI&HO{p1WR+)*t5yc^`&%WJ z?>j>uw;kUf@#Xo8JQ|bbjs8A~_JGKz<#>Ag{d4pm`G{no{tT4ssIo1SzS7GsrIp9l zQd;e#mB-d!+Q~p|3}C(R@v+F?OQH7>_lx1TJ-B~tTKC|G`>l|-g>jYbNAtuTU1dMf zPPtuehm8DMhTg~W@28c1<#F6~r}ytQHLk}3x!j-1yp+g5eHrlQE9$mfU%tM4Jy|K2 z{c7u-c^yQ1ru^EjWmB9*Dn z(3GEgGEj|yxbsK*p{}&PT3en?`)e8Twd!sCGv!D7NfGSlj?_$e<^Zb-uKh@-?gl>Q6>Y8$N<(6U|M~&<+Is!Ka%>J;zyciq;a|*l$(oz zr_}mklfe%BfY9sTA7KZ=&xAT2e$eYYT82MR+f8}k4@4Xg`lPtsaDOjp9{Q7kS{T5* z*H}x=v4}(#cdS5te?!@pkrVczkz@qvfQ%((yJq zX?~l(ZcqEiwa4{KnqT{mmK?XvZQ~xT{<0mPfw<>wyzpfjPg4DO8LzFMrg7WiXeR?n z7)biQ4u4>hwubt~jYl28AM(&#ab6=nj<4r~c1&^5!!K^$TK&+jEsx0$dY~;2?PQ>y z42-mX5C^PhADKHl4A|cHv|Y<4CerpZwWH@d+69{8v>h_g6bC*0fY75qS`RzWW`|!~ z)cMelr13gW-1xYDw*0l)q9wQziq|7%?8)b)pFjG(Z{ow&AH=~=BkYZa=%?-%^gwM-OZM~I&qKZYk=A&cJ5TaD zY;L~djvl-MANjx^4cH|>17owV{Ntv^${CcW-=Tv_MSvMGVBQ1u=uCR;msGapwb^xhN&R&^<>q3bUhjX%Yr=Z7jCPZ@qvIN-p3pCi zNynG=c+el+59oo~4q4l^3_oHv8HhU{ zb{&`0U&oJ@tocK`T5lSUNsm0hxPI^_l7aEWfUXx)-{blrKB+(AMhhFae;ZnIEhQG* zL3gp!**2+dr?!@L?jm=s{CDO!bJqyAI&%-Z*maI+n=sJsxh--|Z_BN5oijbh*0z?m zNeeg4SnE0`7AJh@D0ls3zIumZ%SCQ`d;2MWm4BrlZSy30{W)%HvE@kDS<5543=}6E zDW`ZHkL)r~+~G*?9ACyGy9{{ec(&`T=aF3oymLIqbuLfyD72=Tjk#)Ppg2*^vb@rYnkutuDM|K$~PVkEO3(a)M`rcIIb-qyCp>)-CwZkK`40z{Q-mH0K zn1SL%ImhyLy@5w|87NNjPO_ZkYj}*D0a@f5oIknplK1Otd1RLXS(ClD>+5)AmjUk_ zOC4X&BfAX9byum7Z*X`t3uhYQ zqp8lY%;x4gyBnLSeoJF*vhypeJ1aQb=bY!4=Qm4pAlqj%I=U>KyEtQsGLUUe98MDW zjDrpAP2ZPs(nbIx6|f3e1*`&AL336CpOh)pKBs?kPJf6|f3e1*`&A0jq#jz$#!BunJfOtO8a6 ztDqUGfKSSlDxH(P874c=GS70U-1$g|M+3`YC<)o!Kb0f%7~pIlI@`$x*$@Uu0!iRo z0jq#jz$#!BunJfOtO8a6tAJI&Dqt0`3dXPs_?O8N`K&@#;TTpSryr*uryr|;Rlq7> z6|f3e1*`&A0jq#jz$#!BunJfOtO8a6tAJI&Dqt0`3RnfK0#*U5fK|XMU=@r`74S)! zQmt{ijm~r<&*ZsOaQpzdM+3`&B(NM<1*`&A0jq#jz$#!BunJfOtO8a6tAJI&Dqt0` z3RnfK0#*U5Alp??oP5&Oul02gcJ{c=P5!areHdvNRK15aGp+cns|vbVR;(^ELG^^6k_bDf)ckO4A42FO6| z49KdV^80CVpWwZFN#Ve*mAwP2dImeaw{Us)K3?9vZ{d+)26$DLZ3a?)uSom7hxuw_ zptvvIyZ`Sc*E?G`FD~>iE37E=4$7PNN%H1>E063lkp87WZIhAFsWZTfuWU0A+zB0v zn{#Y)6d1_%#U)3V^5r#G^wd|-l+O_RmoWyieSN{vk%4S8(BRh~vZ6P54;#LJT*1iz z85q9|@E$Z7$PfdvqGxC{amG@dibpq(IMQ{##3Q>56sLtxY#wo>ob20pWS4>Be#VD3 z<>brR|1yv4GEn{O&vu>Ld5oL^xk_ko{;Hqy zfV}^2;gMYiELVH8y(Qpo9@%AJ$Squ{^?P_^mw`g-&`W!-vhU@QT?VQx?4`@P`y3vb zWuW@mm$&+_^2ja&)i3L2%dd5=b3c#lGEn}#ez?21-UN^t@U=7#xi^t&K4zN}Lp-v}Kw;2b>@0FlZ_BN5oio?Di`>?>mbOVEoLHRDeU!WYGGDiYb4q)A`ze2w zf2AL7ISE{Ue5=39Y%b^Tyqe2R2oyU6xKn_xxUZG$>)dnP*5Y1$oxMvs2WEAx>@Upf z?p;#2urM%dapyq6El%y|EnLuXvZr&ecAdwIlkoat37oj3bFkBmc6hRM_*3g8wX>5m z#hL0%E_oJQ=TPU6;*74&{zAt<_n`c6R`w5e^meW&xZcQ%6H71KS9x7?zE_+%T)+A| zdzX0~Tjb%8&N$Dt7bgu2cJ>dtZMovafx(r1?!rwoyjO)jx2>g=wBThfPV5+5-RBmk zc)efR@3mf>(y^j2*jXCRIc{-M=ip%ffP1l9+_7V6Pv^4I%eQs*^sKyKpkv9ZzMk%` zPU(J6=i)-ofP2}%s>Q`U%cJTq^pv((8*sY&T<2YfT`GxMog!?N|qsr#8)k&5I^>33WcyE{I_%_SaJ$K39_qWI&`R9wU9ZzQ|6%g&Dd zh2DWe_p;uto89GqBP)UWQQY~|(>{9qNhi-gebLD$4Dl#VJ>#^K51hZ?j1Qh3s7;>b zgvA|?pTB6q$scm7y2_jN3GC z|Mc(8&P~hr^nBjt{V2WKYpCP$nVx>{@W;O1tNpwmCBp&UtJ06Rd#}77VH?X2_Ed+2 zKi=uRY7NDA$*a(}R1e-~I_{8HUOn9DY$+SPvbeWY7Wb6ypvZ5Np>g@)UdAKBAMf#A zy*CtR%d4{QFjGpMK_ylXJ<4mwl(Ty1-&KT`uAMsDa&42_TD+?yZ>eA7UEet0bDs28 z;2%`KP?_vJ>r5~1-X~Wly@MU)<-B`|Tii3E?J1mJ=y8ktL<~c&X^MMCt$l^A?#`aU z)ujs_xn{w&jwFg+gY~XjQRwgPlB=DQdk5$K&CsizVFt6mTy_21`s26TE&?Y84wC}h zF+f}#P7dTL0Zt8Y=K!Y#xJ!V$2Kbf$rw6!OfNu?O_W)-ExJQ6{2KcrB_X==kfO`kH zPk{RdxL<(Y#VnXCUEnz{JFhsua9(v@ldG&>%Ku-NF43mTN$qk99ew?UCEZwSHj1>gCZ-rs#yu=|StJnUh?KOOYUmd6CIc=+ife<1ke)?=4F zC-||mkAD59f}6T-Iq-GCBmZ*KmwqSssJpTCO~IwBU;NgN!toz=`|*P5f=AC>@Q*VE zzkA>OH{T&R?V&s894@%=!*@LJKEYY9-FECe!M@+@dfrKbEtgOG-wz8Of7PmY{e$3t z95!(G62ZcweY1N7KXTLwGcOQ)^{L}FULyGJ=k9uXz2L)ro6o#j@XZU}TKuBmmD8tB z|FYnLn|E>V5nO!l`Hw#+_}h~P7d|TZzEfZP)b|9x^Nau5@fpFhE`9Fup9ucBu-8Ga z2o~Sm-=Fl!7v2!;xbdQMcaS-A^KCC}m?k*;?|(LPPrMeEb^+trc84@oTqVDR{@u`@MLb;L%^&yYm*oPu%tCYwi-9w&2pe zzb?4(g@3y75yAQY_Q>3S7kv7o4}bG1!5N*0Y=2(xwm04}_%p#*a>dQR6uj{I^+)_( zaLVj;_x)9{?da_LpFeZcK7#k0clyDH2mUjD>sg3tf!Z(Gh0T>g>YtXV4f=k33q(kJ--Kb|#jwcz(Z zf5z5N2~NN6kw0D`c=LN7zG#Es?8hI<-6Z(zmN%}uU2xfnf7tgv!OaWLUGz=CV_rVz z*{y;X{pveAKPkA&+HYU^tl*9NKf3!i!EJ}U`{Y*z&wHfx$^Q|&|FNqk{6%oV$F5vE zNoxC<-xsI8MR4_xpSb01f>Q^-d+6H*Klq6`XTMAE#odqGHb?M)eQwy}{et)2f9>@r z3eNxFhW$ow*~Nlq{&vZ<9>G_xSp4}_f)^fq?u<_g?mK1ESJnw` zxq0JzuM+(4J9b=pgWx6eC%$&8;G-w4IADw5X+K?l>o){{zS?=`w*(Kp^oM6ZF8ILA zA8dPC@QnkH+VcfL)-UUq^~?I@`pfl~>o3<|UO)5tnb*&}e&+AL{QZ}||MLD7?_cr$ z74Kj1{xk1C^ZqmMKlATL{QD9Ae#E~Y@$bL<`!E0g%jY-v{05)j;PV@N{)*3E@%bx0 zf5qn~`TQiGpXBq;eEylwKlAx#etv{;}LYmixzY|5)z-%>AFa|15x@V4-+#pKFXQ)@@%zj8{e%4eL4N-rzkiV5AIk3! z<@bm3`$PHtzx@7Re*Z7O|Cit2&F}B#_jk*F#RomJh5NU2|90-*&i&iDe>?YY=l<>7 zzn%NHbN_bk-_HHpxqmzNZ|DB)+`pasw{!n??%&S++qr)`_iyL^?cBee`?qudcJANK z{oA>JJNIwr{_Whqo%^?Q|90-*&i&h)cmH;G&|SP?e$M}QvFn`EKCsSR>~yVl7rD+H zXYLxoR%h;EVmhX6!a%#YJByst+j47M=gf7Uv8|xK=4Dvp2mZO>pG}4zkqjhZAe>kE;iF(rio<6!YmwjV;aehp`Qanr2OQpOh&E;(bzm|9s#QV3(A}8v^3s7aI7242*yQ%qO5u0X;CZ=lxgE14DbAU)b6U z?MeF?`0MWLeA*scHsp^TPe(FP3j_IN!KuxAOS5PPXmQWQ^}{*|f2_Y@{(Sf<(F^2D z6hvn-kdT2!oo8|TrTw(5>8RDN^HC-PwJ>0tkH~HEgWiOQHzDFedp>vt48(|EptnMh zCvH6afLLGAPN)wQk@Xgi8uPva@j&fn(rZ7;WFQU$m`}hsF`ke1*K*uE_3}f1G}_vO zzsb*LH^o6;YdrE0$$-azo=;i^OQAmRYaj#R7s0?EdhM@e_}S1HXK4?4!+7N%u?LFK zU(1LOQ2Pb$5s2#-38aDyjDP_>-yj1=kaApwq&3d8@{B9;*x6BM0P_rJ`#sUx!MyLG zf1gBtjn;gD1L7k7`9K4NgO)A&Fuy4-h!6dck4OgU$bf0Sne<7!l2#sDyJ@wPRvue_ zX(t1zFp&4NnC30?c&-TYUO}8*kI^UiX*pbXbv$GQBt*0aL^xykdhyzA5Q$q&q48)y35x=~jJEFHVsr|K#@S63O{+aTl z{lplwhwF(*JnRtz6=WcN2I9_dlb=bSw5Lh)B=tA-2YG-dzqopx2Qn~j9{Q1iVHwE# zTGM=j9vJ4Z#D#wPMGyydm{;jxkBea*6_8Y~!gHo|Ro@TLawHEGWS{{VKz#ty>Y^>5 z&93{A)ZY|8(mW%L)BT{_Tny-WW0S!S{D9Ew^$2!g=x2J7Hy8rF&ZA`=9kCnonBpSw z+R-B8KD_3|5=Ju_NR} z*Lsr-JrMDc^(G%$Dqe(ffgLii!g&}0e!xh(K}={@Il}c(=_CGm#Ko227p~WN zUxWL^pf^Cj z_A=!!dkp^yalqldMy{<_-jVl+k)z3gKL1)y+7}&flauDR`Rn$ye_VT9zohxK|ES6N zcrDq+9WM*L(qbTM=fgCfr24e@9qT-%agTMs*nYMcNIK8p4;(2QvE%c83!#4?Cv7*3 zj~f`YV~Pv)BkWJyZfL)-U2RaZ$q#y<3ZqB{MwNk)&O^ijN43*zY}_(nn=jg~Wz)dZ z_A|8;-VY8O&@Rvvr|pn|ra0)~2ZSE|iReQI|Ao!2+^u3HU)~y0;edExg)v3JmcLee zid|)@F<`)U{>Pw8v6@WU@1*{^6ScdZ4zaCg&-ISP1;T*E}t|*ef-fcjfq=Jc|7Qk?g#WhZHKJw zT81Ann+(J~-*Nr2$r49J1}YgCt$GOC$=B9C@&GHdl_i_K?CHNs>aXKRP0kxyQhL*P zOnRL)uAh#hOa{gS199hfTtAFCsXyXI3md(Eqs2r0+PUF+@89F|fN05=pEu~?|NOi; zrGGyQ(U0FA#_7Dsk2u{9WNk+r?2v7UJQ{VskhfAF9Y>{KdHje&JHGttJimXYJdX$V zTn_OVkCve)l7Zw5Yzyb%@UgHb#o@D=wa9Pw@GaWUv<|=zXv-Tn5Ap#`d38Sc15I(% zlYvSGZ14B5Yebex{qteH`}*iQjyRz2_iC_i>vgRhk9H7eL-<$rqnsb{@YC|}>uGtt ztc=4tTh0%=j~E}YJT9~gtc(MnuoB6@NEpDn0Mt342f~hZ26`au^+sEJuqW*&{B{3z zK5dUHoASqvrym&@83SjO{=F3berL<#`#&=;X`C&uwpX_EjJ1F8*Lk#zepmXJ>koDv zXOk=Q*}Q2d1GO+vp0BlJNk2AjzqFs0bwJ{Sz{nVg`#x{-gWiO;ULg*CzWh>T zJ=T8kw_#TtD)Ukz1NCLVpRcIfa((&w^7Uk;T=uK2cjk2v z?V0jxyOvFHCOzUcn*6n1$3fP9l*vH-82Cl7K0g&8>I<@NS?eJKv93YZ@gtQ@`Je~t z{BiZ#53(K)^g!JnWil`t3~UeT74s8qLI!F*d8Pg z2I9^i?T5P3`f6=?Htnxv#Mi2~_0NdkTR(}?z1xe}9A>2tO0*c=$oD^Jp3VKy5eWfjq&-{K z+S7TpjB!B^guYgcn-6|KTf5s0b!Ll$UALoU_|+SAyIQVy`^}eM-*?q=Qbu$2`D;$Tsxzpxx;6q-Y0zwtOag-1y4&qW#hN;cwEL?Ao7l zH3rP{uv%2(+Dzj~s!uvXQ+`_>!~t#oN$vH@o3tPF9~%brb&i&k_DaXw@Z+^-_v$2o0v%3&(w~d?`Rijiqm$;KvNv_@B>1R{%AeyK${(YaZ%?(Ka$4l zJaOaW`q}c=YLD9w`ZXp4w)5YZy^ek!($>#f$60H5_Q?N6BuRAaz2539w*vDGVYoVMwcWd`uP3$Wf}MLR&W z=gWAG3EDDhe^{Ug`ugPcg7z!(pp_^l^@Bg!iDpcuNty@k>sGX0%kYOD2)#ya*RuA9 z3_l;E^8j}351H7A3?#3^c%wjGppG)>wO>-%me*$2?Ira`JmP@R6UQ3^cwYmKRsU`6 zC$lG?mwx`}`@V?}TYnG-KaH?A8ls=NU(f@!JuTVKZ$A(9?nheVY3@A9>#(``iaUDn z3XB^^KQiDkfcug_u%cz?Z8*|6Q{J@m>2}h}pS1o=?V9wu-*IJ~Ps^q}Hb0x)l$ZK! zF@Sjw)T1-$wO>-%me*$2?Ircs@syj3fqK3FA+HJR%`)0e+K!HElzKwHG$tKi+T%fg zbU&a6YCB|Y*E0Nw*<>K@e2nXtO_n$+GEm9DXuVIO9bJFWSN6&*!5?VywApoBQhyyk zTC(O3?P|SgJSIKz0OR_>pGXGA69c+lOnr~*hxnxah#M_z-2QE7$+eVNa0lJR&Z@QU zBG;MY%v~ec>dZatV%IsQZNfmiXI$i*-j-YAI%lr)jBPD#lNN58vDS4ywf-FOUCSfW z46Ji_WSN1>93EL_V7ThnA`nCCb3YnsNILD{a>=;#`Y{rdMN%0RX? z^=GuPT1fe9j)N7wvG}ilZ&E(P4Zot-pV7u@q1n#wjSi0tGw^{={?XsSl`n(`l0Xtz z4y*!JL96|f3e1*`&A z0jq#jz$#!BunJfOtO8a6tAJI&Dqs~fXBF^CnNsa@`ZwqF=XvLOFTDZqVR4TJmIFy( zIj{;?1*`&A0jq#jz$#!BunJfOtO8a6tAJI&Dqt0`3RnfK0#*U5fK|XMU=^?mnxP8# zq)e&OIoX?GvhytSESJiikA!$MupEYxz&&KM%>ZZn(AiEl$c8XL5=a8y3RnfK0#*U5 zfK|XMU=^?mSOu&CRspMkRWOECz`snE$Y&L@3dgVtIsG{OIQ>`!tO8a6tAJI&Dqt0` z3RnfK0#*U5fK|XMU=^?mSOu&CRspMkRlq7>6|f3e1*`&A0jpqis(??*lxmIBZFHs^ zc_z=Lg5w9sJsMaJB!T6?Dqt0`3RnfK0#*U5fK|XMU=^?mSOu&CRspMkRlq7>6|f3e z1=+3w=cdL#Hk`A_KM9T8)k13{_pa2pO%9JNGjOxRgA9-XGC&4WU_e&%6tYz0xW(a- zWd^c*b-}T1s;K3(-y4{3>>0S#;gMkm>ae1Z{hVbFhBA=ls|$|pmWIE_HV$s5HZ+I4 z%FH$cL*J`Yc+C}^zmt%GQDuNvA!L9Ij9&&C{Q5#x^ak%?!}l+R>#9**QP^KHKnBVT zWcUs&@2@u>1G1tw+l>B_!z0TK+~)AeG6P?Bcx0J@+Z`S?Fd!>>4bh_#dxyg#%M5IG zcx0J@I~^WbX5cP|M*}e+D|*_!`HI6M%M5IBcx0J@yB!``X5b!&M}`@Y75!cwnP%WV zhewtf_^QJr%M9G_@W?U)UvpADWJOOkAG6iWz}FofS!UoH4v#D|@PNZ3%M3i|H1r`W zdPDbb9Q5uXhew7PC=9xboqt*DE^^no=eVuT_nap$7WjelwDVm1Do-z}7d_Q;?au#c z%Q@Q?Zkplzw5_FNE0i2wc3yFQ;k@d+cCqXHQvUz?vVm2Lixc}g2OYOKsjq+K;)1(s H@vQ$3iwUAE From fe5c68764bbeef2d7216bcac000a5e8056a57934 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 08:43:50 +0000 Subject: [PATCH 089/127] fix coverage --- tests/test_probes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_probes.py b/tests/test_probes.py index aceda443..f7664765 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -197,6 +197,7 @@ def test_compute_visit_probe(data, params): length_of_stays=params["length_of_stays"], stay_sources=params["stay_sources"], provenance_sources=params["provenance_sources"], + condition_types=params["condition_types"], age_ranges=params["age_ranges"], ) @@ -696,6 +697,7 @@ def test_compute_biology_probe(data, params): concept_codes=params["concept_codes"], stay_sources=params["stay_sources"], provenance_sources=params["provenance_sources"], + condition_types=params["condition_types"], age_ranges=params["age_ranges"], ) From 4ec8ee17716e0667ec29be53a39324be394ffb36 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 08:52:59 +0000 Subject: [PATCH 090/127] add filtering on notes and measurements --- .../completeness_predictors/per_measurement.py | 16 ++++++++++++++++ .../note/completeness_predictors/per_note.py | 16 ++++++++++++++++ .../note/completeness_predictors/per_visit.py | 16 ++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 49313e27..e770acfb 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -7,6 +7,7 @@ from edsteva.probes.utils.prepare_df import ( prepare_biology_relationship, prepare_care_site, + prepare_condition_occurrence, prepare_cost, prepare_measurement, prepare_person, @@ -42,6 +43,7 @@ def compute_completeness_predictor_per_measurement( source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], age_ranges: List[int], + condition_types: Union[str, Dict[str, str]], provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], @@ -105,6 +107,20 @@ def compute_completeness_predictor_per_measurement( age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) + if condition_types: + conditions = prepare_condition_occurrence( + data, + extra_data=None, + visit_occurrence=None, + source_systems="ORBIS", + diag_types=None, + condition_types=condition_types, + start_date=start_date, + end_date=end_date, + )[["visit_occurrence_id", "condition_type"]] + visit_occurrence = visit_occurrence.merge(conditions, on="visit_occurrence_id") + visit_occurrence = visit_occurrence.drop_duplicates() + care_site = prepare_care_site( data=data, care_site_ids=care_site_ids, diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 0cf88942..b75ad389 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -7,6 +7,7 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, + prepare_condition_occurrence, prepare_cost, prepare_note, prepare_note_care_site, @@ -41,6 +42,7 @@ def compute_completeness_predictor_per_note( length_of_stays: List[float], note_types: Union[str, Dict[str, str]], age_ranges: List[int], + condition_types: Union[str, Dict[str, str]], provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], @@ -80,6 +82,20 @@ def compute_completeness_predictor_per_note( age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) + if condition_types: + conditions = prepare_condition_occurrence( + data, + extra_data=None, + visit_occurrence=None, + source_systems="ORBIS", + diag_types=None, + condition_types=condition_types, + start_date=start_date, + end_date=end_date, + )[["visit_occurrence_id", "condition_type"]] + visit_occurrence = visit_occurrence.merge(conditions, on="visit_occurrence_id") + visit_occurrence = visit_occurrence.drop_duplicates() + care_site = prepare_care_site( data=data, care_site_ids=care_site_ids, diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 44a0dc26..54d6cba2 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -7,6 +7,7 @@ from edsteva.probes.utils.filter_df import convert_uf_to_pole from edsteva.probes.utils.prepare_df import ( prepare_care_site, + prepare_condition_occurrence, prepare_cost, prepare_note, prepare_note_care_site, @@ -42,6 +43,7 @@ def compute_completeness_predictor_per_visit( length_of_stays: List[float], note_types: Union[str, Dict[str, str]], age_ranges: List[int], + condition_types: Union[str, Dict[str, str]], provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], @@ -77,6 +79,20 @@ def compute_completeness_predictor_per_visit( age_ranges=age_ranges, ) + if condition_types: + conditions = prepare_condition_occurrence( + data, + extra_data=None, + visit_occurrence=None, + source_systems="ORBIS", + diag_types=None, + condition_types=condition_types, + start_date=start_date, + end_date=end_date, + )[["visit_occurrence_id", "condition_type"]] + visit_occurrence = visit_occurrence.merge(conditions, on="visit_occurrence_id") + visit_occurrence = visit_occurrence.drop_duplicates() + care_site = prepare_care_site( data=data, care_site_ids=care_site_ids, From 79fc8d3717be17bc6296081e0813b3003385250b Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 13:08:52 +0000 Subject: [PATCH 091/127] test coverage --- tests/test_probes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index f7664765..a781d4e6 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -36,7 +36,7 @@ note_types=None, stay_types=None, diag_types=None, - condition_types=None, + condition_types="C", source_systems=None, concepts_sets={ "entity 1": "A0", @@ -71,7 +71,7 @@ note_types="CRH", stay_types="hospitalisés", diag_types="DP", - condition_types="C", + condition_types=None, source_systems=["ORBIS"], concepts_sets={"All": ".*"}, start_date="2010-01-03", From 399cbd4348088c425dcb91d73dfe98af61dcb7c2 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 14:04:42 +0000 Subject: [PATCH 092/127] coverage --- .../per_measurement.py | 1 - tests/test_probes.py | 36 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index e770acfb..ef43104a 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -106,7 +106,6 @@ def compute_completeness_predictor_per_measurement( person=person, age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) - if condition_types: conditions = prepare_condition_occurrence( data, diff --git a/tests/test_probes.py b/tests/test_probes.py index a781d4e6..32f28810 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -36,7 +36,7 @@ note_types=None, stay_types=None, diag_types=None, - condition_types="C", + condition_types=None, source_systems=None, concepts_sets={ "entity 1": "A0", @@ -71,7 +71,35 @@ note_types="CRH", stay_types="hospitalisés", diag_types="DP", - condition_types=None, + condition_types="C", + source_systems=["ORBIS"], + concepts_sets={"All": ".*"}, + start_date="2010-01-03", + end_date=None, + test_save=False, + stay_sources={"MCO": "MCO"}, + provenance_sources={"All": ".*"}, + age_ranges=[18], + module="koalas", + drg_sources={"All": ".*"}, + ), + dict( + visit_predictor="per_visit_default", + note_predictor="per_note_default", + condition_predictor="per_condition_default", + biology_predictor="per_visit_default", + care_site_levels=["Hospital", "Pole", "UF", "Unité de consultation (UC)", "UH"], + care_site_ids="1", + care_site_short_names="Hôpital-1", + care_site_specialties=None, + specialties_sets={"All": ".*"}, + care_sites_sets=None, + concept_codes=["A0009", "A0209", "A3109"], + length_of_stays=None, + note_types="CRH", + stay_types="hospitalisés", + diag_types="DP", + condition_types="C", source_systems=["ORBIS"], concepts_sets={"All": ".*"}, start_date="2010-01-03", @@ -353,6 +381,7 @@ def test_compute_note_probe(data, params): stay_sources=params["stay_sources"], provenance_sources=params["provenance_sources"], age_ranges=params["age_ranges"], + condition_types=params["condition_types"], ) # Care site levels @@ -673,6 +702,9 @@ def test_compute_condition_probe(data, params): condition.get_viz_config(viz_type="unknown_plot") +params = [params[1]] + + @pytest.mark.parametrize("data", [data_step, data_rect]) @pytest.mark.parametrize("params", params) def test_compute_biology_probe(data, params): From 1037c2505e3054cb6c736e80c2d03ecc0b6f20d4 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 14:32:46 +0000 Subject: [PATCH 093/127] coverage --- .../probes/biology/completeness_predictors/per_measurement.py | 1 - edsteva/probes/biology/completeness_predictors/per_visit.py | 1 - .../probes/condition/completeness_predictors/per_condition.py | 1 - edsteva/probes/condition/completeness_predictors/per_visit.py | 1 - edsteva/probes/note/completeness_predictors/per_note.py | 1 - edsteva/probes/note/completeness_predictors/per_visit.py | 1 - edsteva/probes/visit/completeness_predictors/per_visit.py | 1 - tests/test_probes.py | 3 --- 8 files changed, 10 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index ef43104a..5ced44ed 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -47,7 +47,6 @@ def compute_completeness_predictor_per_measurement( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index b926f343..eaaa6533 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -47,7 +47,6 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index f7459cbd..a52356a6 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -45,7 +45,6 @@ def compute_completeness_predictor_per_condition( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 24ea3c6f..e731be52 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -45,7 +45,6 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index b75ad389..e51bc6b9 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -46,7 +46,6 @@ def compute_completeness_predictor_per_note( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 54d6cba2..d0fbaab9 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -47,7 +47,6 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 0075b41b..f8516b6c 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -42,7 +42,6 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], - **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/tests/test_probes.py b/tests/test_probes.py index 32f28810..9a9ec375 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -702,9 +702,6 @@ def test_compute_condition_probe(data, params): condition.get_viz_config(viz_type="unknown_plot") -params = [params[1]] - - @pytest.mark.parametrize("data", [data_step, data_rect]) @pytest.mark.parametrize("params", params) def test_compute_biology_probe(data, params): From 35c98500502edb9de63310a9785c941255f82374 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 7 Sep 2023 14:55:56 +0000 Subject: [PATCH 094/127] kwargs --- .../probes/biology/completeness_predictors/per_measurement.py | 1 + edsteva/probes/biology/completeness_predictors/per_visit.py | 1 + .../probes/condition/completeness_predictors/per_condition.py | 1 + edsteva/probes/condition/completeness_predictors/per_visit.py | 1 + edsteva/probes/note/completeness_predictors/per_note.py | 1 + edsteva/probes/note/completeness_predictors/per_visit.py | 1 + edsteva/probes/visit/completeness_predictors/per_visit.py | 1 + 7 files changed, 7 insertions(+) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 5ced44ed..ef43104a 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -47,6 +47,7 @@ def compute_completeness_predictor_per_measurement( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index eaaa6533..b926f343 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -47,6 +47,7 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index a52356a6..f7459cbd 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -45,6 +45,7 @@ def compute_completeness_predictor_per_condition( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index e731be52..24ea3c6f 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -45,6 +45,7 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index e51bc6b9..b75ad389 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -46,6 +46,7 @@ def compute_completeness_predictor_per_note( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index d0fbaab9..54d6cba2 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -47,6 +47,7 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index f8516b6c..0075b41b 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -42,6 +42,7 @@ def compute_completeness_predictor_per_visit( provenance_sources: Union[str, Dict[str, str]], stay_sources: Union[str, Dict[str, str]], drg_sources: Union[str, Dict[str, str]], + **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] From 3cfd1e9b72fe3af34e0f88ccfc47885857300b2b Mon Sep 17 00:00:00 2001 From: svittoz <137794505+svittoz@users.noreply.github.com> Date: Fri, 8 Sep 2023 15:30:05 +0200 Subject: [PATCH 095/127] Apply suggestions from code review fix several bugs Co-authored-by: Adam REMAKI --- edsteva/probes/biology/biology.py | 12 +++++++----- .../biology/completeness_predictors/per_visit.py | 3 +-- .../condition/completeness_predictors/per_visit.py | 1 + edsteva/probes/utils/prepare_df.py | 6 +++--- tests/test_custom_probe.py | 6 +++--- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/edsteva/probes/biology/biology.py b/edsteva/probes/biology/biology.py index 2dd0ef3c..646bff8d 100644 --- a/edsteva/probes/biology/biology.py +++ b/edsteva/probes/biology/biology.py @@ -109,8 +109,8 @@ def compute_process( "Glucose": "A1245|E7961|C8796|H7753|A8029|H7749|A0141|H7323|J7401|F2622|B9553|C7236|E7312|G9557|A7338|H7324|C0565|E9889|A8424|F6235|F5659|F2406", "Bicarbonate": "A0422|H9622|C6408|F4161", }, - condition_types: Union[str, Dict[str, str]] = None, - drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, + condition_types: Union[bool, str, Dict[str, str]] = None, + drg_sources: Union[bool, str, Dict[str, str]] = None, care_site_ids: List[int] = None, care_site_short_names: List[str] = None, care_site_levels: Union[bool, str, List[str]] = True, @@ -168,9 +168,9 @@ def compute_process( **EXAMPLE**: `[1, 30]` provenance_sources: Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - condition_types : Union[str, Dict[str, str]], optional + condition_types : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` - drg_sources : Union[str, Dict[str, str]], optional + drg_sources : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` @@ -199,8 +199,10 @@ def compute_process( self._index.remove("provenance_source") if not age_ranges and "age_range" in self._index: self._index.remove("age_range") - if condition_types is None and "condition_type" in self._index: + if not condition_types and "condition_type" in self._index: self._index.remove("condition_type") + if not drg_sources and "drg_source" in self._index: + self._index.remove("drg_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index b926f343..6662a02a 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -59,8 +59,7 @@ def compute_completeness_predictor_per_visit( Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,condition}$ the number of stays having at least one biological measurement recorded and $t$ is the month. """ - - self._metrics = ["c", "n_measurement"] + self._metrics = ["c", "n_visit", "n_visit_with_measurement"] check_tables( data=data, required_tables=[ diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 24ea3c6f..95b8e530 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -250,6 +250,7 @@ def get_uf_visit( "provenance_source", "age_range", "drg_source", + "condition_type", ] ) ) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 61f52a64..eba5265b 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -720,16 +720,16 @@ def prepare_cost(data: Data, drg_source): required_tables=["cost"], ) - cost_columns = ["drg_source_value"] + cost_columns = ["cost_event_id", "drg_source_value"] check_columns( data.cost, required_columns=cost_columns, df_name="cost", ) - + cost = data.cost[["cost_event_id", "drg_source_value"]].rename(columns={"cost_event_id": "visit_occurrence_id"}.drop_duplicates() return filter_table_by_type( - table=data.cost, + table=cost, table_name="cost", type_groups=drg_source, source_col="drg_source_value", diff --git a/tests/test_custom_probe.py b/tests/test_custom_probe.py index c257e8b7..bc602d96 100644 --- a/tests/test_custom_probe.py +++ b/tests/test_custom_probe.py @@ -70,8 +70,8 @@ def compute_process( length_of_stays: List[float] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, age_ranges: List[int] = None, - condition_types: Union[str, Dict[str, str]] = None, - drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, + condition_types: Union[bool, str, Dict[str, str]] = None, + drg_sources: Union[bool, str, Dict[str, str]] = None, **kwargs, ): if not care_site_levels and "care_site_level" in self._index: @@ -88,7 +88,7 @@ def compute_process( self._index.remove("stay_source") if not length_of_stays and "length_of_stay" in self._index: self._index.remove("length_of_stay") - if condition_types is None and "condition_type" in self._index: + if not condition_types and "condition_type" in self._index: self._index.remove("condition_type") if not provenance_sources and "provenance_source" in self._index: self._index.remove("provenance_source") From 44bce5ba4d4357ee9832e491d11ff709e181d073 Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 14:13:17 +0000 Subject: [PATCH 096/127] fix typing --- .../completeness_predictors/per_measurement.py | 8 ++++---- .../biology/completeness_predictors/per_visit.py | 8 ++++---- .../completeness_predictors/per_condition.py | 6 +++--- .../condition/completeness_predictors/per_visit.py | 6 +++--- edsteva/probes/condition/condition.py | 6 ++++-- .../probes/note/completeness_predictors/per_note.py | 8 ++++---- .../probes/note/completeness_predictors/per_visit.py | 8 ++++---- edsteva/probes/note/note.py | 12 +++++++----- .../visit/completeness_predictors/per_visit.py | 8 ++++---- edsteva/probes/visit/visit.py | 10 ++++++---- 10 files changed, 43 insertions(+), 37 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index ef43104a..e169faef 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -43,10 +43,10 @@ def compute_completeness_predictor_per_measurement( source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], age_ranges: List[int], - condition_types: Union[str, Dict[str, str]], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + condition_types: Union[bool, str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 6662a02a..212812fd 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -43,10 +43,10 @@ def compute_completeness_predictor_per_visit( source_terminologies: Dict[str, str], mapping: List[Tuple[str, str, str]], age_ranges: List[int], - condition_types: Union[str, Dict[str, str]], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + condition_types: Union[bool, str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index f7459cbd..429f2211 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -42,9 +42,9 @@ def compute_completeness_predictor_per_condition( source_systems: Union[bool, List[str]], length_of_stays: List[float], age_ranges: List[int], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 95b8e530..117d8073 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -42,9 +42,9 @@ def compute_completeness_predictor_per_visit( source_systems: Union[bool, List[str]], length_of_stays: List[float], age_ranges: List[int], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/condition/condition.py b/edsteva/probes/condition/condition.py index cd7f8d08..aa252218 100644 --- a/edsteva/probes/condition/condition.py +++ b/edsteva/probes/condition/condition.py @@ -82,7 +82,7 @@ def compute_process( length_of_stays: List[float] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, age_ranges: List[int] = None, - drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, + drg_sources: Union[bool, str, Dict[str, str]] = None, **kwargs, ): """Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] @@ -125,7 +125,7 @@ def compute_process( **EXAMPLE**: `[1, 30]` provenance_sources: Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - drg_sources : Union[str, Dict[str, str]], optional + drg_sources : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` @@ -154,6 +154,8 @@ def compute_process( self._index.remove("provenance_source") if not age_ranges and "age_range" in self._index: self._index.remove("age_range") + if not drg_sources and "drg_source" in self._index: + self._index.remove("drg_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index b75ad389..04ffc91b 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -42,10 +42,10 @@ def compute_completeness_predictor_per_note( length_of_stays: List[float], note_types: Union[str, Dict[str, str]], age_ranges: List[int], - condition_types: Union[str, Dict[str, str]], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + condition_types: Union[bool, str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 54d6cba2..5a9b4c2b 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -43,10 +43,10 @@ def compute_completeness_predictor_per_visit( length_of_stays: List[float], note_types: Union[str, Dict[str, str]], age_ranges: List[int], - condition_types: Union[str, Dict[str, str]], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + condition_types: Union[bool, str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index 169a4362..a933665e 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -82,8 +82,8 @@ def compute_process( stay_sources: Union[bool, str, Dict[str, str]] = None, length_of_stays: List[float] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, - condition_types: Union[str, Dict[str, str]] = None, - drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, + condition_types: Union[bool, str, Dict[str, str]] = None, + drg_sources: Union[bool, str, Dict[str, str]] = None, age_ranges: List[int] = None, **kwargs, ): @@ -121,11 +121,11 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"MCO" : "MCO", "MCO_PSY_SSR" : "MCO|Psychiatrie|SSR"}` length_of_stays: List[float], optional **EXAMPLE**: `[1, 30]` - provenance_sources: Union[bool, str, Dict[str, str]], optional + provenance_sources: Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` - condition_types : Union[str, Dict[str, str]], optional + condition_types : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` - drg_sources : Union[str, Dict[str, str]], optional + drg_sources : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` @@ -152,6 +152,8 @@ def compute_process( self._index.remove("age_range") if condition_types is None and "condition_type" in self._index: self._index.remove("condition_type") + if not drg_sources and "drg_source" in self._index: + self._index.remove("drg_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 0075b41b..08f092b5 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -38,10 +38,10 @@ def compute_completeness_predictor_per_visit( specialties_sets: Union[str, Dict[str, str]], length_of_stays: List[float], age_ranges: List[int], - condition_types: Union[str, Dict[str, str]], - provenance_sources: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - drg_sources: Union[str, Dict[str, str]], + condition_types: Union[bool, str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + drg_sources: Union[bool, str, Dict[str, str]], **kwargs ): r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] diff --git a/edsteva/probes/visit/visit.py b/edsteva/probes/visit/visit.py index 03ccdffb..bbc777d6 100644 --- a/edsteva/probes/visit/visit.py +++ b/edsteva/probes/visit/visit.py @@ -74,9 +74,9 @@ def compute_process( stay_types: Union[bool, str, Dict[str, str]] = True, stay_sources: Union[bool, str, Dict[str, str]] = None, length_of_stays: List[float] = None, - condition_types: Union[str, Dict[str, str]] = None, + condition_types: Union[bool, str, Dict[str, str]] = None, provenance_sources: Union[bool, str, Dict[str, str]] = None, - drg_sources: Union[str, Dict[str, str]] = {"All": ".*"}, + drg_sources: Union[bool, str, Dict[str, str]] = None, age_ranges: List[int] = None, **kwargs, ): @@ -114,9 +114,9 @@ def compute_process( **EXAMPLE**: `{"All": ".*"}, {"urgence" : "service d'urgence"}` age_ranges: List[int], optional **EXAMPLE**: `[18, 64]` - condition_types : Union[str, Dict[str, str]], optional + condition_types : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"Pulmonary_infection": "J22|J15|J13|J958|..."}` - drg_sources : Union[str, Dict[str, str]], optional + drg_sources : Union[bool, str, Dict[str, str]], optional **EXAMPLE**: `{"All": ".*"}, {"medical" : ".{2}M"}` """ if not care_site_levels and "care_site_level" in self._index: @@ -139,6 +139,8 @@ def compute_process( self._index.remove("age_range") if condition_types is None and "condition_type" in self._index: self._index.remove("condition_type") + if not drg_sources and "drg_source" in self._index: + self._index.remove("drg_source") return completeness_predictors.get(self._completeness_predictor)( self, data=data, From a2b85eab29abe20099531bf7166d21ceb5fdd5ab Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Fri, 8 Sep 2023 16:23:18 +0200 Subject: [PATCH 097/127] cost / person not computed if no need --- .../per_measurement.py | 5 ++-- .../completeness_predictors/per_visit.py | 5 ++-- .../completeness_predictors/per_condition.py | 7 ++---- .../completeness_predictors/per_visit.py | 7 ++---- .../note/completeness_predictors/per_note.py | 5 ++-- .../note/completeness_predictors/per_visit.py | 5 ++-- edsteva/probes/utils/prepare_df.py | 23 +++++++++---------- .../completeness_predictors/per_visit.py | 5 ++-- 8 files changed, 25 insertions(+), 37 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index e169faef..493a4bf9 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -79,8 +79,8 @@ def compute_completeness_predictor_per_measurement( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None measurement = prepare_measurement( data=data, @@ -104,7 +104,6 @@ def compute_completeness_predictor_per_measurement( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) if condition_types: conditions = prepare_condition_occurrence( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 212812fd..9faf2512 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -80,8 +80,8 @@ def compute_completeness_predictor_per_visit( self.biology_relationship = biology_relationship root_terminology = mapping[0][0] - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None visit_occurrence = prepare_visit_occurrence( data=data, @@ -93,7 +93,6 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges, ) if condition_types: diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index 429f2211..e8828923 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -61,10 +61,8 @@ def compute_completeness_predictor_per_condition( self._metrics = ["c", "n_condition"] check_tables(data=data, required_tables=["condition_occurrence"]) - person = prepare_person(data) - - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None visit_occurrence = prepare_visit_occurrence( data=data, @@ -74,7 +72,6 @@ def compute_completeness_predictor_per_condition( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges, ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index 117d8073..af84a2fb 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -61,10 +61,8 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit", "n_visit_with_condition"] check_tables(data=data, required_tables=["condition_occurrence"]) - person = prepare_person(data) - - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None visit_occurrence = prepare_visit_occurrence( data=data, @@ -76,7 +74,6 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges, ) condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 04ffc91b..91ae44ca 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -68,8 +68,8 @@ def compute_completeness_predictor_per_note( note_types=note_types, ) - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None visit_occurrence = prepare_visit_occurrence( data=data, @@ -79,7 +79,6 @@ def compute_completeness_predictor_per_note( provenance_sources=provenance_sources, cost=cost, person=person, - age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) if condition_types: diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 5a9b4c2b..0ac8a9e7 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -63,8 +63,8 @@ def compute_completeness_predictor_per_visit( self._metrics = ["c", "n_visit", "n_visit_with_note"] check_tables(data=data, required_tables=["note"]) - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None visit_occurrence = prepare_visit_occurrence( data=data, @@ -76,7 +76,6 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges, ) if condition_types: diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index eba5265b..477c81f9 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -25,7 +25,6 @@ def prepare_visit_occurrence( provenance_sources: Union[str, Dict[str, str]], cost: DataFrame, length_of_stays: List[float], - age_ranges: List[int] = None, start_date: datetime = None, end_date: datetime = None, person: DataFrame = None, @@ -78,16 +77,16 @@ def prepare_visit_occurrence( visit_occurrence = filter_table_by_length_of_stay( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays ) - - cost = cost[["cost_event_id", "drg_source"]] - visit_occurrence = visit_occurrence.merge( - cost, left_on="visit_occurrence_id", right_on="cost_event_id" - ) - visit_occurrence = visit_occurrence.drop_duplicates("visit_occurrence_id") - - visit_occurrence = visit_occurrence.rename( - columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} - ) + + if cost: + cost = cost[["cost_event_id", "drg_source"]] + visit_occurrence = visit_occurrence.merge( + cost, left_on="visit_occurrence_id", right_on="cost_event_id" + ) + visit_occurrence = visit_occurrence.drop_duplicates("visit_occurrence_id") + visit_occurrence = visit_occurrence.rename( + columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} + ) visit_occurrence = filter_table_by_date( table=visit_occurrence, @@ -105,7 +104,7 @@ def prepare_visit_occurrence( target_col="stay_type", ) - if age_ranges: + if person: visit_occurrence = visit_occurrence.merge(person, on="person_id") visit_occurrence = filter_table_by_age( visit_occurrence=visit_occurrence, diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 08f092b5..dae91387 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -56,8 +56,8 @@ def compute_completeness_predictor_per_visit( """ self._metrics = ["c", "n_visit"] - person = prepare_person(data) - cost = prepare_cost(data, drg_sources) + person = prepare_person(data) if age_ranges else None + cost = prepare_cost(data, drg_sources) if drg_sources else None visit_occurrence = prepare_visit_occurrence( data=data, @@ -69,7 +69,6 @@ def compute_completeness_predictor_per_visit( provenance_sources=provenance_sources, cost=cost, person=person, - age_ranges=age_ranges, ) if condition_types: From 5bec33afc7d516af0d8005aaec68c96cb22d7c6a Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Fri, 8 Sep 2023 16:25:20 +0200 Subject: [PATCH 098/127] poetry.lock --- poetry.lock | 3571 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3571 insertions(+) create mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..5c668e52 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3571 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "aiofiles" +version = "22.1.0" +description = "File support for asyncio." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, + {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, +] + +[[package]] +name = "aiosqlite" +version = "0.19.0" +description = "asyncio bridge to the standard sqlite3 module" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, + {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] +docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] + +[[package]] +name = "altair" +version = "5.0.1" +description = "Vega-Altair: A declarative statistical visualization library for Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, + {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +jinja2 = "*" +jsonschema = ">=3.0" +numpy = "*" +pandas = ">=0.18" +toolz = "*" +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] +doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] + +[[package]] +name = "anyio" +version = "3.7.1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[package]] +name = "argon2-cffi" +version = "21.3.0" +description = "The secure Argon2 password hashing algorithm." +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] +docs = ["furo", "sphinx", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bleach" +version = "6.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +optional = false +python-versions = "*" +files = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] + +[[package]] +name = "catalogue" +version = "2.0.9" +description = "Super lightweight function registries for your library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "catalogue-2.0.9-py3-none-any.whl", hash = "sha256:5817ce97de17ace366a15eadd4987ac022b28f262006147549cdb3467265dc4d"}, + {file = "catalogue-2.0.9.tar.gz", hash = "sha256:d204c423ec436f2545341ec8a0e026ae033b3ce5911644f95e94d6b887cf631c"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.2.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] + +[[package]] +name = "click" +version = "8.1.6" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.2.7" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "debugpy" +version = "1.6.8" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.8-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:8c1f5a3286fb633f691c594649e9d2e8e30292c9eaf49e38d7da525151b33a83"}, + {file = "debugpy-1.6.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406b3a6cb7548d73260f69a511178ec9196779cafda68e563488c6f94cc88670"}, + {file = "debugpy-1.6.8-cp310-cp310-win32.whl", hash = "sha256:6830947f68b41cd6abe20941ec3303a8452c40ff5fe3637c6efe233e395ecebc"}, + {file = "debugpy-1.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:1fe3baa28f5a14d8d2a60dded9ea088e27b33f1854ae9a0a1faa1ba03a8b7e47"}, + {file = "debugpy-1.6.8-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:5502e14de6b7241ecf7c4fa4ec6dd61d0824da7a09020c7ffe7be4cd09d36f24"}, + {file = "debugpy-1.6.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4a7193cec3f1e188963f6e8699e1187f758a0a4bbce511b3ad40caf618fc888"}, + {file = "debugpy-1.6.8-cp37-cp37m-win32.whl", hash = "sha256:591aac0e69bc75102d9f9294f1228e5d9ff9aa17b8c88e48b1bbb3dab8a54dcc"}, + {file = "debugpy-1.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:bb27b8e08f8e60705de6cf05b5da4c21e5a0bc2ca73f06fc36646f456df18ff5"}, + {file = "debugpy-1.6.8-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:6ca1c92e30e2aaeca156d5bd76e1587c23e332474a7b12e1900dd632b31ce05e"}, + {file = "debugpy-1.6.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:959f9b8181a4c544b067daff8d881cd3ac4c7aec1a3a4f41f81c529795b3d864"}, + {file = "debugpy-1.6.8-cp38-cp38-win32.whl", hash = "sha256:4172383b961a2334d29168c7f7b24f2f99d29291a945016986c78a5683fba915"}, + {file = "debugpy-1.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:05d1b288167ce3bfc8e1912ebed036207a27b9569ae4476f18287902501689c6"}, + {file = "debugpy-1.6.8-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:95f7ce92450b72abcf0c479539a7d00c20e68f1f1fb447eef0b08d2a635d96d7"}, + {file = "debugpy-1.6.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f16bb157b6018ce6a23b64653a6b1892f046cc2b0576df1794c6b22f9fd82118"}, + {file = "debugpy-1.6.8-cp39-cp39-win32.whl", hash = "sha256:f7a80c50b89d8fb49c9e5b6ee28c0bfb822fbd33fef0f2f9843724d0d1984e4e"}, + {file = "debugpy-1.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:2345beced3e79fd8ac4158e839a1604d5cccd19beb45561a1ffe2e5b33465f28"}, + {file = "debugpy-1.6.8-py2.py3-none-any.whl", hash = "sha256:1ca76d3ebb0e6368e107cf2e005e848d3c7705a5b513fdf65470a6f4e49a2de7"}, + {file = "debugpy-1.6.8.zip", hash = "sha256:3b7091d908dec70022b8966c32b1e9eaf183ff05291edf1d147fee153f4cb9f8"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +optional = false +python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastjsonschema" +version = "2.18.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[package.dependencies] +cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.32" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, + {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} + +[[package]] +name = "griffe" +version = "0.30.1" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.7" +files = [ + {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, + {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, +] + +[package.dependencies] +cached-property = {version = "*", markers = "python_version < \"3.8\""} +colorama = ">=0.4" + +[[package]] +name = "identify" +version = "2.5.24" +description = "File identification library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.7.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "importlib-resources" +version = "5.12.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipykernel" +version = "6.16.2" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, + {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +debugpy = ">=1.0" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=17" +tornado = ">=6.1" +traitlets = ">=5.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, + {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +optional = false +python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.19.0" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.17.3" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] + +[package.dependencies] +attrs = ">=17.4.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jupyter-client" +version = "7.4.9" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, + {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, +] + +[package.dependencies] +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = "*" + +[package.extras] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "4.12.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, + {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, +] + +[package.dependencies] +pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = "*" + +[package.extras] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.6.3" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, + {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, +] + +[package.dependencies] +jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] + +[[package]] +name = "jupyter-server" +version = "1.24.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, + {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, +] + +[package.dependencies] +anyio = ">=3.1.0,<4" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbconvert = ">=6.4.4" +nbformat = ">=5.2.0" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=17" +Send2Trash = "*" +terminado = ">=0.8.3" +tornado = ">=6.1.0" +traitlets = ">=5.1" +websocket-client = "*" + +[package.extras] +test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "jupyter-server-fileid" +version = "0.9.0" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, + {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, +] + +[package.dependencies] +jupyter-events = ">=0.5.0" +jupyter-server = ">=1.15,<3" + +[package.extras] +cli = ["click"] +test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] + +[[package]] +name = "jupyter-server-ydoc" +version = "0.8.0" +description = "A Jupyter Server Extension Providing Y Documents." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, + {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, +] + +[package.dependencies] +jupyter-server-fileid = ">=0.6.0,<1" +jupyter-ydoc = ">=0.2.0,<0.4.0" +ypy-websocket = ">=0.8.2,<0.9.0" + +[package.extras] +test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] + +[[package]] +name = "jupyter-ydoc" +version = "0.2.5" +description = "Document structures for collaborative editing using Ypy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, + {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +y-py = ">=0.6.0,<0.7.0" + +[package.extras] +dev = ["click", "jupyter-releaser"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] + +[[package]] +name = "jupyterlab" +version = "3.6.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, +] + +[package.dependencies] +ipython = "*" +jinja2 = ">=2.1" +jupyter-core = "*" +jupyter-server = ">=1.16.0,<3" +jupyter-server-ydoc = ">=0.8.0,<0.9.0" +jupyter-ydoc = ">=0.2.4,<0.3.0" +jupyterlab-server = ">=2.19,<3.0" +nbclassic = "*" +notebook = "<7" +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.1.0" + +[package.extras] +test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] + +[[package]] +name = "jupyterlab-rise" +version = "0.2.0" +description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_rise-0.2.0-py3-none-any.whl", hash = "sha256:0c320e090cd5dad7346ab3f80975bcd0c44b98b5add0434435ea737c92258c16"}, + {file = "jupyterlab_rise-0.2.0.tar.gz", hash = "sha256:4300b3a5a4e2e7f7bd7e43ddfe8eb4ae4ccc6c0aeb64bae38ab82db93c243ede"}, +] + +[package.dependencies] +jupyterlab = ">=3.0.0,<4" + +[package.extras] +test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync"] + +[[package]] +name = "jupyterlab-server" +version = "2.24.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "koalas" +version = "1.8.2" +description = "Koalas: pandas API on Apache Spark" +optional = false +python-versions = ">=3.5,<3.10" +files = [ + {file = "koalas-1.8.2-py3-none-any.whl", hash = "sha256:ebf00963ac604ee8763ab53ebb028bea3c7732a20cb10f4e52c9ae6a008a749f"}, + {file = "koalas-1.8.2.tar.gz", hash = "sha256:cd072f1a9ae97e87e85e53a1c8a3097777c76f45504e79782d0acff5282fe586"}, +] + +[package.dependencies] +numpy = ">=1.14" +pandas = ">=0.23.2" +pyarrow = ">=0.10" + +[package.extras] +matplotlib = ["matplotlib (>=3.0.0,<3.3.0)"] +mlflow = ["mlflow (>=1.0)"] +plotly = ["plotly (>=4.8)"] +spark = ["pyspark (>=2.4.0)"] + +[[package]] +name = "latexcodec" +version = "2.0.1" +description = "A lexer and codec to work with LaTeX code in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, + {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, +] + +[package.dependencies] +six = ">=1.4.1" + +[[package]] +name = "loguru" +version = "0.7.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, + {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] + +[[package]] +name = "markdown" +version = "3.3.7" +description = "Python implementation of Markdown." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, + {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mike" +version = "1.1.2" +description = "Manage multiple versions of your MkDocs-powered documentation" +optional = false +python-versions = "*" +files = [ + {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, + {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, +] + +[package.dependencies] +jinja2 = "*" +mkdocs = ">=1.0" +pyyaml = ">=5.1" +verspec = "*" + +[package.extras] +dev = ["coverage", "flake8 (>=3.0)", "shtab"] +test = ["coverage", "flake8 (>=3.0)", "shtab"] + +[[package]] +name = "mistune" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, +] + +[[package]] +name = "mkdocs" +version = "1.4.3" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, + {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1,<3.4" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-bibtex" +version = "2.11.0" +description = "An MkDocs plugin that enables managing citations with BibTex" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, +] + +[package.dependencies] +mkdocs = ">=1" +pybtex = ">=0.22" +pypandoc = ">=1.5" +requests = ">=2.8.1" +validators = ">=0.19.0" + +[[package]] +name = "mkdocs-charts-plugin" +version = "0.0.9" +description = "MkDocs plugin to add charts from data" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-charts-plugin-0.0.9.tar.gz", hash = "sha256:ffe6852b57e8c567bed36e3b476e8c447af5f74d89d4a9b182d8807088bd6b0c"}, + {file = "mkdocs_charts_plugin-0.0.9-py3-none-any.whl", hash = "sha256:9155f8c9b257dcb6cbc945d4932c8bb65f72cce6f6abcfaac7e32e1bca02e05b"}, +] + +[package.dependencies] +mkdocs = ">=1.1" +pymdown-extensions = ">=9.2" + +[[package]] +name = "mkdocs-gen-files" +version = "0.3.5" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "mkdocs-gen-files-0.3.5.tar.gz", hash = "sha256:d90d9e1676531a0bb96b1287dc28aa41162986de4dc3c00400214724761ff6ef"}, + {file = "mkdocs_gen_files-0.3.5-py3-none-any.whl", hash = "sha256:69562fddc662482e8f54a00a8b4ede5166ad5384ae4dbb0469f1f338ef3285ca"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3,<2.0.0" + +[[package]] +name = "mkdocs-img2fig-plugin" +version = "0.9.3" +description = "A MkDocs plugin that converts markdown encoded images into
elements." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mkdocs-img2fig-plugin-0.9.3.tar.gz", hash = "sha256:61399d71bb85525d74b1b9435dc6cea747c1af4eff1eb766b98b5605bb78fe4f"}, +] + +[package.dependencies] +mkdocs = "*" + +[[package]] +name = "mkdocs-literate-nav" +version = "0.4.1" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "mkdocs-literate-nav-0.4.1.tar.gz", hash = "sha256:9efe26b662f2f901cae5807bfd51446d30ea7e033c2bc43a15d6282c7dfac1ab"}, + {file = "mkdocs_literate_nav-0.4.1-py3-none-any.whl", hash = "sha256:a4b761792ba21defbe2dfd5e0de6ba451639e1ca0f0661c37eda83cc6261e4f9"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3,<2.0.0" + +[[package]] +name = "mkdocs-markdown-filter" +version = "0.1.1" +description = "A MkDocs plugin to add a markdown filter to jinja templates." +optional = false +python-versions = ">=2.7" +files = [ + {file = "mkdocs-markdown-filter-0.1.1.tar.gz", hash = "sha256:f8c0688cda5bb956ec9c68dfe779ff50454c13dc704f62bae264e9e45ab8f878"}, + {file = "mkdocs_markdown_filter-0.1.1-py2-none-any.whl", hash = "sha256:e9991c40beb89a9fd160d92ab4a15863761dc31706c0b151adf62aa863676e2e"}, +] + +[package.dependencies] +mkdocs = ">=1.0.4" + +[[package]] +name = "mkdocs-material" +version = "9.1.20" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material-9.1.20-py3-none-any.whl", hash = "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc"}, + {file = "mkdocs_material-9.1.20.tar.gz", hash = "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7"}, +] + +[package.dependencies] +colorama = ">=0.4" +jinja2 = ">=3.0" +markdown = ">=3.2" +mkdocs = ">=1.4.2" +mkdocs-material-extensions = ">=1.1" +pygments = ">=2.14" +pymdown-extensions = ">=9.9.1" +regex = ">=2022.4.24" +requests = ">=2.26" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.1.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, + {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, +] + +[[package]] +name = "mkdocs-section-index" +version = "0.3.4" +description = "MkDocs plugin to allow clickable sections that lead to an index page" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "mkdocs-section-index-0.3.4.tar.gz", hash = "sha256:050151bfe7c0e374f197335e0ecb19c45b53dbafc0f817aa203f0cc24bcf7d10"}, + {file = "mkdocs_section_index-0.3.4-py3-none-any.whl", hash = "sha256:214f7a6df9d35a5772e9577f3899ff3edd90044064589e6dd4d84615b72a8024"}, +] + +[package.dependencies] +mkdocs = ">=1.1,<2.0" + +[[package]] +name = "mkdocstrings" +version = "0.19.0" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, + {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, +] + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.8.2" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-python-0.8.2.tar.gz", hash = "sha256:b22528b7a7a0589d007eced019d97ad14de4eba4b2b9ba6a013bb66edc74ab43"}, + {file = "mkdocstrings_python-0.8.2-py3-none-any.whl", hash = "sha256:213d9592e66e084a9bd2fa4956d6294a3487c6dc9cc45164058d6317249b7b6e"}, +] + +[package.dependencies] +griffe = ">=0.24" +mkdocstrings = ">=0.19" + +[[package]] +name = "mknotebooks" +version = "0.7.1" +description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." +optional = false +python-versions = "*" +files = [ + {file = "mknotebooks-0.7.1-py3-none-any.whl", hash = "sha256:e2fa000b706683fc56b93adada7190a0da22ad85c4f1bfd5c4468cc3552b78e5"}, +] + +[package.dependencies] +gitpython = "*" +jupyter-client = "*" +markdown = ">=3.3.3" +mkdocs = ">=1.1" +nbconvert = ">=6.0.0" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nbclassic" +version = "1.0.0" +description = "Jupyter Notebook as a Jupyter Server extension." +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.1" +jupyter-server = ">=1.8" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +notebook-shim = ">=0.2.3" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] + +[[package]] +name = "nbclient" +version = "0.7.4" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, + {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.3" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.6.0" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, + {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["pyppeteer (>=1,<1.1)"] + +[[package]] +name = "nbformat" +version = "5.8.0" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, + {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, +] + +[package.dependencies] +fastjsonschema = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.5.7" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "notebook" +version = "6.5.4" +description = "A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbclassic = ">=0.4.7" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.19.5" +description = "NumPy is the fundamental package for array computing with Python." +optional = false +python-versions = ">=3.6" +files = [ + {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, + {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, + {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, + {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, + {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, + {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, + {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, + {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, + {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, + {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, + {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, + {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, + {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, + {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, +] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pandas" +version = "1.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, + {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, + {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, + {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, + {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, + {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, + {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, + {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, + {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, + {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, + {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, +] + +[package.dependencies] +numpy = ">=1.17.3" +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pandas" +version = "1.3.5" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, + {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, + {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, + {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, + {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, + {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, + {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, + {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, + {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, + {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, + {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, + {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, +] +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pgpasslib" +version = "1.1.0" +description = "Library for getting passwords from PostgreSQL password files" +optional = false +python-versions = "*" +files = [ + {file = "pgpasslib-1.1.0-py2.py3-none-any.whl", hash = "sha256:290084d524d07b8414d3457545c14ba7761cdcdc86350e9c9efbcb58210b77fc"}, + {file = "pgpasslib-1.1.0.tar.gz", hash = "sha256:f523050cb466f43526b2f4877bf2b1a1f09dfd7c7310e1e836c773f48bc10d27"}, +] + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] + +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prometheus-client" +version = "0.17.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.39" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.5" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "psycopg2-binary" +version = "2.9.6" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "py4j" +version = "0.10.7" +description = "Enables Python programs to dynamically access arbitrary Java objects" +optional = false +python-versions = "*" +files = [ + {file = "py4j-0.10.7-py2.py3-none-any.whl", hash = "sha256:a950fe7de1bfd247a0a4dddb9118f332d22a89e01e0699135ea8038c15ee1293"}, + {file = "py4j-0.10.7.zip", hash = "sha256:721189616b3a7d28212dfb2e7c6a1dd5147b03105f1fc37ff2432acd0e863fa5"}, +] + +[[package]] +name = "pyarrow" +version = "8.0.0" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, + {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, + {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, + {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, + {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, + {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, +] + +[package.dependencies] +numpy = ">=1.16.6" + +[[package]] +name = "pybtex" +version = "0.24.0" +description = "A BibTeX-compatible bibliography processor in Python" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +files = [ + {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, + {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, +] + +[package.dependencies] +latexcodec = ">=1.0.4" +PyYAML = ">=3.01" +six = "*" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pygments" +version = "2.15.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pylic" +version = "3.5.0" +description = "A Python license checker" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pylic-3.5.0-py3-none-any.whl", hash = "sha256:f4ca7f9d1fe2c5be7601ba2b8388294aad323161d2c62253ea0d53b9ac9b42f4"}, + {file = "pylic-3.5.0.tar.gz", hash = "sha256:78a11f86425ec03d1b2a806b5359bf92ff1239e710a1b302f89aa05c0906a535"}, +] + +[package.dependencies] +importlib-metadata = ">=6.0.0,<7.0.0" +toml = ">=0.10.2,<0.11.0" + +[[package]] +name = "pymdown-extensions" +version = "10.1" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pymdown_extensions-10.1-py3-none-any.whl", hash = "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc"}, + {file = "pymdown_extensions-10.1.tar.gz", hash = "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195"}, +] + +[package.dependencies] +markdown = ">=3.2" +pyyaml = "*" + +[[package]] +name = "pypandoc" +version = "1.7.5" +description = "Thin wrapper for pandoc." +optional = false +python-versions = "^2.7 || ^3.6" +files = [ + {file = "pypandoc-1.7.5.tar.gz", hash = "sha256:802c26aae17b64136c6d006949d8ce183a7d4d9fbd4f2d051e66f4fb9f45ca50"}, +] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, +] + +[[package]] +name = "pyspark" +version = "2.4.8" +description = "Apache Spark Python API" +optional = false +python-versions = "*" +files = [ + {file = "pyspark-2.4.8.tar.gz", hash = "sha256:3a19b71b8dc8dd91ebc943604a05e1ab01bce052456d42937035632d852d78dc"}, +] + +[package.dependencies] +py4j = "0.10.7" + +[package.extras] +ml = ["numpy (>=1.7)"] +mllib = ["numpy (>=1.7)"] +sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] + +[[package]] +name = "pytest" +version = "7.4.0" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "3.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-html" +version = "3.2.0" +description = "pytest plugin for generating HTML reports" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, + {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, +] + +[package.dependencies] +py = ">=1.8.2" +pytest = ">=5.0,<6.0.0 || >6.0.0" +pytest-metadata = "*" + +[[package]] +name = "pytest-metadata" +version = "3.0.0" +description = "pytest plugin for test session metadata" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, + {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.10" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, + {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, + {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, + {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, + {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, + {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "pyzmq" +version = "25.1.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "regex" +version = "2023.6.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.6" +files = [ + {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, + {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, + {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, + {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, + {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, + {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, + {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, + {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, + {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, + {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, + {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, + {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, + {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, + {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, + {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, + {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "ruff" +version = "0.0.275" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.275-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5e6554a072e7ce81eb6f0bec1cebd3dcb0e358652c0f4900d7d630d61691e914"}, + {file = "ruff-0.0.275-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1cc599022fe5ffb143a965b8d659eb64161ab8ab4433d208777eab018a1aab67"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5206fc1cd8c1c1deadd2e6360c0dbcd690f1c845da588ca9d32e4a764a402c60"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c4e6468da26f77b90cae35319d310999f471a8c352998e9b39937a23750149e"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbdea02942131dbc15dd45f431d152224f15e1dd1859fcd0c0487b658f60f1a"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22efd9f41af27ef8fb9779462c46c35c89134d33e326c889971e10b2eaf50c63"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c09662112cfa22d7467a19252a546291fd0eae4f423e52b75a7a2000a1894db"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80043726662144876a381efaab88841c88e8df8baa69559f96b22d4fa216bef1"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5859ee543b01b7eb67835dfd505faa8bb7cc1550f0295c92c1401b45b42be399"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8ace4d40a57b5ea3c16555f25a6b16bc5d8b2779ae1912ce2633543d4e9b1da"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8347fc16aa185aae275906c4ac5b770e00c896b6a0acd5ba521f158801911998"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ec43658c64bfda44fd84bbea9da8c7a3b34f65448192d1c4dd63e9f4e7abfdd4"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:508b13f7ca37274cceaba4fb3ea5da6ca192356323d92acf39462337c33ad14e"}, + {file = "ruff-0.0.275-py3-none-win32.whl", hash = "sha256:6afb1c4422f24f361e877937e2a44b3f8176774a476f5e33845ebfe887dd5ec2"}, + {file = "ruff-0.0.275-py3-none-win_amd64.whl", hash = "sha256:d9b264d78621bf7b698b6755d4913ab52c19bd28bee1a16001f954d64c1a1220"}, + {file = "ruff-0.0.275-py3-none-win_arm64.whl", hash = "sha256:a19ce3bea71023eee5f0f089dde4a4272d088d5ac0b675867e074983238ccc65"}, + {file = "ruff-0.0.275.tar.gz", hash = "sha256:a63a0b645da699ae5c758fce19188e901b3033ec54d862d93fcd042addf7f38d"}, +] + +[[package]] +name = "send2trash" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "68.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "soupsieve" +version = "2.4.1" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, +] + +[[package]] +name = "terminado" +version = "0.17.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] + +[[package]] +name = "termynal" +version = "0.2.0" +description = "" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "termynal-0.2.0-py3-none-any.whl", hash = "sha256:1d8f73c9c21414253e812f1684431cf7eda5d9f4539aa7479e055b5cac33873f"}, + {file = "termynal-0.2.0.tar.gz", hash = "sha256:b83642fff7a5b93bb08aa3655754e0410f124f2e75cd34ce1b161a90fc621f8e"}, +] + +[package.dependencies] +markdown = "*" + +[package.extras] +mkdocs = ["mkdocs"] + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.5" +files = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] + +[[package]] +name = "tornado" +version = "6.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.7" +files = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] + +[[package]] +name = "tqdm" +version = "4.65.0" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, + {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.7" +files = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + +[[package]] +name = "typed-ast" +version = "1.5.5" +description = "a fork of Python 2 and 3 ast modules with type comment support" +optional = false +python-versions = ">=3.6" +files = [ + {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, + {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, + {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, + {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, + {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, + {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, + {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, + {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, + {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, + {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.0.4" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "validators" +version = "0.20.0" +description = "Python Data Validation for Humans™." +optional = false +python-versions = ">=3.4" +files = [ + {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, +] + +[package.dependencies] +decorator = ">=3.4.0" + +[package.extras] +test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] + +[[package]] +name = "verspec" +version = "0.1.0" +description = "Flexible version handling" +optional = false +python-versions = "*" +files = [ + {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, + {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, +] + +[package.extras] +test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] + +[[package]] +name = "virtualenv" +version = "20.24.2" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, + {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} +platformdirs = ">=3.9.1,<4" + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.1" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, +] + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "y-py" +version = "0.6.0" +description = "Python bindings for the Y-CRDT built from yrs (Rust)" +optional = false +python-versions = "*" +files = [ + {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, + {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, + {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, + {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, + {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, + {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, + {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, + {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, + {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, + {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, + {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, + {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, + {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, +] + +[[package]] +name = "ypy-websocket" +version = "0.8.4" +description = "WebSocket connector for Ypy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, + {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, +] + +[package.dependencies] +aiofiles = ">=22.1.0,<23" +aiosqlite = ">=0.17.0,<1" +y-py = ">=0.6.0,<0.7.0" + +[package.extras] +test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "~3.7.1" +content-hash = "7296cb655e45865fd5b477dba20918937ec064909a2ed58b4915fe6dd7137094" From e517f4228d6960c59804a905357baf15a03a8bdb Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Fri, 8 Sep 2023 16:50:28 +0200 Subject: [PATCH 099/127] fix --- edsteva/probes/note/note.py | 2 ++ edsteva/probes/visit/completeness_predictors/per_visit.py | 3 +++ 2 files changed, 5 insertions(+) diff --git a/edsteva/probes/note/note.py b/edsteva/probes/note/note.py index a933665e..874b9614 100644 --- a/edsteva/probes/note/note.py +++ b/edsteva/probes/note/note.py @@ -154,6 +154,8 @@ def compute_process( self._index.remove("condition_type") if not drg_sources and "drg_source" in self._index: self._index.remove("drg_source") + if not condition_types and "condition_type" in self._index: + self._index.remove("condition_type") return completeness_predictors.get(self._completeness_predictor)( self, data=data, diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index dae91387..df10e938 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -227,6 +227,7 @@ def get_uf_visit( "provenance_source", "age_range", "drg_source", + "condition_type" ] ) ) @@ -259,6 +260,7 @@ def get_uc_visit( "provenance_source", "age_range", "drg_source", + "condition_type" ] ) ) @@ -291,6 +293,7 @@ def get_uh_visit( "provenance_source", "age_range", "drg_source", + "condition_type" ] ) ) From 43facdc5c7109194f055ec582b1b9a818a6a5e6d Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 14:59:35 +0000 Subject: [PATCH 100/127] add age_ranges --- edsteva/probes/utils/prepare_df.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 477c81f9..f7d651fc 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -28,6 +28,7 @@ def prepare_visit_occurrence( start_date: datetime = None, end_date: datetime = None, person: DataFrame = None, + age_ranges: List[int] = None, ): required_columns = [ "visit_occurrence_id", @@ -77,16 +78,14 @@ def prepare_visit_occurrence( visit_occurrence = filter_table_by_length_of_stay( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays ) - + if cost: - cost = cost[["cost_event_id", "drg_source"]] - visit_occurrence = visit_occurrence.merge( - cost, left_on="visit_occurrence_id", right_on="cost_event_id" - ) - visit_occurrence = visit_occurrence.drop_duplicates("visit_occurrence_id") - visit_occurrence = visit_occurrence.rename( - columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} - ) + cost = cost[["visit_occurrence_id", "drg_source"]] + visit_occurrence = visit_occurrence.merge(cost, on="visit_occurrence_id") + + visit_occurrence = visit_occurrence.rename( + columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} + ) visit_occurrence = filter_table_by_date( table=visit_occurrence, @@ -104,7 +103,7 @@ def prepare_visit_occurrence( target_col="stay_type", ) - if person: + if age_ranges: visit_occurrence = visit_occurrence.merge(person, on="person_id") visit_occurrence = filter_table_by_age( visit_occurrence=visit_occurrence, @@ -726,7 +725,12 @@ def prepare_cost(data: Data, drg_source): required_columns=cost_columns, df_name="cost", ) - cost = data.cost[["cost_event_id", "drg_source_value"]].rename(columns={"cost_event_id": "visit_occurrence_id"}.drop_duplicates() + cost = ( + data.cost[["cost_event_id", "drg_source_value"]] + .rename(columns={"cost_event_id": "visit_occurrence_id"}) + .drop_duplicates() + ) + return filter_table_by_type( table=cost, table_name="cost", From 838ac24d7a90b8c727c0b153df684b2ed1c9892a Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Fri, 8 Sep 2023 17:02:13 +0200 Subject: [PATCH 101/127] adding age ranges --- .../probes/biology/completeness_predictors/per_measurement.py | 1 + edsteva/probes/biology/completeness_predictors/per_visit.py | 1 + .../probes/condition/completeness_predictors/per_condition.py | 1 + edsteva/probes/condition/completeness_predictors/per_visit.py | 1 + edsteva/probes/note/completeness_predictors/per_note.py | 1 + edsteva/probes/note/completeness_predictors/per_visit.py | 1 + edsteva/probes/visit/completeness_predictors/per_visit.py | 1 + 7 files changed, 7 insertions(+) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 493a4bf9..4bd66f4d 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -104,6 +104,7 @@ def compute_completeness_predictor_per_measurement( stay_sources=stay_sources, cost=cost, person=person, + age_ranges=age_ranges ).drop(columns=["visit_occurrence_source_value", "date"]) if condition_types: conditions = prepare_condition_occurrence( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 9faf2512..c977ff37 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -93,6 +93,7 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, + age_ranges=age_ranges ) if condition_types: diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index e8828923..fcbbfcd1 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -72,6 +72,7 @@ def compute_completeness_predictor_per_condition( stay_sources=stay_sources, cost=cost, person=person, + age_ranges=age_ranges ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index af84a2fb..c78627fc 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -74,6 +74,7 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, + age_ranges=age_ranges ) condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 91ae44ca..2cc71161 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -79,6 +79,7 @@ def compute_completeness_predictor_per_note( provenance_sources=provenance_sources, cost=cost, person=person, + age_ranges=age_ranges ).drop(columns=["visit_occurrence_source_value", "date"]) if condition_types: diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 0ac8a9e7..6e7dd40f 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -76,6 +76,7 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, + age_ranges=age_ranges ) if condition_types: diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index df10e938..22060232 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -69,6 +69,7 @@ def compute_completeness_predictor_per_visit( provenance_sources=provenance_sources, cost=cost, person=person, + age_ranges=age_ranges ) if condition_types: From 1fcb4d3d95d81964c483329891030e8c218dffef Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 15:03:45 +0000 Subject: [PATCH 102/127] precommit --- .../biology/completeness_predictors/per_measurement.py | 2 +- .../probes/biology/completeness_predictors/per_visit.py | 2 +- .../condition/completeness_predictors/per_condition.py | 2 +- .../probes/condition/completeness_predictors/per_visit.py | 2 +- edsteva/probes/note/completeness_predictors/per_note.py | 2 +- edsteva/probes/note/completeness_predictors/per_visit.py | 2 +- edsteva/probes/visit/completeness_predictors/per_visit.py | 8 ++++---- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_measurement.py b/edsteva/probes/biology/completeness_predictors/per_measurement.py index 4bd66f4d..2521e793 100644 --- a/edsteva/probes/biology/completeness_predictors/per_measurement.py +++ b/edsteva/probes/biology/completeness_predictors/per_measurement.py @@ -104,7 +104,7 @@ def compute_completeness_predictor_per_measurement( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) if condition_types: conditions = prepare_condition_occurrence( diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index c977ff37..41d68494 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -93,7 +93,7 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ) if condition_types: diff --git a/edsteva/probes/condition/completeness_predictors/per_condition.py b/edsteva/probes/condition/completeness_predictors/per_condition.py index fcbbfcd1..530c6df0 100644 --- a/edsteva/probes/condition/completeness_predictors/per_condition.py +++ b/edsteva/probes/condition/completeness_predictors/per_condition.py @@ -72,7 +72,7 @@ def compute_completeness_predictor_per_condition( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ).drop(columns="date") condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/condition/completeness_predictors/per_visit.py b/edsteva/probes/condition/completeness_predictors/per_visit.py index c78627fc..94e8785b 100644 --- a/edsteva/probes/condition/completeness_predictors/per_visit.py +++ b/edsteva/probes/condition/completeness_predictors/per_visit.py @@ -74,7 +74,7 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ) condition_occurrence = prepare_condition_occurrence( diff --git a/edsteva/probes/note/completeness_predictors/per_note.py b/edsteva/probes/note/completeness_predictors/per_note.py index 2cc71161..9ea4cfd7 100644 --- a/edsteva/probes/note/completeness_predictors/per_note.py +++ b/edsteva/probes/note/completeness_predictors/per_note.py @@ -79,7 +79,7 @@ def compute_completeness_predictor_per_note( provenance_sources=provenance_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ).drop(columns=["visit_occurrence_source_value", "date"]) if condition_types: diff --git a/edsteva/probes/note/completeness_predictors/per_visit.py b/edsteva/probes/note/completeness_predictors/per_visit.py index 6e7dd40f..6cb3f307 100644 --- a/edsteva/probes/note/completeness_predictors/per_visit.py +++ b/edsteva/probes/note/completeness_predictors/per_visit.py @@ -76,7 +76,7 @@ def compute_completeness_predictor_per_visit( stay_sources=stay_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ) if condition_types: diff --git a/edsteva/probes/visit/completeness_predictors/per_visit.py b/edsteva/probes/visit/completeness_predictors/per_visit.py index 22060232..ddd9ed51 100644 --- a/edsteva/probes/visit/completeness_predictors/per_visit.py +++ b/edsteva/probes/visit/completeness_predictors/per_visit.py @@ -69,7 +69,7 @@ def compute_completeness_predictor_per_visit( provenance_sources=provenance_sources, cost=cost, person=person, - age_ranges=age_ranges + age_ranges=age_ranges, ) if condition_types: @@ -228,7 +228,7 @@ def get_uf_visit( "provenance_source", "age_range", "drg_source", - "condition_type" + "condition_type", ] ) ) @@ -261,7 +261,7 @@ def get_uc_visit( "provenance_source", "age_range", "drg_source", - "condition_type" + "condition_type", ] ) ) @@ -294,7 +294,7 @@ def get_uh_visit( "provenance_source", "age_range", "drg_source", - "condition_type" + "condition_type", ] ) ) From 186884e916aff3f26c127adf89597895540a462c Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 15:11:03 +0000 Subject: [PATCH 103/127] remove .lock --- poetry.lock | 3571 --------------------------------------------------- 1 file changed, 3571 deletions(-) delete mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 5c668e52..00000000 --- a/poetry.lock +++ /dev/null @@ -1,3571 +0,0 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "22.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, - {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, -] - -[[package]] -name = "aiosqlite" -version = "0.19.0" -description = "asyncio bridge to the standard sqlite3 module" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, - {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] -docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] - -[[package]] -name = "altair" -version = "5.0.1" -description = "Vega-Altair: A declarative statistical visualization library for Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, - {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -jinja2 = "*" -jsonschema = ">=3.0" -numpy = "*" -pandas = ">=0.18" -toolz = "*" -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] -doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] - -[[package]] -name = "anyio" -version = "3.7.1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] - -[[package]] -name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "babel" -version = "2.12.1" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, -] - -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - -[[package]] -name = "beautifulsoup4" -version = "4.12.2" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "23.3.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bleach" -version = "6.0.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] - -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -optional = false -python-versions = "*" -files = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] - -[[package]] -name = "catalogue" -version = "2.0.9" -description = "Super lightweight function registries for your library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "catalogue-2.0.9-py3-none-any.whl", hash = "sha256:5817ce97de17ace366a15eadd4987ac022b28f262006147549cdb3467265dc4d"}, - {file = "catalogue-2.0.9.tar.gz", hash = "sha256:d204c423ec436f2545341ec8a0e026ae033b3ce5911644f95e94d6b887cf631c"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cfgv" -version = "3.3.1" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.2.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, -] - -[[package]] -name = "click" -version = "8.1.6" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.2.7" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "debugpy" -version = "1.6.8" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "debugpy-1.6.8-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:8c1f5a3286fb633f691c594649e9d2e8e30292c9eaf49e38d7da525151b33a83"}, - {file = "debugpy-1.6.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406b3a6cb7548d73260f69a511178ec9196779cafda68e563488c6f94cc88670"}, - {file = "debugpy-1.6.8-cp310-cp310-win32.whl", hash = "sha256:6830947f68b41cd6abe20941ec3303a8452c40ff5fe3637c6efe233e395ecebc"}, - {file = "debugpy-1.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:1fe3baa28f5a14d8d2a60dded9ea088e27b33f1854ae9a0a1faa1ba03a8b7e47"}, - {file = "debugpy-1.6.8-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:5502e14de6b7241ecf7c4fa4ec6dd61d0824da7a09020c7ffe7be4cd09d36f24"}, - {file = "debugpy-1.6.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4a7193cec3f1e188963f6e8699e1187f758a0a4bbce511b3ad40caf618fc888"}, - {file = "debugpy-1.6.8-cp37-cp37m-win32.whl", hash = "sha256:591aac0e69bc75102d9f9294f1228e5d9ff9aa17b8c88e48b1bbb3dab8a54dcc"}, - {file = "debugpy-1.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:bb27b8e08f8e60705de6cf05b5da4c21e5a0bc2ca73f06fc36646f456df18ff5"}, - {file = "debugpy-1.6.8-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:6ca1c92e30e2aaeca156d5bd76e1587c23e332474a7b12e1900dd632b31ce05e"}, - {file = "debugpy-1.6.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:959f9b8181a4c544b067daff8d881cd3ac4c7aec1a3a4f41f81c529795b3d864"}, - {file = "debugpy-1.6.8-cp38-cp38-win32.whl", hash = "sha256:4172383b961a2334d29168c7f7b24f2f99d29291a945016986c78a5683fba915"}, - {file = "debugpy-1.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:05d1b288167ce3bfc8e1912ebed036207a27b9569ae4476f18287902501689c6"}, - {file = "debugpy-1.6.8-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:95f7ce92450b72abcf0c479539a7d00c20e68f1f1fb447eef0b08d2a635d96d7"}, - {file = "debugpy-1.6.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f16bb157b6018ce6a23b64653a6b1892f046cc2b0576df1794c6b22f9fd82118"}, - {file = "debugpy-1.6.8-cp39-cp39-win32.whl", hash = "sha256:f7a80c50b89d8fb49c9e5b6ee28c0bfb822fbd33fef0f2f9843724d0d1984e4e"}, - {file = "debugpy-1.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:2345beced3e79fd8ac4158e839a1604d5cccd19beb45561a1ffe2e5b33465f28"}, - {file = "debugpy-1.6.8-py2.py3-none-any.whl", hash = "sha256:1ca76d3ebb0e6368e107cf2e005e848d3c7705a5b513fdf65470a6f4e49a2de7"}, - {file = "debugpy-1.6.8.zip", hash = "sha256:3b7091d908dec70022b8966c32b1e9eaf183ff05291edf1d147fee153f4cb9f8"}, -] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "distlib" -version = "0.3.7" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, -] - -[[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -optional = false -python-versions = ">=3.6" -files = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.1.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastjsonschema" -version = "2.18.0" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - -[[package]] -name = "filelock" -version = "3.12.2" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, -] - -[package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - -[package.dependencies] -cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} - -[[package]] -name = "ghp-import" -version = "2.1.0" -description = "Copy your docs directly to the gh-pages branch." -optional = false -python-versions = "*" -files = [ - {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, - {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, -] - -[package.dependencies] -python-dateutil = ">=2.8.1" - -[package.extras] -dev = ["flake8", "markdown", "twine", "wheel"] - -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.32" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, - {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} - -[[package]] -name = "griffe" -version = "0.30.1" -description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -optional = false -python-versions = ">=3.7" -files = [ - {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, - {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, -] - -[package.dependencies] -cached-property = {version = "*", markers = "python_version < \"3.8\""} -colorama = ">=0.4" - -[[package]] -name = "identify" -version = "2.5.24" -description = "File identification library for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.7.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, - {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "5.12.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "ipykernel" -version = "6.16.2" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, - {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -debugpy = ">=1.0" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=17" -tornado = ">=6.1" -traitlets = ">=5.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] - -[[package]] -name = "ipython-genutils" -version = "0.2.0" -description = "Vestigial utilities from IPython" -optional = false -python-versions = "*" -files = [ - {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, - {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, -] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - -[[package]] -name = "jedi" -version = "0.19.0" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, -] - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jinja2" -version = "3.0.3" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "json5" -version = "0.9.14" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = "*" -files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, -] - -[package.extras] -dev = ["hypothesis"] - -[[package]] -name = "jsonpointer" -version = "2.4" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, -] - -[[package]] -name = "jsonschema" -version = "4.17.3" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] - -[package.dependencies] -attrs = ">=17.4.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} -uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jupyter-client" -version = "7.4.9" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, - {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, -] - -[package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = "*" - -[package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-core" -version = "4.12.0" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, - {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, -] - -[package.dependencies] -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = "*" - -[package.extras] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.6.3" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, -] - -[package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] - -[[package]] -name = "jupyter-server" -version = "1.24.0" -description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, - {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, -] - -[package.dependencies] -anyio = ">=3.1.0,<4" -argon2-cffi = "*" -jinja2 = "*" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbconvert = ">=6.4.4" -nbformat = ">=5.2.0" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=17" -Send2Trash = "*" -terminado = ">=0.8.3" -tornado = ">=6.1.0" -traitlets = ">=5.1" -websocket-client = "*" - -[package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] - -[[package]] -name = "jupyter-server-fileid" -version = "0.9.0" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, - {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, -] - -[package.dependencies] -jupyter-events = ">=0.5.0" -jupyter-server = ">=1.15,<3" - -[package.extras] -cli = ["click"] -test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] - -[[package]] -name = "jupyter-server-ydoc" -version = "0.8.0" -description = "A Jupyter Server Extension Providing Y Documents." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, - {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, -] - -[package.dependencies] -jupyter-server-fileid = ">=0.6.0,<1" -jupyter-ydoc = ">=0.2.0,<0.4.0" -ypy-websocket = ">=0.8.2,<0.9.0" - -[package.extras] -test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] - -[[package]] -name = "jupyter-ydoc" -version = "0.2.5" -description = "Document structures for collaborative editing using Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, - {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.6.0,<0.7.0" - -[package.extras] -dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] - -[[package]] -name = "jupyterlab" -version = "3.6.5" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, - {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, -] - -[package.dependencies] -ipython = "*" -jinja2 = ">=2.1" -jupyter-core = "*" -jupyter-server = ">=1.16.0,<3" -jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.4,<0.3.0" -jupyterlab-server = ">=2.19,<3.0" -nbclassic = "*" -notebook = "<7" -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} -tornado = ">=6.1.0" - -[package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] - -[[package]] -name = "jupyterlab-pygments" -version = "0.2.2" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, -] - -[[package]] -name = "jupyterlab-rise" -version = "0.2.0" -description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_rise-0.2.0-py3-none-any.whl", hash = "sha256:0c320e090cd5dad7346ab3f80975bcd0c44b98b5add0434435ea737c92258c16"}, - {file = "jupyterlab_rise-0.2.0.tar.gz", hash = "sha256:4300b3a5a4e2e7f7bd7e43ddfe8eb4ae4ccc6c0aeb64bae38ab82db93c243ede"}, -] - -[package.dependencies] -jupyterlab = ">=3.0.0,<4" - -[package.extras] -test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync"] - -[[package]] -name = "jupyterlab-server" -version = "2.24.0" -description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, - {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, -] - -[package.dependencies] -babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.17.3" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.28" - -[package.extras] -docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] - -[[package]] -name = "koalas" -version = "1.8.2" -description = "Koalas: pandas API on Apache Spark" -optional = false -python-versions = ">=3.5,<3.10" -files = [ - {file = "koalas-1.8.2-py3-none-any.whl", hash = "sha256:ebf00963ac604ee8763ab53ebb028bea3c7732a20cb10f4e52c9ae6a008a749f"}, - {file = "koalas-1.8.2.tar.gz", hash = "sha256:cd072f1a9ae97e87e85e53a1c8a3097777c76f45504e79782d0acff5282fe586"}, -] - -[package.dependencies] -numpy = ">=1.14" -pandas = ">=0.23.2" -pyarrow = ">=0.10" - -[package.extras] -matplotlib = ["matplotlib (>=3.0.0,<3.3.0)"] -mlflow = ["mlflow (>=1.0)"] -plotly = ["plotly (>=4.8)"] -spark = ["pyspark (>=2.4.0)"] - -[[package]] -name = "latexcodec" -version = "2.0.1" -description = "A lexer and codec to work with LaTeX code in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, - {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, -] - -[package.dependencies] -six = ">=1.4.1" - -[[package]] -name = "loguru" -version = "0.7.0" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = ">=3.5" -files = [ - {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, - {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] - -[[package]] -name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, - {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markupsafe" -version = "2.1.3" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mergedeep" -version = "1.3.4" -description = "A deep merge function for 🐍." -optional = false -python-versions = ">=3.6" -files = [ - {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, - {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, -] - -[[package]] -name = "mike" -version = "1.1.2" -description = "Manage multiple versions of your MkDocs-powered documentation" -optional = false -python-versions = "*" -files = [ - {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, - {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, -] - -[package.dependencies] -jinja2 = "*" -mkdocs = ">=1.0" -pyyaml = ">=5.1" -verspec = "*" - -[package.extras] -dev = ["coverage", "flake8 (>=3.0)", "shtab"] -test = ["coverage", "flake8 (>=3.0)", "shtab"] - -[[package]] -name = "mistune" -version = "3.0.1" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, -] - -[[package]] -name = "mkdocs" -version = "1.4.3" -description = "Project documentation with Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, - {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} -ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -jinja2 = ">=2.11.1" -markdown = ">=3.2.1,<3.4" -mergedeep = ">=1.3.4" -packaging = ">=20.5" -pyyaml = ">=5.1" -pyyaml-env-tag = ">=0.1" -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} -watchdog = ">=2.0" - -[package.extras] -i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] - -[[package]] -name = "mkdocs-autorefs" -version = "0.4.1" -description = "Automatically link across pages in MkDocs." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, - {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, -] - -[package.dependencies] -Markdown = ">=3.3" -mkdocs = ">=1.1" - -[[package]] -name = "mkdocs-bibtex" -version = "2.11.0" -description = "An MkDocs plugin that enables managing citations with BibTex" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, -] - -[package.dependencies] -mkdocs = ">=1" -pybtex = ">=0.22" -pypandoc = ">=1.5" -requests = ">=2.8.1" -validators = ">=0.19.0" - -[[package]] -name = "mkdocs-charts-plugin" -version = "0.0.9" -description = "MkDocs plugin to add charts from data" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-charts-plugin-0.0.9.tar.gz", hash = "sha256:ffe6852b57e8c567bed36e3b476e8c447af5f74d89d4a9b182d8807088bd6b0c"}, - {file = "mkdocs_charts_plugin-0.0.9-py3-none-any.whl", hash = "sha256:9155f8c9b257dcb6cbc945d4932c8bb65f72cce6f6abcfaac7e32e1bca02e05b"}, -] - -[package.dependencies] -mkdocs = ">=1.1" -pymdown-extensions = ">=9.2" - -[[package]] -name = "mkdocs-gen-files" -version = "0.3.5" -description = "MkDocs plugin to programmatically generate documentation pages during the build" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "mkdocs-gen-files-0.3.5.tar.gz", hash = "sha256:d90d9e1676531a0bb96b1287dc28aa41162986de4dc3c00400214724761ff6ef"}, - {file = "mkdocs_gen_files-0.3.5-py3-none-any.whl", hash = "sha256:69562fddc662482e8f54a00a8b4ede5166ad5384ae4dbb0469f1f338ef3285ca"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3,<2.0.0" - -[[package]] -name = "mkdocs-img2fig-plugin" -version = "0.9.3" -description = "A MkDocs plugin that converts markdown encoded images into
elements." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mkdocs-img2fig-plugin-0.9.3.tar.gz", hash = "sha256:61399d71bb85525d74b1b9435dc6cea747c1af4eff1eb766b98b5605bb78fe4f"}, -] - -[package.dependencies] -mkdocs = "*" - -[[package]] -name = "mkdocs-literate-nav" -version = "0.4.1" -description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "mkdocs-literate-nav-0.4.1.tar.gz", hash = "sha256:9efe26b662f2f901cae5807bfd51446d30ea7e033c2bc43a15d6282c7dfac1ab"}, - {file = "mkdocs_literate_nav-0.4.1-py3-none-any.whl", hash = "sha256:a4b761792ba21defbe2dfd5e0de6ba451639e1ca0f0661c37eda83cc6261e4f9"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3,<2.0.0" - -[[package]] -name = "mkdocs-markdown-filter" -version = "0.1.1" -description = "A MkDocs plugin to add a markdown filter to jinja templates." -optional = false -python-versions = ">=2.7" -files = [ - {file = "mkdocs-markdown-filter-0.1.1.tar.gz", hash = "sha256:f8c0688cda5bb956ec9c68dfe779ff50454c13dc704f62bae264e9e45ab8f878"}, - {file = "mkdocs_markdown_filter-0.1.1-py2-none-any.whl", hash = "sha256:e9991c40beb89a9fd160d92ab4a15863761dc31706c0b151adf62aa863676e2e"}, -] - -[package.dependencies] -mkdocs = ">=1.0.4" - -[[package]] -name = "mkdocs-material" -version = "9.1.20" -description = "Documentation that simply works" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_material-9.1.20-py3-none-any.whl", hash = "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc"}, - {file = "mkdocs_material-9.1.20.tar.gz", hash = "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7"}, -] - -[package.dependencies] -colorama = ">=0.4" -jinja2 = ">=3.0" -markdown = ">=3.2" -mkdocs = ">=1.4.2" -mkdocs-material-extensions = ">=1.1" -pygments = ">=2.14" -pymdown-extensions = ">=9.9.1" -regex = ">=2022.4.24" -requests = ">=2.26" - -[[package]] -name = "mkdocs-material-extensions" -version = "1.1.1" -description = "Extension pack for Python Markdown and MkDocs Material." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, - {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, -] - -[[package]] -name = "mkdocs-section-index" -version = "0.3.4" -description = "MkDocs plugin to allow clickable sections that lead to an index page" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "mkdocs-section-index-0.3.4.tar.gz", hash = "sha256:050151bfe7c0e374f197335e0ecb19c45b53dbafc0f817aa203f0cc24bcf7d10"}, - {file = "mkdocs_section_index-0.3.4-py3-none-any.whl", hash = "sha256:214f7a6df9d35a5772e9577f3899ff3edd90044064589e6dd4d84615b72a8024"}, -] - -[package.dependencies] -mkdocs = ">=1.1,<2.0" - -[[package]] -name = "mkdocstrings" -version = "0.19.0" -description = "Automatic documentation from sources, for MkDocs." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, - {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, -] - -[package.dependencies] -Jinja2 = ">=2.11.1" -Markdown = ">=3.3" -MarkupSafe = ">=1.1" -mkdocs = ">=1.2" -mkdocs-autorefs = ">=0.3.1" -pymdown-extensions = ">=6.3" - -[package.extras] -crystal = ["mkdocstrings-crystal (>=0.3.4)"] -python = ["mkdocstrings-python (>=0.5.2)"] -python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] - -[[package]] -name = "mkdocstrings-python" -version = "0.8.2" -description = "A Python handler for mkdocstrings." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocstrings-python-0.8.2.tar.gz", hash = "sha256:b22528b7a7a0589d007eced019d97ad14de4eba4b2b9ba6a013bb66edc74ab43"}, - {file = "mkdocstrings_python-0.8.2-py3-none-any.whl", hash = "sha256:213d9592e66e084a9bd2fa4956d6294a3487c6dc9cc45164058d6317249b7b6e"}, -] - -[package.dependencies] -griffe = ">=0.24" -mkdocstrings = ">=0.19" - -[[package]] -name = "mknotebooks" -version = "0.7.1" -description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." -optional = false -python-versions = "*" -files = [ - {file = "mknotebooks-0.7.1-py3-none-any.whl", hash = "sha256:e2fa000b706683fc56b93adada7190a0da22ad85c4f1bfd5c4468cc3552b78e5"}, -] - -[package.dependencies] -gitpython = "*" -jupyter-client = "*" -markdown = ">=3.3.3" -mkdocs = ">=1.1" -nbconvert = ">=6.0.0" - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nbclassic" -version = "1.0.0" -description = "Jupyter Notebook as a Jupyter Server extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, - {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.1" -jupyter-server = ">=1.8" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -notebook-shim = ">=0.2.3" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] - -[[package]] -name = "nbclient" -version = "0.7.4" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, - {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.3" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.6.0" -description = "Converting Jupyter Notebooks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, - {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -bleach = "!=5.0.0" -defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0" -jupyter-core = ">=4.7" -jupyterlab-pygments = "*" -markupsafe = ">=2.0" -mistune = ">=2.0.3,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -tinycss2 = "*" -traitlets = ">=5.1" - -[package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] - -[[package]] -name = "nbformat" -version = "5.8.0" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, - {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, -] - -[package.dependencies] -fastjsonschema = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} -jsonschema = ">=2.6" -jupyter-core = "*" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "nest-asyncio" -version = "1.5.7" -description = "Patch asyncio to allow nested event loops" -optional = false -python-versions = ">=3.5" -files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "notebook" -version = "6.5.4" -description = "A web-based notebook environment for interactive computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbclassic = ">=0.4.7" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] - -[[package]] -name = "notebook-shim" -version = "0.2.3" -description = "A shim layer for notebook traits and config" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, -] - -[package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] - -[[package]] -name = "numpy" -version = "1.19.5" -description = "NumPy is the fundamental package for array computing with Python." -optional = false -python-versions = ">=3.6" -files = [ - {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, - {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, - {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, - {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, - {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, - {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, - {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, - {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, - {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, - {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, - {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, - {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, - {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, - {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, -] - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pandas" -version = "1.3.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, - {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, - {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, - {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, - {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, - {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, - {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, - {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, - {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, - {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, - {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, -] - -[package.dependencies] -numpy = ">=1.17.3" -python-dateutil = ">=2.7.3" -pytz = ">=2017.3" - -[package.extras] -test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] - -[[package]] -name = "pandas" -version = "1.3.5" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, - {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, - {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, - {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, - {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, - {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, - {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, - {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, - {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, - {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, - {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, - {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, - {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, - {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, - {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, - {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, - {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, -] -python-dateutil = ">=2.7.3" -pytz = ">=2017.3" - -[package.extras] -test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] - -[[package]] -name = "pandocfilters" -version = "1.5.0" -description = "Utilities for writing pandoc filters in python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, -] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pgpasslib" -version = "1.1.0" -description = "Library for getting passwords from PostgreSQL password files" -optional = false -python-versions = "*" -files = [ - {file = "pgpasslib-1.1.0-py2.py3-none-any.whl", hash = "sha256:290084d524d07b8414d3457545c14ba7761cdcdc86350e9c9efbcb58210b77fc"}, - {file = "pgpasslib-1.1.0.tar.gz", hash = "sha256:f523050cb466f43526b2f4877bf2b1a1f09dfd7c7310e1e836c773f48bc10d27"}, -] - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.2.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "2.21.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "prometheus-client" -version = "0.17.1" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.6" -files = [ - {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, - {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.39" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "5.9.5" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "psycopg2-binary" -version = "2.9.6" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - -[[package]] -name = "py4j" -version = "0.10.7" -description = "Enables Python programs to dynamically access arbitrary Java objects" -optional = false -python-versions = "*" -files = [ - {file = "py4j-0.10.7-py2.py3-none-any.whl", hash = "sha256:a950fe7de1bfd247a0a4dddb9118f332d22a89e01e0699135ea8038c15ee1293"}, - {file = "py4j-0.10.7.zip", hash = "sha256:721189616b3a7d28212dfb2e7c6a1dd5147b03105f1fc37ff2432acd0e863fa5"}, -] - -[[package]] -name = "pyarrow" -version = "8.0.0" -description = "Python library for Apache Arrow" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, - {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, - {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, - {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, - {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, - {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, - {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, - {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, - {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, - {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, - {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, - {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, - {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, - {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, - {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, -] - -[package.dependencies] -numpy = ">=1.16.6" - -[[package]] -name = "pybtex" -version = "0.24.0" -description = "A BibTeX-compatible bibliography processor in Python" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" -files = [ - {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, - {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, -] - -[package.dependencies] -latexcodec = ">=1.0.4" -PyYAML = ">=3.01" -six = "*" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pygments" -version = "2.15.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pylic" -version = "3.5.0" -description = "A Python license checker" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "pylic-3.5.0-py3-none-any.whl", hash = "sha256:f4ca7f9d1fe2c5be7601ba2b8388294aad323161d2c62253ea0d53b9ac9b42f4"}, - {file = "pylic-3.5.0.tar.gz", hash = "sha256:78a11f86425ec03d1b2a806b5359bf92ff1239e710a1b302f89aa05c0906a535"}, -] - -[package.dependencies] -importlib-metadata = ">=6.0.0,<7.0.0" -toml = ">=0.10.2,<0.11.0" - -[[package]] -name = "pymdown-extensions" -version = "10.1" -description = "Extension pack for Python Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pymdown_extensions-10.1-py3-none-any.whl", hash = "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc"}, - {file = "pymdown_extensions-10.1.tar.gz", hash = "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195"}, -] - -[package.dependencies] -markdown = ">=3.2" -pyyaml = "*" - -[[package]] -name = "pypandoc" -version = "1.7.5" -description = "Thin wrapper for pandoc." -optional = false -python-versions = "^2.7 || ^3.6" -files = [ - {file = "pypandoc-1.7.5.tar.gz", hash = "sha256:802c26aae17b64136c6d006949d8ce183a7d4d9fbd4f2d051e66f4fb9f45ca50"}, -] - -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - -[[package]] -name = "pyspark" -version = "2.4.8" -description = "Apache Spark Python API" -optional = false -python-versions = "*" -files = [ - {file = "pyspark-2.4.8.tar.gz", hash = "sha256:3a19b71b8dc8dd91ebc943604a05e1ab01bce052456d42937035632d852d78dc"}, -] - -[package.dependencies] -py4j = "0.10.7" - -[package.extras] -ml = ["numpy (>=1.7)"] -mllib = ["numpy (>=1.7)"] -sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] - -[[package]] -name = "pytest" -version = "7.4.0" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "3.0.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-html" -version = "3.2.0" -description = "pytest plugin for generating HTML reports" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, - {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, -] - -[package.dependencies] -py = ">=1.8.2" -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "3.0.0" -description = "pytest plugin for test session metadata" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, - {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, -] - -[[package]] -name = "pytz" -version = "2023.3" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, -] - -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pywinpty" -version = "2.0.10" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "pyyaml-env-tag" -version = "0.1" -description = "A custom YAML tag for referencing environment variables in YAML files. " -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, -] - -[package.dependencies] -pyyaml = "*" - -[[package]] -name = "pyzmq" -version = "25.1.0" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, -] - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "regex" -version = "2023.6.3" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.6" -files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] - -[[package]] -name = "ruff" -version = "0.0.275" -description = "An extremely fast Python linter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.0.275-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5e6554a072e7ce81eb6f0bec1cebd3dcb0e358652c0f4900d7d630d61691e914"}, - {file = "ruff-0.0.275-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1cc599022fe5ffb143a965b8d659eb64161ab8ab4433d208777eab018a1aab67"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5206fc1cd8c1c1deadd2e6360c0dbcd690f1c845da588ca9d32e4a764a402c60"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c4e6468da26f77b90cae35319d310999f471a8c352998e9b39937a23750149e"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbdea02942131dbc15dd45f431d152224f15e1dd1859fcd0c0487b658f60f1a"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22efd9f41af27ef8fb9779462c46c35c89134d33e326c889971e10b2eaf50c63"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c09662112cfa22d7467a19252a546291fd0eae4f423e52b75a7a2000a1894db"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80043726662144876a381efaab88841c88e8df8baa69559f96b22d4fa216bef1"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5859ee543b01b7eb67835dfd505faa8bb7cc1550f0295c92c1401b45b42be399"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8ace4d40a57b5ea3c16555f25a6b16bc5d8b2779ae1912ce2633543d4e9b1da"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8347fc16aa185aae275906c4ac5b770e00c896b6a0acd5ba521f158801911998"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ec43658c64bfda44fd84bbea9da8c7a3b34f65448192d1c4dd63e9f4e7abfdd4"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:508b13f7ca37274cceaba4fb3ea5da6ca192356323d92acf39462337c33ad14e"}, - {file = "ruff-0.0.275-py3-none-win32.whl", hash = "sha256:6afb1c4422f24f361e877937e2a44b3f8176774a476f5e33845ebfe887dd5ec2"}, - {file = "ruff-0.0.275-py3-none-win_amd64.whl", hash = "sha256:d9b264d78621bf7b698b6755d4913ab52c19bd28bee1a16001f954d64c1a1220"}, - {file = "ruff-0.0.275-py3-none-win_arm64.whl", hash = "sha256:a19ce3bea71023eee5f0f089dde4a4272d088d5ac0b675867e074983238ccc65"}, - {file = "ruff-0.0.275.tar.gz", hash = "sha256:a63a0b645da699ae5c758fce19188e901b3033ec54d862d93fcd042addf7f38d"}, -] - -[[package]] -name = "send2trash" -version = "1.8.2" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] - -[[package]] -name = "setuptools" -version = "68.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.6" -files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "soupsieve" -version = "2.4.1" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, -] - -[[package]] -name = "terminado" -version = "0.17.1" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.7" -files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] - -[[package]] -name = "termynal" -version = "0.2.0" -description = "" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "termynal-0.2.0-py3-none-any.whl", hash = "sha256:1d8f73c9c21414253e812f1684431cf7eda5d9f4539aa7479e055b5cac33873f"}, - {file = "termynal-0.2.0.tar.gz", hash = "sha256:b83642fff7a5b93bb08aa3655754e0410f124f2e75cd34ce1b161a90fc621f8e"}, -] - -[package.dependencies] -markdown = "*" - -[package.extras] -mkdocs = ["mkdocs"] - -[[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "toolz" -version = "0.12.0" -description = "List processing tools and functional utilities" -optional = false -python-versions = ">=3.5" -files = [ - {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, - {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, -] - -[[package]] -name = "tornado" -version = "6.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.7" -files = [ - {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, - {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, - {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, - {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, - {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, -] - -[[package]] -name = "tqdm" -version = "4.65.0" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.7" -files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] - -[[package]] -name = "typed-ast" -version = "1.5.5" -description = "a fork of Python 2 and 3 ast modules with type comment support" -optional = false -python-versions = ">=3.6" -files = [ - {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, - {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, - {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, - {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, - {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, - {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, - {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, - {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, - {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, - {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, - {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, -] - -[[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - -[[package]] -name = "urllib3" -version = "2.0.4" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "validators" -version = "0.20.0" -description = "Python Data Validation for Humans™." -optional = false -python-versions = ">=3.4" -files = [ - {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, -] - -[package.dependencies] -decorator = ">=3.4.0" - -[package.extras] -test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] - -[[package]] -name = "verspec" -version = "0.1.0" -description = "Flexible version handling" -optional = false -python-versions = "*" -files = [ - {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, - {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, -] - -[package.extras] -test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] - -[[package]] -name = "virtualenv" -version = "20.24.2" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, - {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} -platformdirs = ">=3.9.1,<4" - -[package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "watchdog" -version = "3.0.0" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.7" -files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, -] - -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websocket-client" -version = "1.6.1" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, -] - -[package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "y-py" -version = "0.6.0" -description = "Python bindings for the Y-CRDT built from yrs (Rust)" -optional = false -python-versions = "*" -files = [ - {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, - {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, - {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, - {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, - {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, - {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, - {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, - {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, - {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, - {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, - {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, - {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, - {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, - {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, -] - -[[package]] -name = "ypy-websocket" -version = "0.8.4" -description = "WebSocket connector for Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, - {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, -] - -[package.dependencies] -aiofiles = ">=22.1.0,<23" -aiosqlite = ">=0.17.0,<1" -y-py = ">=0.6.0,<0.7.0" - -[package.extras] -test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] - -[[package]] -name = "zipp" -version = "3.15.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.7" -files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "2.0" -python-versions = "~3.7.1" -content-hash = "7296cb655e45865fd5b477dba20918937ec064909a2ed58b4915fe6dd7137094" From 45217a30c434cc40160261795c75176edebea736 Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 15:13:10 +0000 Subject: [PATCH 104/127] .lock --- poetry.lock | 3531 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3531 insertions(+) create mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..94cc6932 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3531 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "aiofiles" +version = "22.1.0" +description = "File support for asyncio." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, + {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, +] + +[[package]] +name = "aiosqlite" +version = "0.19.0" +description = "asyncio bridge to the standard sqlite3 module" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, + {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] +docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] + +[[package]] +name = "altair" +version = "5.0.1" +description = "Vega-Altair: A declarative statistical visualization library for Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, + {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +jinja2 = "*" +jsonschema = ">=3.0" +numpy = "*" +pandas = ">=0.18" +toolz = "*" +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] +doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] + +[[package]] +name = "anyio" +version = "3.7.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, + {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[package]] +name = "argon2-cffi" +version = "21.3.0" +description = "The secure Argon2 password hashing algorithm." +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] +docs = ["furo", "sphinx", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bleach" +version = "6.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +optional = false +python-versions = "*" +files = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] + +[[package]] +name = "catalogue" +version = "2.0.8" +description = "Super lightweight function registries for your library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, + {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} + +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.2.7" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "debugpy" +version = "1.6.7" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, + {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, + {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, + {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, + {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, + {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, + {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, + {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, + {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, + {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, + {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, + {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, + {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, + {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, + {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, + {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, + {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, + {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "distlib" +version = "0.3.6" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] + +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +optional = false +python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastjsonschema" +version = "2.17.1" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[package.dependencies] +cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} + +[[package]] +name = "griffe" +version = "0.30.1" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.7" +files = [ + {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, + {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, +] + +[package.dependencies] +cached-property = {version = "*", markers = "python_version < \"3.8\""} +colorama = ">=0.4" + +[[package]] +name = "identify" +version = "2.5.24" +description = "File identification library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.7.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "importlib-resources" +version = "5.12.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipykernel" +version = "6.16.2" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, + {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +debugpy = ">=1.0" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=17" +tornado = ">=6.1" +traitlets = ">=5.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, + {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +optional = false +python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.18.2" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.17.3" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] + +[package.dependencies] +attrs = ">=17.4.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jupyter-client" +version = "7.4.9" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, + {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, +] + +[package.dependencies] +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = "*" + +[package.extras] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "4.12.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, + {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, +] + +[package.dependencies] +pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = "*" + +[package.extras] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.6.3" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, + {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, +] + +[package.dependencies] +jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] + +[[package]] +name = "jupyter-server" +version = "1.24.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, + {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, +] + +[package.dependencies] +anyio = ">=3.1.0,<4" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbconvert = ">=6.4.4" +nbformat = ">=5.2.0" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=17" +Send2Trash = "*" +terminado = ">=0.8.3" +tornado = ">=6.1.0" +traitlets = ">=5.1" +websocket-client = "*" + +[package.extras] +test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "jupyter-server-fileid" +version = "0.9.0" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, + {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, +] + +[package.dependencies] +jupyter-events = ">=0.5.0" +jupyter-server = ">=1.15,<3" + +[package.extras] +cli = ["click"] +test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] + +[[package]] +name = "jupyter-server-ydoc" +version = "0.8.0" +description = "A Jupyter Server Extension Providing Y Documents." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, + {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, +] + +[package.dependencies] +jupyter-server-fileid = ">=0.6.0,<1" +jupyter-ydoc = ">=0.2.0,<0.4.0" +ypy-websocket = ">=0.8.2,<0.9.0" + +[package.extras] +test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] + +[[package]] +name = "jupyter-ydoc" +version = "0.2.4" +description = "Document structures for collaborative editing using Ypy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, + {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +dev = ["click", "jupyter-releaser"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] + +[[package]] +name = "jupyterlab" +version = "3.6.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, +] + +[package.dependencies] +ipython = "*" +jinja2 = ">=2.1" +jupyter-core = "*" +jupyter-server = ">=1.16.0,<3" +jupyter-server-ydoc = ">=0.8.0,<0.9.0" +jupyter-ydoc = ">=0.2.4,<0.3.0" +jupyterlab-server = ">=2.19,<3.0" +nbclassic = "*" +notebook = "<7" +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.1.0" + +[package.extras] +test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] + +[[package]] +name = "jupyterlab-rise" +version = "0.2.0" +description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_rise-0.2.0-py3-none-any.whl", hash = "sha256:0c320e090cd5dad7346ab3f80975bcd0c44b98b5add0434435ea737c92258c16"}, + {file = "jupyterlab_rise-0.2.0.tar.gz", hash = "sha256:4300b3a5a4e2e7f7bd7e43ddfe8eb4ae4ccc6c0aeb64bae38ab82db93c243ede"}, +] + +[package.dependencies] +jupyterlab = ">=3.0.0,<4" + +[package.extras] +test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync"] + +[[package]] +name = "jupyterlab-server" +version = "2.23.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "koalas" +version = "1.8.2" +description = "Koalas: pandas API on Apache Spark" +optional = false +python-versions = ">=3.5,<3.10" +files = [ + {file = "koalas-1.8.2-py3-none-any.whl", hash = "sha256:ebf00963ac604ee8763ab53ebb028bea3c7732a20cb10f4e52c9ae6a008a749f"}, + {file = "koalas-1.8.2.tar.gz", hash = "sha256:cd072f1a9ae97e87e85e53a1c8a3097777c76f45504e79782d0acff5282fe586"}, +] + +[package.dependencies] +numpy = ">=1.14" +pandas = ">=0.23.2" +pyarrow = ">=0.10" + +[package.extras] +matplotlib = ["matplotlib (>=3.0.0,<3.3.0)"] +mlflow = ["mlflow (>=1.0)"] +plotly = ["plotly (>=4.8)"] +spark = ["pyspark (>=2.4.0)"] + +[[package]] +name = "latexcodec" +version = "2.0.1" +description = "A lexer and codec to work with LaTeX code in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, + {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, +] + +[package.dependencies] +six = ">=1.4.1" + +[[package]] +name = "loguru" +version = "0.7.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, + {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] + +[[package]] +name = "markdown" +version = "3.3.7" +description = "Python implementation of Markdown." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, + {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mike" +version = "1.1.2" +description = "Manage multiple versions of your MkDocs-powered documentation" +optional = false +python-versions = "*" +files = [ + {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, + {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, +] + +[package.dependencies] +jinja2 = "*" +mkdocs = ">=1.0" +pyyaml = ">=5.1" +verspec = "*" + +[package.extras] +dev = ["coverage", "flake8 (>=3.0)", "shtab"] +test = ["coverage", "flake8 (>=3.0)", "shtab"] + +[[package]] +name = "mistune" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, +] + +[[package]] +name = "mkdocs" +version = "1.4.3" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, + {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1,<3.4" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-bibtex" +version = "2.11.0" +description = "An MkDocs plugin that enables managing citations with BibTex" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, +] + +[package.dependencies] +mkdocs = ">=1" +pybtex = ">=0.22" +pypandoc = ">=1.5" +requests = ">=2.8.1" +validators = ">=0.19.0" + +[[package]] +name = "mkdocs-charts-plugin" +version = "0.0.9" +description = "MkDocs plugin to add charts from data" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-charts-plugin-0.0.9.tar.gz", hash = "sha256:ffe6852b57e8c567bed36e3b476e8c447af5f74d89d4a9b182d8807088bd6b0c"}, + {file = "mkdocs_charts_plugin-0.0.9-py3-none-any.whl", hash = "sha256:9155f8c9b257dcb6cbc945d4932c8bb65f72cce6f6abcfaac7e32e1bca02e05b"}, +] + +[package.dependencies] +mkdocs = ">=1.1" +pymdown-extensions = ">=9.2" + +[[package]] +name = "mkdocs-gen-files" +version = "0.3.5" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "mkdocs-gen-files-0.3.5.tar.gz", hash = "sha256:d90d9e1676531a0bb96b1287dc28aa41162986de4dc3c00400214724761ff6ef"}, + {file = "mkdocs_gen_files-0.3.5-py3-none-any.whl", hash = "sha256:69562fddc662482e8f54a00a8b4ede5166ad5384ae4dbb0469f1f338ef3285ca"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3,<2.0.0" + +[[package]] +name = "mkdocs-img2fig-plugin" +version = "0.9.3" +description = "A MkDocs plugin that converts markdown encoded images into
elements." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mkdocs-img2fig-plugin-0.9.3.tar.gz", hash = "sha256:61399d71bb85525d74b1b9435dc6cea747c1af4eff1eb766b98b5605bb78fe4f"}, +] + +[package.dependencies] +mkdocs = "*" + +[[package]] +name = "mkdocs-literate-nav" +version = "0.4.1" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "mkdocs-literate-nav-0.4.1.tar.gz", hash = "sha256:9efe26b662f2f901cae5807bfd51446d30ea7e033c2bc43a15d6282c7dfac1ab"}, + {file = "mkdocs_literate_nav-0.4.1-py3-none-any.whl", hash = "sha256:a4b761792ba21defbe2dfd5e0de6ba451639e1ca0f0661c37eda83cc6261e4f9"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3,<2.0.0" + +[[package]] +name = "mkdocs-markdown-filter" +version = "0.1.1" +description = "A MkDocs plugin to add a markdown filter to jinja templates." +optional = false +python-versions = ">=2.7" +files = [ + {file = "mkdocs-markdown-filter-0.1.1.tar.gz", hash = "sha256:f8c0688cda5bb956ec9c68dfe779ff50454c13dc704f62bae264e9e45ab8f878"}, + {file = "mkdocs_markdown_filter-0.1.1-py2-none-any.whl", hash = "sha256:e9991c40beb89a9fd160d92ab4a15863761dc31706c0b151adf62aa863676e2e"}, +] + +[package.dependencies] +mkdocs = ">=1.0.4" + +[[package]] +name = "mkdocs-material" +version = "9.1.18" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, + {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, +] + +[package.dependencies] +colorama = ">=0.4" +jinja2 = ">=3.0" +markdown = ">=3.2" +mkdocs = ">=1.4.2" +mkdocs-material-extensions = ">=1.1" +pygments = ">=2.14" +pymdown-extensions = ">=9.9.1" +regex = ">=2022.4.24" +requests = ">=2.26" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.1.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, + {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, +] + +[[package]] +name = "mkdocs-section-index" +version = "0.3.4" +description = "MkDocs plugin to allow clickable sections that lead to an index page" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "mkdocs-section-index-0.3.4.tar.gz", hash = "sha256:050151bfe7c0e374f197335e0ecb19c45b53dbafc0f817aa203f0cc24bcf7d10"}, + {file = "mkdocs_section_index-0.3.4-py3-none-any.whl", hash = "sha256:214f7a6df9d35a5772e9577f3899ff3edd90044064589e6dd4d84615b72a8024"}, +] + +[package.dependencies] +mkdocs = ">=1.1,<2.0" + +[[package]] +name = "mkdocstrings" +version = "0.19.0" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, + {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, +] + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.8.2" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-python-0.8.2.tar.gz", hash = "sha256:b22528b7a7a0589d007eced019d97ad14de4eba4b2b9ba6a013bb66edc74ab43"}, + {file = "mkdocstrings_python-0.8.2-py3-none-any.whl", hash = "sha256:213d9592e66e084a9bd2fa4956d6294a3487c6dc9cc45164058d6317249b7b6e"}, +] + +[package.dependencies] +griffe = ">=0.24" +mkdocstrings = ">=0.19" + +[[package]] +name = "mknotebooks" +version = "0.7.1" +description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." +optional = false +python-versions = "*" +files = [ + {file = "mknotebooks-0.7.1-py3-none-any.whl", hash = "sha256:e2fa000b706683fc56b93adada7190a0da22ad85c4f1bfd5c4468cc3552b78e5"}, +] + +[package.dependencies] +gitpython = "*" +jupyter-client = "*" +markdown = ">=3.3.3" +mkdocs = ">=1.1" +nbconvert = ">=6.0.0" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nbclassic" +version = "1.0.0" +description = "Jupyter Notebook as a Jupyter Server extension." +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.1" +jupyter-server = ">=1.8" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +notebook-shim = ">=0.2.3" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] + +[[package]] +name = "nbclient" +version = "0.7.4" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, + {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.3" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.6.0" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, + {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["pyppeteer (>=1,<1.1)"] + +[[package]] +name = "nbformat" +version = "5.8.0" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, + {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, +] + +[package.dependencies] +fastjsonschema = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.5.6" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "notebook" +version = "6.5.4" +description = "A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbclassic = ">=0.4.7" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.19.5" +description = "NumPy is the fundamental package for array computing with Python." +optional = false +python-versions = ">=3.6" +files = [ + {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, + {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, + {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, + {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, + {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, + {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, + {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, + {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, + {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, + {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, + {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, + {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, + {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, + {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, +] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pandas" +version = "1.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, + {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, + {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, + {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, + {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, + {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, + {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, + {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, + {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, + {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, + {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, +] + +[package.dependencies] +numpy = ">=1.17.3" +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pandas" +version = "1.3.5" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, + {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, + {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, + {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, + {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, + {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, + {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, + {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, + {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, + {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, + {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, + {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, +] +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pgpasslib" +version = "1.1.0" +description = "Library for getting passwords from PostgreSQL password files" +optional = false +python-versions = "*" +files = [ + {file = "pgpasslib-1.1.0-py2.py3-none-any.whl", hash = "sha256:290084d524d07b8414d3457545c14ba7761cdcdc86350e9c9efbcb58210b77fc"}, + {file = "pgpasslib-1.1.0.tar.gz", hash = "sha256:f523050cb466f43526b2f4877bf2b1a1f09dfd7c7310e1e836c773f48bc10d27"}, +] + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] + +[[package]] +name = "platformdirs" +version = "3.8.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, + {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prometheus-client" +version = "0.17.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.38" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.5" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "psycopg2-binary" +version = "2.9.6" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "py4j" +version = "0.10.7" +description = "Enables Python programs to dynamically access arbitrary Java objects" +optional = false +python-versions = "*" +files = [ + {file = "py4j-0.10.7-py2.py3-none-any.whl", hash = "sha256:a950fe7de1bfd247a0a4dddb9118f332d22a89e01e0699135ea8038c15ee1293"}, + {file = "py4j-0.10.7.zip", hash = "sha256:721189616b3a7d28212dfb2e7c6a1dd5147b03105f1fc37ff2432acd0e863fa5"}, +] + +[[package]] +name = "pyarrow" +version = "0.16.0" +description = "Python library for Apache Arrow" +optional = false +python-versions = "*" +files = [ + {file = "pyarrow-0.16.0-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:db6d7ec70beeaea468c9c47241f95e2eecfaa2dbb4a27965bf1f952c12680fe9"}, + {file = "pyarrow-0.16.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:caf50dfcc709c7cfca4f816e9b4442222e9e6d3ec51c2618fb6bde8a73c59be4"}, + {file = "pyarrow-0.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:899d7316ea5610798c42e13ffb1d73323600168ccd6d8f0d58ce9e665b7a341f"}, + {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:94d89482bb5461c55b2ee33eafd44294c7f1244cc9e390ea7855f647957113f7"}, + {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8663ca4ca5c27fcb5c8bfc5c7b7e8780b9d699e47da1cad1b7b170eff98498b5"}, + {file = "pyarrow-0.16.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:5449408037c761a0622d13cc0c21756fcce2ea7346ea9c73e2abf8cdd8385ea2"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a609354433dd31ffc4c8de8637de915391fd6ff781b3d8c5d51d3f4eec6fcf39"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c1214f1689711d6562df70863cbd62d6f2a83e68214bb4c97c489f2f97ddeaf4"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:8a00a8497e2367c4f206bb8b7df01852d1e3f1261107ee77a217af654793ac0e"}, + {file = "pyarrow-0.16.0-cp35-cp35m-win_amd64.whl", hash = "sha256:df8ff1c5de2e454dcab9421d70d0db3985ad4efc40899d947687ca6d36846fc8"}, + {file = "pyarrow-0.16.0-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:7aebec0f1b76e73a6307b5027618c843eadb4dc4f6e1f08ca496a01a7273ac64"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd18bc60cef3e72f8082c46de4cfb0cf9fb294c0ff7a201e2b95924fb5d2d146"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:00abec64636aa506d948926ab5dd37fdfe8c0407b069602ba16c68c19ccb0257"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09e9046e3dc24b5c81d307d150b8c04b127aa9f9b3c6babcf13313f2448dd185"}, + {file = "pyarrow-0.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6c042f192c9a0ba33a927a8d0a1e6bfe3ab29aa48a74fc48040d32b07d65124"}, + {file = "pyarrow-0.16.0-cp37-cp37m-macosx_10_9_intel.whl", hash = "sha256:d746e5f34240199ef8afdd0efb391692b85b1ce3e098febd887efc2128da6570"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5fede6cb5d9fda323098042ece0597f40e5bd78520b87e7b8efdd8f062846ad8"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53d3f3684ca0cc12b64f2446022e2ab4a9b0b0976bba0f47ea53ea16b6af4ece"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:890b9a7d6e2c61968ba93e535fc1cf116e66eea2fcc2d6b2503b44e190f3bc47"}, + {file = "pyarrow-0.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8d212c2c93706fafff39a71bee3d42dfd1ca393fda31ce5e3a05c620e1886a7f"}, + {file = "pyarrow-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcd9347797578b0f65a6fb0cb76f462d5d0d63148f51ac8f9c9b5be9acc3f40e"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ac83d595f9b469bea712ce998270038b08b40794abd7374e4bce2ecf5ee2c1cb"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:fab386e5403cec3f66e1ac1375f3648351f9415f28d7740ee0f813d1fc0a326a"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:5af1cc49225aaf82a3dfbda22e5533d339f540921ea001ba36b0d6d5ad364e2b"}, + {file = "pyarrow-0.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ff6e7b0411e3e163cc6465f1ed6a680f0c78b4ff6a4f507d29eb4ed65860557"}, + {file = "pyarrow-0.16.0.tar.gz", hash = "sha256:bb6bb7ba1b6a1c3c94cc0d0068c96df9498c973ad0ae6ca398164d339b704c97"}, +] + +[package.dependencies] +numpy = ">=1.14" +six = ">=1.0.0" + +[[package]] +name = "pybtex" +version = "0.24.0" +description = "A BibTeX-compatible bibliography processor in Python" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +files = [ + {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, + {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, +] + +[package.dependencies] +latexcodec = ">=1.0.4" +PyYAML = ">=3.01" +six = "*" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pygments" +version = "2.15.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pylic" +version = "3.5.0" +description = "A Python license checker" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pylic-3.5.0-py3-none-any.whl", hash = "sha256:f4ca7f9d1fe2c5be7601ba2b8388294aad323161d2c62253ea0d53b9ac9b42f4"}, + {file = "pylic-3.5.0.tar.gz", hash = "sha256:78a11f86425ec03d1b2a806b5359bf92ff1239e710a1b302f89aa05c0906a535"}, +] + +[package.dependencies] +importlib-metadata = ">=6.0.0,<7.0.0" +toml = ">=0.10.2,<0.11.0" + +[[package]] +name = "pymdown-extensions" +version = "10.0.1" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, + {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, +] + +[package.dependencies] +markdown = ">=3.2" +pyyaml = "*" + +[[package]] +name = "pypandoc" +version = "1.7.5" +description = "Thin wrapper for pandoc." +optional = false +python-versions = "^2.7 || ^3.6" +files = [ + {file = "pypandoc-1.7.5.tar.gz", hash = "sha256:802c26aae17b64136c6d006949d8ce183a7d4d9fbd4f2d051e66f4fb9f45ca50"}, +] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, +] + +[[package]] +name = "pyspark" +version = "2.4.8" +description = "Apache Spark Python API" +optional = false +python-versions = "*" +files = [ + {file = "pyspark-2.4.8.tar.gz", hash = "sha256:3a19b71b8dc8dd91ebc943604a05e1ab01bce052456d42937035632d852d78dc"}, +] + +[package.dependencies] +py4j = "0.10.7" + +[package.extras] +ml = ["numpy (>=1.7)"] +mllib = ["numpy (>=1.7)"] +sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] + +[[package]] +name = "pytest" +version = "7.4.0" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "3.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-html" +version = "3.2.0" +description = "pytest plugin for generating HTML reports" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, + {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, +] + +[package.dependencies] +py = ">=1.8.2" +pytest = ">=5.0,<6.0.0 || >6.0.0" +pytest-metadata = "*" + +[[package]] +name = "pytest-metadata" +version = "3.0.0" +description = "pytest plugin for test session metadata" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, + {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.10" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, + {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, + {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, + {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, + {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, + {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, +] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "pyzmq" +version = "25.1.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "regex" +version = "2023.6.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.6" +files = [ + {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, + {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, + {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, + {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, + {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, + {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, + {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, + {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, + {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, + {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, + {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, + {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, + {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, + {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, + {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, + {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "ruff" +version = "0.0.275" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.275-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5e6554a072e7ce81eb6f0bec1cebd3dcb0e358652c0f4900d7d630d61691e914"}, + {file = "ruff-0.0.275-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1cc599022fe5ffb143a965b8d659eb64161ab8ab4433d208777eab018a1aab67"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5206fc1cd8c1c1deadd2e6360c0dbcd690f1c845da588ca9d32e4a764a402c60"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c4e6468da26f77b90cae35319d310999f471a8c352998e9b39937a23750149e"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbdea02942131dbc15dd45f431d152224f15e1dd1859fcd0c0487b658f60f1a"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22efd9f41af27ef8fb9779462c46c35c89134d33e326c889971e10b2eaf50c63"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c09662112cfa22d7467a19252a546291fd0eae4f423e52b75a7a2000a1894db"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80043726662144876a381efaab88841c88e8df8baa69559f96b22d4fa216bef1"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5859ee543b01b7eb67835dfd505faa8bb7cc1550f0295c92c1401b45b42be399"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8ace4d40a57b5ea3c16555f25a6b16bc5d8b2779ae1912ce2633543d4e9b1da"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8347fc16aa185aae275906c4ac5b770e00c896b6a0acd5ba521f158801911998"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ec43658c64bfda44fd84bbea9da8c7a3b34f65448192d1c4dd63e9f4e7abfdd4"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:508b13f7ca37274cceaba4fb3ea5da6ca192356323d92acf39462337c33ad14e"}, + {file = "ruff-0.0.275-py3-none-win32.whl", hash = "sha256:6afb1c4422f24f361e877937e2a44b3f8176774a476f5e33845ebfe887dd5ec2"}, + {file = "ruff-0.0.275-py3-none-win_amd64.whl", hash = "sha256:d9b264d78621bf7b698b6755d4913ab52c19bd28bee1a16001f954d64c1a1220"}, + {file = "ruff-0.0.275-py3-none-win_arm64.whl", hash = "sha256:a19ce3bea71023eee5f0f089dde4a4272d088d5ac0b675867e074983238ccc65"}, + {file = "ruff-0.0.275.tar.gz", hash = "sha256:a63a0b645da699ae5c758fce19188e901b3033ec54d862d93fcd042addf7f38d"}, +] + +[[package]] +name = "send2trash" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "68.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "soupsieve" +version = "2.4.1" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, +] + +[[package]] +name = "terminado" +version = "0.17.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] + +[[package]] +name = "termynal" +version = "0.2.0" +description = "" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "termynal-0.2.0-py3-none-any.whl", hash = "sha256:1d8f73c9c21414253e812f1684431cf7eda5d9f4539aa7479e055b5cac33873f"}, + {file = "termynal-0.2.0.tar.gz", hash = "sha256:b83642fff7a5b93bb08aa3655754e0410f124f2e75cd34ce1b161a90fc621f8e"}, +] + +[package.dependencies] +markdown = "*" + +[package.extras] +mkdocs = ["mkdocs"] + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.5" +files = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] + +[[package]] +name = "tornado" +version = "6.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.7" +files = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] + +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.7" +files = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + +[[package]] +name = "typed-ast" +version = "1.5.4" +description = "a fork of Python 2 and 3 ast modules with type comment support" +optional = false +python-versions = ">=3.6" +files = [ + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.0.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "validators" +version = "0.20.0" +description = "Python Data Validation for Humans™." +optional = false +python-versions = ">=3.4" +files = [ + {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, +] + +[package.dependencies] +decorator = ">=3.4.0" + +[package.extras] +test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] + +[[package]] +name = "verspec" +version = "0.1.0" +description = "Flexible version handling" +optional = false +python-versions = "*" +files = [ + {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, + {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, +] + +[package.extras] +test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] + +[[package]] +name = "virtualenv" +version = "20.23.1" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, + {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, +] + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.12,<4" +importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} +platformdirs = ">=3.5.1,<4" + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] + +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.1" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, +] + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "y-py" +version = "0.5.9" +description = "Python bindings for the Y-CRDT built from yrs (Rust)" +optional = false +python-versions = "*" +files = [ + {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, + {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, + {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, + {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, + {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, + {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, + {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, + {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, + {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, + {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, + {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, + {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, + {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, +] + +[[package]] +name = "ypy-websocket" +version = "0.8.2" +description = "WebSocket connector for Ypy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, + {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, +] + +[package.dependencies] +aiofiles = ">=22.1.0,<23" +aiosqlite = ">=0.17.0,<1" +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "~3.7.1" +content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" From 8cd412c834996666c610ecb3c7ab3d2541d2f8f8 Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 15:15:54 +0000 Subject: [PATCH 105/127] .lock --- poetry.lock | 3531 --------------------------------------------------- 1 file changed, 3531 deletions(-) delete mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 94cc6932..00000000 --- a/poetry.lock +++ /dev/null @@ -1,3531 +0,0 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "22.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, - {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, -] - -[[package]] -name = "aiosqlite" -version = "0.19.0" -description = "asyncio bridge to the standard sqlite3 module" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, - {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] -docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] - -[[package]] -name = "altair" -version = "5.0.1" -description = "Vega-Altair: A declarative statistical visualization library for Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, - {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -jinja2 = "*" -jsonschema = ">=3.0" -numpy = "*" -pandas = ">=0.18" -toolz = "*" -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] -doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] - -[[package]] -name = "anyio" -version = "3.7.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] - -[[package]] -name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "babel" -version = "2.12.1" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, -] - -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - -[[package]] -name = "beautifulsoup4" -version = "4.12.2" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "23.3.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bleach" -version = "6.0.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] - -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -optional = false -python-versions = "*" -files = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] - -[[package]] -name = "catalogue" -version = "2.0.8" -description = "Super lightweight function registries for your library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, - {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} - -[[package]] -name = "certifi" -version = "2023.5.7" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cfgv" -version = "3.3.1" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.1.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, -] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.2.7" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "debugpy" -version = "1.6.7" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, -] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "distlib" -version = "0.3.6" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] - -[[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -optional = false -python-versions = ">=3.6" -files = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.1.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastjsonschema" -version = "2.17.1" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - -[[package]] -name = "filelock" -version = "3.12.2" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, -] - -[package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - -[package.dependencies] -cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} - -[[package]] -name = "ghp-import" -version = "2.1.0" -description = "Copy your docs directly to the gh-pages branch." -optional = false -python-versions = "*" -files = [ - {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, - {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, -] - -[package.dependencies] -python-dateutil = ">=2.8.1" - -[package.extras] -dev = ["flake8", "markdown", "twine", "wheel"] - -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.31" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, - {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} - -[[package]] -name = "griffe" -version = "0.30.1" -description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -optional = false -python-versions = ">=3.7" -files = [ - {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, - {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, -] - -[package.dependencies] -cached-property = {version = "*", markers = "python_version < \"3.8\""} -colorama = ">=0.4" - -[[package]] -name = "identify" -version = "2.5.24" -description = "File identification library for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.7.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, - {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "5.12.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "ipykernel" -version = "6.16.2" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, - {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -debugpy = ">=1.0" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=17" -tornado = ">=6.1" -traitlets = ">=5.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] - -[[package]] -name = "ipython-genutils" -version = "0.2.0" -description = "Vestigial utilities from IPython" -optional = false -python-versions = "*" -files = [ - {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, - {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, -] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - -[[package]] -name = "jedi" -version = "0.18.2" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, -] - -[package.dependencies] -parso = ">=0.8.0,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jinja2" -version = "3.0.3" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "json5" -version = "0.9.14" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = "*" -files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, -] - -[package.extras] -dev = ["hypothesis"] - -[[package]] -name = "jsonpointer" -version = "2.4" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, -] - -[[package]] -name = "jsonschema" -version = "4.17.3" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] - -[package.dependencies] -attrs = ">=17.4.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} -uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jupyter-client" -version = "7.4.9" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, - {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, -] - -[package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = "*" - -[package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-core" -version = "4.12.0" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, - {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, -] - -[package.dependencies] -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = "*" - -[package.extras] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.6.3" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, -] - -[package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] - -[[package]] -name = "jupyter-server" -version = "1.24.0" -description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, - {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, -] - -[package.dependencies] -anyio = ">=3.1.0,<4" -argon2-cffi = "*" -jinja2 = "*" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbconvert = ">=6.4.4" -nbformat = ">=5.2.0" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=17" -Send2Trash = "*" -terminado = ">=0.8.3" -tornado = ">=6.1.0" -traitlets = ">=5.1" -websocket-client = "*" - -[package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] - -[[package]] -name = "jupyter-server-fileid" -version = "0.9.0" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, - {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, -] - -[package.dependencies] -jupyter-events = ">=0.5.0" -jupyter-server = ">=1.15,<3" - -[package.extras] -cli = ["click"] -test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] - -[[package]] -name = "jupyter-server-ydoc" -version = "0.8.0" -description = "A Jupyter Server Extension Providing Y Documents." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, - {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, -] - -[package.dependencies] -jupyter-server-fileid = ">=0.6.0,<1" -jupyter-ydoc = ">=0.2.0,<0.4.0" -ypy-websocket = ">=0.8.2,<0.9.0" - -[package.extras] -test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] - -[[package]] -name = "jupyter-ydoc" -version = "0.2.4" -description = "Document structures for collaborative editing using Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, - {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.5.3,<0.6.0" - -[package.extras] -dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] - -[[package]] -name = "jupyterlab" -version = "3.6.5" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, - {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, -] - -[package.dependencies] -ipython = "*" -jinja2 = ">=2.1" -jupyter-core = "*" -jupyter-server = ">=1.16.0,<3" -jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.4,<0.3.0" -jupyterlab-server = ">=2.19,<3.0" -nbclassic = "*" -notebook = "<7" -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} -tornado = ">=6.1.0" - -[package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] - -[[package]] -name = "jupyterlab-pygments" -version = "0.2.2" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, -] - -[[package]] -name = "jupyterlab-rise" -version = "0.2.0" -description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_rise-0.2.0-py3-none-any.whl", hash = "sha256:0c320e090cd5dad7346ab3f80975bcd0c44b98b5add0434435ea737c92258c16"}, - {file = "jupyterlab_rise-0.2.0.tar.gz", hash = "sha256:4300b3a5a4e2e7f7bd7e43ddfe8eb4ae4ccc6c0aeb64bae38ab82db93c243ede"}, -] - -[package.dependencies] -jupyterlab = ">=3.0.0,<4" - -[package.extras] -test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync"] - -[[package]] -name = "jupyterlab-server" -version = "2.23.0" -description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, -] - -[package.dependencies] -babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.17.3" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.28" - -[package.extras] -docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] - -[[package]] -name = "koalas" -version = "1.8.2" -description = "Koalas: pandas API on Apache Spark" -optional = false -python-versions = ">=3.5,<3.10" -files = [ - {file = "koalas-1.8.2-py3-none-any.whl", hash = "sha256:ebf00963ac604ee8763ab53ebb028bea3c7732a20cb10f4e52c9ae6a008a749f"}, - {file = "koalas-1.8.2.tar.gz", hash = "sha256:cd072f1a9ae97e87e85e53a1c8a3097777c76f45504e79782d0acff5282fe586"}, -] - -[package.dependencies] -numpy = ">=1.14" -pandas = ">=0.23.2" -pyarrow = ">=0.10" - -[package.extras] -matplotlib = ["matplotlib (>=3.0.0,<3.3.0)"] -mlflow = ["mlflow (>=1.0)"] -plotly = ["plotly (>=4.8)"] -spark = ["pyspark (>=2.4.0)"] - -[[package]] -name = "latexcodec" -version = "2.0.1" -description = "A lexer and codec to work with LaTeX code in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, - {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, -] - -[package.dependencies] -six = ">=1.4.1" - -[[package]] -name = "loguru" -version = "0.7.0" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = ">=3.5" -files = [ - {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, - {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] - -[[package]] -name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, - {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markupsafe" -version = "2.1.3" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mergedeep" -version = "1.3.4" -description = "A deep merge function for 🐍." -optional = false -python-versions = ">=3.6" -files = [ - {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, - {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, -] - -[[package]] -name = "mike" -version = "1.1.2" -description = "Manage multiple versions of your MkDocs-powered documentation" -optional = false -python-versions = "*" -files = [ - {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, - {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, -] - -[package.dependencies] -jinja2 = "*" -mkdocs = ">=1.0" -pyyaml = ">=5.1" -verspec = "*" - -[package.extras] -dev = ["coverage", "flake8 (>=3.0)", "shtab"] -test = ["coverage", "flake8 (>=3.0)", "shtab"] - -[[package]] -name = "mistune" -version = "3.0.1" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, -] - -[[package]] -name = "mkdocs" -version = "1.4.3" -description = "Project documentation with Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, - {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} -ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -jinja2 = ">=2.11.1" -markdown = ">=3.2.1,<3.4" -mergedeep = ">=1.3.4" -packaging = ">=20.5" -pyyaml = ">=5.1" -pyyaml-env-tag = ">=0.1" -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} -watchdog = ">=2.0" - -[package.extras] -i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] - -[[package]] -name = "mkdocs-autorefs" -version = "0.4.1" -description = "Automatically link across pages in MkDocs." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, - {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, -] - -[package.dependencies] -Markdown = ">=3.3" -mkdocs = ">=1.1" - -[[package]] -name = "mkdocs-bibtex" -version = "2.11.0" -description = "An MkDocs plugin that enables managing citations with BibTex" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, -] - -[package.dependencies] -mkdocs = ">=1" -pybtex = ">=0.22" -pypandoc = ">=1.5" -requests = ">=2.8.1" -validators = ">=0.19.0" - -[[package]] -name = "mkdocs-charts-plugin" -version = "0.0.9" -description = "MkDocs plugin to add charts from data" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-charts-plugin-0.0.9.tar.gz", hash = "sha256:ffe6852b57e8c567bed36e3b476e8c447af5f74d89d4a9b182d8807088bd6b0c"}, - {file = "mkdocs_charts_plugin-0.0.9-py3-none-any.whl", hash = "sha256:9155f8c9b257dcb6cbc945d4932c8bb65f72cce6f6abcfaac7e32e1bca02e05b"}, -] - -[package.dependencies] -mkdocs = ">=1.1" -pymdown-extensions = ">=9.2" - -[[package]] -name = "mkdocs-gen-files" -version = "0.3.5" -description = "MkDocs plugin to programmatically generate documentation pages during the build" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "mkdocs-gen-files-0.3.5.tar.gz", hash = "sha256:d90d9e1676531a0bb96b1287dc28aa41162986de4dc3c00400214724761ff6ef"}, - {file = "mkdocs_gen_files-0.3.5-py3-none-any.whl", hash = "sha256:69562fddc662482e8f54a00a8b4ede5166ad5384ae4dbb0469f1f338ef3285ca"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3,<2.0.0" - -[[package]] -name = "mkdocs-img2fig-plugin" -version = "0.9.3" -description = "A MkDocs plugin that converts markdown encoded images into
elements." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mkdocs-img2fig-plugin-0.9.3.tar.gz", hash = "sha256:61399d71bb85525d74b1b9435dc6cea747c1af4eff1eb766b98b5605bb78fe4f"}, -] - -[package.dependencies] -mkdocs = "*" - -[[package]] -name = "mkdocs-literate-nav" -version = "0.4.1" -description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "mkdocs-literate-nav-0.4.1.tar.gz", hash = "sha256:9efe26b662f2f901cae5807bfd51446d30ea7e033c2bc43a15d6282c7dfac1ab"}, - {file = "mkdocs_literate_nav-0.4.1-py3-none-any.whl", hash = "sha256:a4b761792ba21defbe2dfd5e0de6ba451639e1ca0f0661c37eda83cc6261e4f9"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3,<2.0.0" - -[[package]] -name = "mkdocs-markdown-filter" -version = "0.1.1" -description = "A MkDocs plugin to add a markdown filter to jinja templates." -optional = false -python-versions = ">=2.7" -files = [ - {file = "mkdocs-markdown-filter-0.1.1.tar.gz", hash = "sha256:f8c0688cda5bb956ec9c68dfe779ff50454c13dc704f62bae264e9e45ab8f878"}, - {file = "mkdocs_markdown_filter-0.1.1-py2-none-any.whl", hash = "sha256:e9991c40beb89a9fd160d92ab4a15863761dc31706c0b151adf62aa863676e2e"}, -] - -[package.dependencies] -mkdocs = ">=1.0.4" - -[[package]] -name = "mkdocs-material" -version = "9.1.18" -description = "Documentation that simply works" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, - {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, -] - -[package.dependencies] -colorama = ">=0.4" -jinja2 = ">=3.0" -markdown = ">=3.2" -mkdocs = ">=1.4.2" -mkdocs-material-extensions = ">=1.1" -pygments = ">=2.14" -pymdown-extensions = ">=9.9.1" -regex = ">=2022.4.24" -requests = ">=2.26" - -[[package]] -name = "mkdocs-material-extensions" -version = "1.1.1" -description = "Extension pack for Python Markdown and MkDocs Material." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, - {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, -] - -[[package]] -name = "mkdocs-section-index" -version = "0.3.4" -description = "MkDocs plugin to allow clickable sections that lead to an index page" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "mkdocs-section-index-0.3.4.tar.gz", hash = "sha256:050151bfe7c0e374f197335e0ecb19c45b53dbafc0f817aa203f0cc24bcf7d10"}, - {file = "mkdocs_section_index-0.3.4-py3-none-any.whl", hash = "sha256:214f7a6df9d35a5772e9577f3899ff3edd90044064589e6dd4d84615b72a8024"}, -] - -[package.dependencies] -mkdocs = ">=1.1,<2.0" - -[[package]] -name = "mkdocstrings" -version = "0.19.0" -description = "Automatic documentation from sources, for MkDocs." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, - {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, -] - -[package.dependencies] -Jinja2 = ">=2.11.1" -Markdown = ">=3.3" -MarkupSafe = ">=1.1" -mkdocs = ">=1.2" -mkdocs-autorefs = ">=0.3.1" -pymdown-extensions = ">=6.3" - -[package.extras] -crystal = ["mkdocstrings-crystal (>=0.3.4)"] -python = ["mkdocstrings-python (>=0.5.2)"] -python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] - -[[package]] -name = "mkdocstrings-python" -version = "0.8.2" -description = "A Python handler for mkdocstrings." -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocstrings-python-0.8.2.tar.gz", hash = "sha256:b22528b7a7a0589d007eced019d97ad14de4eba4b2b9ba6a013bb66edc74ab43"}, - {file = "mkdocstrings_python-0.8.2-py3-none-any.whl", hash = "sha256:213d9592e66e084a9bd2fa4956d6294a3487c6dc9cc45164058d6317249b7b6e"}, -] - -[package.dependencies] -griffe = ">=0.24" -mkdocstrings = ">=0.19" - -[[package]] -name = "mknotebooks" -version = "0.7.1" -description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." -optional = false -python-versions = "*" -files = [ - {file = "mknotebooks-0.7.1-py3-none-any.whl", hash = "sha256:e2fa000b706683fc56b93adada7190a0da22ad85c4f1bfd5c4468cc3552b78e5"}, -] - -[package.dependencies] -gitpython = "*" -jupyter-client = "*" -markdown = ">=3.3.3" -mkdocs = ">=1.1" -nbconvert = ">=6.0.0" - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nbclassic" -version = "1.0.0" -description = "Jupyter Notebook as a Jupyter Server extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, - {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.1" -jupyter-server = ">=1.8" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -notebook-shim = ">=0.2.3" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] - -[[package]] -name = "nbclient" -version = "0.7.4" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, - {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.3" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.6.0" -description = "Converting Jupyter Notebooks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, - {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -bleach = "!=5.0.0" -defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0" -jupyter-core = ">=4.7" -jupyterlab-pygments = "*" -markupsafe = ">=2.0" -mistune = ">=2.0.3,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -tinycss2 = "*" -traitlets = ">=5.1" - -[package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] - -[[package]] -name = "nbformat" -version = "5.8.0" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, - {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, -] - -[package.dependencies] -fastjsonschema = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} -jsonschema = ">=2.6" -jupyter-core = "*" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "nest-asyncio" -version = "1.5.6" -description = "Patch asyncio to allow nested event loops" -optional = false -python-versions = ">=3.5" -files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "notebook" -version = "6.5.4" -description = "A web-based notebook environment for interactive computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbclassic = ">=0.4.7" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] - -[[package]] -name = "notebook-shim" -version = "0.2.3" -description = "A shim layer for notebook traits and config" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, -] - -[package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] - -[[package]] -name = "numpy" -version = "1.19.5" -description = "NumPy is the fundamental package for array computing with Python." -optional = false -python-versions = ">=3.6" -files = [ - {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, - {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, - {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, - {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, - {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, - {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, - {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, - {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, - {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, - {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, - {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, - {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, - {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, - {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, -] - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pandas" -version = "1.3.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, - {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, - {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, - {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, - {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, - {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, - {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, - {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, - {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, - {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, - {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, -] - -[package.dependencies] -numpy = ">=1.17.3" -python-dateutil = ">=2.7.3" -pytz = ">=2017.3" - -[package.extras] -test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] - -[[package]] -name = "pandas" -version = "1.3.5" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, - {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, - {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, - {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, - {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, - {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, - {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, - {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, - {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, - {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, - {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, - {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, - {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, - {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, - {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, - {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, - {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, - {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, - {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, - {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, -] -python-dateutil = ">=2.7.3" -pytz = ">=2017.3" - -[package.extras] -test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] - -[[package]] -name = "pandocfilters" -version = "1.5.0" -description = "Utilities for writing pandoc filters in python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, -] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.11.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, -] - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pgpasslib" -version = "1.1.0" -description = "Library for getting passwords from PostgreSQL password files" -optional = false -python-versions = "*" -files = [ - {file = "pgpasslib-1.1.0-py2.py3-none-any.whl", hash = "sha256:290084d524d07b8414d3457545c14ba7761cdcdc86350e9c9efbcb58210b77fc"}, - {file = "pgpasslib-1.1.0.tar.gz", hash = "sha256:f523050cb466f43526b2f4877bf2b1a1f09dfd7c7310e1e836c773f48bc10d27"}, -] - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "platformdirs" -version = "3.8.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, - {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} - -[package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pluggy" -version = "1.2.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "2.21.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "prometheus-client" -version = "0.17.0" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.6" -files = [ - {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, - {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.38" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "5.9.5" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "psycopg2-binary" -version = "2.9.6" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - -[[package]] -name = "py4j" -version = "0.10.7" -description = "Enables Python programs to dynamically access arbitrary Java objects" -optional = false -python-versions = "*" -files = [ - {file = "py4j-0.10.7-py2.py3-none-any.whl", hash = "sha256:a950fe7de1bfd247a0a4dddb9118f332d22a89e01e0699135ea8038c15ee1293"}, - {file = "py4j-0.10.7.zip", hash = "sha256:721189616b3a7d28212dfb2e7c6a1dd5147b03105f1fc37ff2432acd0e863fa5"}, -] - -[[package]] -name = "pyarrow" -version = "0.16.0" -description = "Python library for Apache Arrow" -optional = false -python-versions = "*" -files = [ - {file = "pyarrow-0.16.0-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:db6d7ec70beeaea468c9c47241f95e2eecfaa2dbb4a27965bf1f952c12680fe9"}, - {file = "pyarrow-0.16.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:caf50dfcc709c7cfca4f816e9b4442222e9e6d3ec51c2618fb6bde8a73c59be4"}, - {file = "pyarrow-0.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:899d7316ea5610798c42e13ffb1d73323600168ccd6d8f0d58ce9e665b7a341f"}, - {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:94d89482bb5461c55b2ee33eafd44294c7f1244cc9e390ea7855f647957113f7"}, - {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8663ca4ca5c27fcb5c8bfc5c7b7e8780b9d699e47da1cad1b7b170eff98498b5"}, - {file = "pyarrow-0.16.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:5449408037c761a0622d13cc0c21756fcce2ea7346ea9c73e2abf8cdd8385ea2"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a609354433dd31ffc4c8de8637de915391fd6ff781b3d8c5d51d3f4eec6fcf39"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c1214f1689711d6562df70863cbd62d6f2a83e68214bb4c97c489f2f97ddeaf4"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:8a00a8497e2367c4f206bb8b7df01852d1e3f1261107ee77a217af654793ac0e"}, - {file = "pyarrow-0.16.0-cp35-cp35m-win_amd64.whl", hash = "sha256:df8ff1c5de2e454dcab9421d70d0db3985ad4efc40899d947687ca6d36846fc8"}, - {file = "pyarrow-0.16.0-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:7aebec0f1b76e73a6307b5027618c843eadb4dc4f6e1f08ca496a01a7273ac64"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd18bc60cef3e72f8082c46de4cfb0cf9fb294c0ff7a201e2b95924fb5d2d146"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:00abec64636aa506d948926ab5dd37fdfe8c0407b069602ba16c68c19ccb0257"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09e9046e3dc24b5c81d307d150b8c04b127aa9f9b3c6babcf13313f2448dd185"}, - {file = "pyarrow-0.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6c042f192c9a0ba33a927a8d0a1e6bfe3ab29aa48a74fc48040d32b07d65124"}, - {file = "pyarrow-0.16.0-cp37-cp37m-macosx_10_9_intel.whl", hash = "sha256:d746e5f34240199ef8afdd0efb391692b85b1ce3e098febd887efc2128da6570"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5fede6cb5d9fda323098042ece0597f40e5bd78520b87e7b8efdd8f062846ad8"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53d3f3684ca0cc12b64f2446022e2ab4a9b0b0976bba0f47ea53ea16b6af4ece"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:890b9a7d6e2c61968ba93e535fc1cf116e66eea2fcc2d6b2503b44e190f3bc47"}, - {file = "pyarrow-0.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8d212c2c93706fafff39a71bee3d42dfd1ca393fda31ce5e3a05c620e1886a7f"}, - {file = "pyarrow-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcd9347797578b0f65a6fb0cb76f462d5d0d63148f51ac8f9c9b5be9acc3f40e"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ac83d595f9b469bea712ce998270038b08b40794abd7374e4bce2ecf5ee2c1cb"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:fab386e5403cec3f66e1ac1375f3648351f9415f28d7740ee0f813d1fc0a326a"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:5af1cc49225aaf82a3dfbda22e5533d339f540921ea001ba36b0d6d5ad364e2b"}, - {file = "pyarrow-0.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ff6e7b0411e3e163cc6465f1ed6a680f0c78b4ff6a4f507d29eb4ed65860557"}, - {file = "pyarrow-0.16.0.tar.gz", hash = "sha256:bb6bb7ba1b6a1c3c94cc0d0068c96df9498c973ad0ae6ca398164d339b704c97"}, -] - -[package.dependencies] -numpy = ">=1.14" -six = ">=1.0.0" - -[[package]] -name = "pybtex" -version = "0.24.0" -description = "A BibTeX-compatible bibliography processor in Python" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" -files = [ - {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, - {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, -] - -[package.dependencies] -latexcodec = ">=1.0.4" -PyYAML = ">=3.01" -six = "*" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pygments" -version = "2.15.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pylic" -version = "3.5.0" -description = "A Python license checker" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "pylic-3.5.0-py3-none-any.whl", hash = "sha256:f4ca7f9d1fe2c5be7601ba2b8388294aad323161d2c62253ea0d53b9ac9b42f4"}, - {file = "pylic-3.5.0.tar.gz", hash = "sha256:78a11f86425ec03d1b2a806b5359bf92ff1239e710a1b302f89aa05c0906a535"}, -] - -[package.dependencies] -importlib-metadata = ">=6.0.0,<7.0.0" -toml = ">=0.10.2,<0.11.0" - -[[package]] -name = "pymdown-extensions" -version = "10.0.1" -description = "Extension pack for Python Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, - {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, -] - -[package.dependencies] -markdown = ">=3.2" -pyyaml = "*" - -[[package]] -name = "pypandoc" -version = "1.7.5" -description = "Thin wrapper for pandoc." -optional = false -python-versions = "^2.7 || ^3.6" -files = [ - {file = "pypandoc-1.7.5.tar.gz", hash = "sha256:802c26aae17b64136c6d006949d8ce183a7d4d9fbd4f2d051e66f4fb9f45ca50"}, -] - -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - -[[package]] -name = "pyspark" -version = "2.4.8" -description = "Apache Spark Python API" -optional = false -python-versions = "*" -files = [ - {file = "pyspark-2.4.8.tar.gz", hash = "sha256:3a19b71b8dc8dd91ebc943604a05e1ab01bce052456d42937035632d852d78dc"}, -] - -[package.dependencies] -py4j = "0.10.7" - -[package.extras] -ml = ["numpy (>=1.7)"] -mllib = ["numpy (>=1.7)"] -sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] - -[[package]] -name = "pytest" -version = "7.4.0" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "3.0.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-html" -version = "3.2.0" -description = "pytest plugin for generating HTML reports" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, - {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, -] - -[package.dependencies] -py = ">=1.8.2" -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "3.0.0" -description = "pytest plugin for test session metadata" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, - {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, -] - -[[package]] -name = "pytz" -version = "2023.3" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, -] - -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pywinpty" -version = "2.0.10" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, -] - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "pyyaml-env-tag" -version = "0.1" -description = "A custom YAML tag for referencing environment variables in YAML files. " -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, -] - -[package.dependencies] -pyyaml = "*" - -[[package]] -name = "pyzmq" -version = "25.1.0" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, -] - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "regex" -version = "2023.6.3" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.6" -files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] - -[[package]] -name = "ruff" -version = "0.0.275" -description = "An extremely fast Python linter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.0.275-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5e6554a072e7ce81eb6f0bec1cebd3dcb0e358652c0f4900d7d630d61691e914"}, - {file = "ruff-0.0.275-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1cc599022fe5ffb143a965b8d659eb64161ab8ab4433d208777eab018a1aab67"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5206fc1cd8c1c1deadd2e6360c0dbcd690f1c845da588ca9d32e4a764a402c60"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c4e6468da26f77b90cae35319d310999f471a8c352998e9b39937a23750149e"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbdea02942131dbc15dd45f431d152224f15e1dd1859fcd0c0487b658f60f1a"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22efd9f41af27ef8fb9779462c46c35c89134d33e326c889971e10b2eaf50c63"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c09662112cfa22d7467a19252a546291fd0eae4f423e52b75a7a2000a1894db"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80043726662144876a381efaab88841c88e8df8baa69559f96b22d4fa216bef1"}, - {file = "ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5859ee543b01b7eb67835dfd505faa8bb7cc1550f0295c92c1401b45b42be399"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8ace4d40a57b5ea3c16555f25a6b16bc5d8b2779ae1912ce2633543d4e9b1da"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8347fc16aa185aae275906c4ac5b770e00c896b6a0acd5ba521f158801911998"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ec43658c64bfda44fd84bbea9da8c7a3b34f65448192d1c4dd63e9f4e7abfdd4"}, - {file = "ruff-0.0.275-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:508b13f7ca37274cceaba4fb3ea5da6ca192356323d92acf39462337c33ad14e"}, - {file = "ruff-0.0.275-py3-none-win32.whl", hash = "sha256:6afb1c4422f24f361e877937e2a44b3f8176774a476f5e33845ebfe887dd5ec2"}, - {file = "ruff-0.0.275-py3-none-win_amd64.whl", hash = "sha256:d9b264d78621bf7b698b6755d4913ab52c19bd28bee1a16001f954d64c1a1220"}, - {file = "ruff-0.0.275-py3-none-win_arm64.whl", hash = "sha256:a19ce3bea71023eee5f0f089dde4a4272d088d5ac0b675867e074983238ccc65"}, - {file = "ruff-0.0.275.tar.gz", hash = "sha256:a63a0b645da699ae5c758fce19188e901b3033ec54d862d93fcd042addf7f38d"}, -] - -[[package]] -name = "send2trash" -version = "1.8.2" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] - -[[package]] -name = "setuptools" -version = "68.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.6" -files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "soupsieve" -version = "2.4.1" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, -] - -[[package]] -name = "terminado" -version = "0.17.1" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.7" -files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] - -[[package]] -name = "termynal" -version = "0.2.0" -description = "" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "termynal-0.2.0-py3-none-any.whl", hash = "sha256:1d8f73c9c21414253e812f1684431cf7eda5d9f4539aa7479e055b5cac33873f"}, - {file = "termynal-0.2.0.tar.gz", hash = "sha256:b83642fff7a5b93bb08aa3655754e0410f124f2e75cd34ce1b161a90fc621f8e"}, -] - -[package.dependencies] -markdown = "*" - -[package.extras] -mkdocs = ["mkdocs"] - -[[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "toolz" -version = "0.12.0" -description = "List processing tools and functional utilities" -optional = false -python-versions = ">=3.5" -files = [ - {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, - {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, -] - -[[package]] -name = "tornado" -version = "6.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.7" -files = [ - {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, - {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, - {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, - {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, - {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, -] - -[[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.7" -files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] - -[[package]] -name = "typed-ast" -version = "1.5.4" -description = "a fork of Python 2 and 3 ast modules with type comment support" -optional = false -python-versions = ">=3.6" -files = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, -] - -[[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - -[[package]] -name = "urllib3" -version = "2.0.3" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "validators" -version = "0.20.0" -description = "Python Data Validation for Humans™." -optional = false -python-versions = ">=3.4" -files = [ - {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, -] - -[package.dependencies] -decorator = ">=3.4.0" - -[package.extras] -test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] - -[[package]] -name = "verspec" -version = "0.1.0" -description = "Flexible version handling" -optional = false -python-versions = "*" -files = [ - {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, - {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, -] - -[package.extras] -test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] - -[[package]] -name = "virtualenv" -version = "20.23.1" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, - {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, -] - -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.12,<4" -importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} -platformdirs = ">=3.5.1,<4" - -[package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] - -[[package]] -name = "watchdog" -version = "3.0.0" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.7" -files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, -] - -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websocket-client" -version = "1.6.1" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, -] - -[package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "y-py" -version = "0.5.9" -description = "Python bindings for the Y-CRDT built from yrs (Rust)" -optional = false -python-versions = "*" -files = [ - {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, - {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, - {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, - {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, - {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, - {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, - {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, - {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, - {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, - {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, - {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, - {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, - {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, - {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, -] - -[[package]] -name = "ypy-websocket" -version = "0.8.2" -description = "WebSocket connector for Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, - {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, -] - -[package.dependencies] -aiofiles = ">=22.1.0,<23" -aiosqlite = ">=0.17.0,<1" -y-py = ">=0.5.3,<0.6.0" - -[package.extras] -test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] - -[[package]] -name = "zipp" -version = "3.15.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.7" -files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "2.0" -python-versions = "~3.7.1" -content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" From 19c5cf77525d188781908b0e55bb055dde8d684c Mon Sep 17 00:00:00 2001 From: svittoz Date: Fri, 8 Sep 2023 15:34:38 +0000 Subject: [PATCH 106/127] cost not None --- edsteva/probes/utils/prepare_df.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index f7d651fc..d7a176ec 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -79,7 +79,7 @@ def prepare_visit_occurrence( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays ) - if cost: + if cost is not None: cost = cost[["visit_occurrence_id", "drg_source"]] visit_occurrence = visit_occurrence.merge(cost, on="visit_occurrence_id") From 317ebd55c0f31df69573fff2a0304fdb3de53240 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 07:56:01 +0000 Subject: [PATCH 107/127] cost not none --- edsteva/probes/utils/prepare_df.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index d7a176ec..60bf0b10 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -79,10 +79,6 @@ def prepare_visit_occurrence( visit_occurrence=visit_occurrence, length_of_stays=length_of_stays ) - if cost is not None: - cost = cost[["visit_occurrence_id", "drg_source"]] - visit_occurrence = visit_occurrence.merge(cost, on="visit_occurrence_id") - visit_occurrence = visit_occurrence.rename( columns={"visit_source_value": "stay_type", "visit_start_datetime": "date"} ) @@ -94,6 +90,10 @@ def prepare_visit_occurrence( end_date=end_date, ) + if cost is not None: + cost = cost[["visit_occurrence_id", "drg_source"]] + visit_occurrence = visit_occurrence.merge(cost, on="visit_occurrence_id") + if stay_types and isinstance(stay_types, (dict, str)): visit_occurrence = filter_table_by_type( table=visit_occurrence, From aa7db800af9f0edf637a3b9a111ac7b2d695a0dd Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 08:02:52 +0000 Subject: [PATCH 108/127] last changes --- tests/test_custom_probe.py | 2 ++ tests/test_probes.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/test_custom_probe.py b/tests/test_custom_probe.py index bc602d96..8e298511 100644 --- a/tests/test_custom_probe.py +++ b/tests/test_custom_probe.py @@ -92,6 +92,8 @@ def compute_process( self._index.remove("condition_type") if not provenance_sources and "provenance_source" in self._index: self._index.remove("provenance_source") + if not drg_sources and "drg_source" in self._index: + self._index.remove("drg_source") if not age_ranges and "age_range" in self._index: self._index.remove("age_range") return completeness_predictors.get(self._completeness_predictor)( diff --git a/tests/test_probes.py b/tests/test_probes.py index 9a9ec375..65469d70 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -53,7 +53,7 @@ stay_sources={"MCO": "MCO", "MCO_PSY_SSR": "MCO|Psychiatrie|SSR"}, age_ranges=[18, 64], drg_sources={"M": ".{2}M"}, - provenance_sources={"All": ".*"}, + provenance_sources=None, ), dict( visit_predictor="per_visit_default", @@ -78,10 +78,10 @@ end_date=None, test_save=False, stay_sources={"MCO": "MCO"}, - provenance_sources={"All": ".*"}, + provenance_sources=None, age_ranges=[18], - module="koalas", - drg_sources={"All": ".*"}, + module="pandas", + drg_sources=None, ), dict( visit_predictor="per_visit_default", @@ -106,10 +106,10 @@ end_date=None, test_save=False, stay_sources={"MCO": "MCO"}, - provenance_sources={"All": ".*"}, + provenance_sources=None, age_ranges=[18], - module="koalas", - drg_sources={"All": ".*"}, + module="pandas", + drg_sources=None, ), dict( visit_predictor="per_visit_default", @@ -137,7 +137,7 @@ provenance_sources={"All": ".*", "urgence": "service d'urgence"}, age_ranges=None, module="pandas", - drg_sources={"All": ".*"}, + drg_sources=None, ), ] From 5c502af911ddb6adf38d704515b4a68b4ec60218 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 09:36:29 +0000 Subject: [PATCH 109/127] change drop_duplicates position --- edsteva/probes/biology/completeness_predictors/per_visit.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/edsteva/probes/biology/completeness_predictors/per_visit.py b/edsteva/probes/biology/completeness_predictors/per_visit.py index 41d68494..054b3405 100644 --- a/edsteva/probes/biology/completeness_predictors/per_visit.py +++ b/edsteva/probes/biology/completeness_predictors/per_visit.py @@ -106,9 +106,8 @@ def compute_completeness_predictor_per_visit( condition_types=condition_types, start_date=start_date, end_date=end_date, - )[["visit_occurrence_id", "condition_type"]] + )[["visit_occurrence_id", "condition_type"]].drop_duplicates() visit_occurrence = visit_occurrence.merge(conditions, on="visit_occurrence_id") - visit_occurrence = visit_occurrence.drop_duplicates() measurement = prepare_measurement( data=data, From 67a1eee8fbc560645723c2c3bf477dcba2e4e351 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 11:59:39 +0000 Subject: [PATCH 110/127] duplicated --- edsteva/probes/utils/prepare_df.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 60bf0b10..3b1bf0f7 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -91,7 +91,7 @@ def prepare_visit_occurrence( ) if cost is not None: - cost = cost[["visit_occurrence_id", "drg_source"]] + cost = cost[["visit_occurrence_id", "drg_source"]].drop_duplicates() visit_occurrence = visit_occurrence.merge(cost, on="visit_occurrence_id") if stay_types and isinstance(stay_types, (dict, str)): From 4e5e3dc211dac8bbbb930296c0f37443386950bb Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 12:05:26 +0000 Subject: [PATCH 111/127] last fix --- edsteva/probes/utils/prepare_df.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index 3b1bf0f7..dc68bed6 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -20,9 +20,9 @@ def prepare_visit_occurrence( data: Data, - stay_types: Union[str, Dict[str, str]], - stay_sources: Union[str, Dict[str, str]], - provenance_sources: Union[str, Dict[str, str]], + stay_types: Union[bool, str, Dict[str, str]], + stay_sources: Union[bool, str, Dict[str, str]], + provenance_sources: Union[bool, str, Dict[str, str]], cost: DataFrame, length_of_stays: List[float], start_date: datetime = None, @@ -130,7 +130,6 @@ def prepare_measurement( "measurement_datetime", "row_status_source_value", "measurement_source_concept_id", - "value_as_number", ] check_columns( From bbd5f19e7da109037e3a6f9ca727441a31769a6e Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 12:40:42 +0000 Subject: [PATCH 112/127] coverage --- tests/test_probes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index 65469d70..a3e859d4 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -99,7 +99,7 @@ note_types="CRH", stay_types="hospitalisés", diag_types="DP", - condition_types="C", + condition_types={"ALL": ".*", "Cancer": "C"}, source_systems=["ORBIS"], concepts_sets={"All": ".*"}, start_date="2010-01-03", @@ -126,7 +126,7 @@ stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, note_types={"ALL": ".*", "CRH": "CRH", "Urg": "urg"}, diag_types={"ALL": ".*", "DP/DR": "DP|DR"}, - condition_types={"ALL": ".*", "Cancer": "C"}, + condition_types=None, source_systems=["ORBIS"], concepts_sets=None, concept_codes=["A0009", "A0209", "A3109"], From d904c96dbcd9797bcfa4c51413ef972fdbca6ddc Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 13:09:47 +0000 Subject: [PATCH 113/127] coverage --- tests/test_probes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index a3e859d4..65469d70 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -99,7 +99,7 @@ note_types="CRH", stay_types="hospitalisés", diag_types="DP", - condition_types={"ALL": ".*", "Cancer": "C"}, + condition_types="C", source_systems=["ORBIS"], concepts_sets={"All": ".*"}, start_date="2010-01-03", @@ -126,7 +126,7 @@ stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, note_types={"ALL": ".*", "CRH": "CRH", "Urg": "urg"}, diag_types={"ALL": ".*", "DP/DR": "DP|DR"}, - condition_types=None, + condition_types={"ALL": ".*", "Cancer": "C"}, source_systems=["ORBIS"], concepts_sets=None, concept_codes=["A0009", "A0209", "A3109"], From a2195407c5b6e4dfb301b06e9a61804fd77688b0 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 13:48:28 +0000 Subject: [PATCH 114/127] coverage --- tests/test_probes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_probes.py b/tests/test_probes.py index 65469d70..06a99497 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -108,7 +108,7 @@ stay_sources={"MCO": "MCO"}, provenance_sources=None, age_ranges=[18], - module="pandas", + module="koalas", drg_sources=None, ), dict( From a280fac2544109f142d7c84858315f297fe0e6b1 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 14:36:57 +0000 Subject: [PATCH 115/127] last fix --- edsteva/probes/utils/prepare_df.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/edsteva/probes/utils/prepare_df.py b/edsteva/probes/utils/prepare_df.py index dc68bed6..0b42634a 100644 --- a/edsteva/probes/utils/prepare_df.py +++ b/edsteva/probes/utils/prepare_df.py @@ -724,10 +724,8 @@ def prepare_cost(data: Data, drg_source): required_columns=cost_columns, df_name="cost", ) - cost = ( - data.cost[["cost_event_id", "drg_source_value"]] - .rename(columns={"cost_event_id": "visit_occurrence_id"}) - .drop_duplicates() + cost = data.cost[cost_columns].rename( + columns={"cost_event_id": "visit_occurrence_id"} ) return filter_table_by_type( From 7d835491bf339e84020a94f4ed1924f0daa51b4b Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 14:42:01 +0000 Subject: [PATCH 116/127] .lock --- poetry.lock | 3531 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3531 insertions(+) create mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..94cc6932 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3531 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "aiofiles" +version = "22.1.0" +description = "File support for asyncio." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, + {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, +] + +[[package]] +name = "aiosqlite" +version = "0.19.0" +description = "asyncio bridge to the standard sqlite3 module" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, + {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] +docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] + +[[package]] +name = "altair" +version = "5.0.1" +description = "Vega-Altair: A declarative statistical visualization library for Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, + {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +jinja2 = "*" +jsonschema = ">=3.0" +numpy = "*" +pandas = ">=0.18" +toolz = "*" +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] +doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] + +[[package]] +name = "anyio" +version = "3.7.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, + {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[package]] +name = "argon2-cffi" +version = "21.3.0" +description = "The secure Argon2 password hashing algorithm." +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] +docs = ["furo", "sphinx", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bleach" +version = "6.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +optional = false +python-versions = "*" +files = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] + +[[package]] +name = "catalogue" +version = "2.0.8" +description = "Super lightweight function registries for your library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, + {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} + +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.2.7" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "debugpy" +version = "1.6.7" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, + {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, + {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, + {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, + {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, + {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, + {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, + {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, + {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, + {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, + {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, + {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, + {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, + {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, + {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, + {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, + {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, + {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "distlib" +version = "0.3.6" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] + +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +optional = false +python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastjsonschema" +version = "2.17.1" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[package.dependencies] +cached-property = {version = ">=1.3.0", markers = "python_version < \"3.8\""} + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} + +[[package]] +name = "griffe" +version = "0.30.1" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.7" +files = [ + {file = "griffe-0.30.1-py3-none-any.whl", hash = "sha256:b2f3df6952995a6bebe19f797189d67aba7c860755d3d21cc80f64d076d0154c"}, + {file = "griffe-0.30.1.tar.gz", hash = "sha256:007cc11acd20becf1bb8f826419a52b9d403bbad9d8c8535699f5440ddc0a109"}, +] + +[package.dependencies] +cached-property = {version = "*", markers = "python_version < \"3.8\""} +colorama = ">=0.4" + +[[package]] +name = "identify" +version = "2.5.24" +description = "File identification library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.7.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "importlib-resources" +version = "5.12.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipykernel" +version = "6.16.2" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, + {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +debugpy = ">=1.0" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=17" +tornado = ">=6.1" +traitlets = ">=5.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, + {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +optional = false +python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.18.2" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.17.3" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] + +[package.dependencies] +attrs = ">=17.4.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jupyter-client" +version = "7.4.9" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, + {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, +] + +[package.dependencies] +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = "*" + +[package.extras] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "4.12.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, + {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, +] + +[package.dependencies] +pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = "*" + +[package.extras] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.6.3" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, + {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, +] + +[package.dependencies] +jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] + +[[package]] +name = "jupyter-server" +version = "1.24.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server-1.24.0-py3-none-any.whl", hash = "sha256:c88ddbe862966ea1aea8c3ccb89a5903abd8fbcfe5cd14090ef549d403332c37"}, + {file = "jupyter_server-1.24.0.tar.gz", hash = "sha256:23368e8e214baf82b313d4c5a0d828ca73015e1a192ce3829bd74e62fab8d046"}, +] + +[package.dependencies] +anyio = ">=3.1.0,<4" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbconvert = ">=6.4.4" +nbformat = ">=5.2.0" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=17" +Send2Trash = "*" +terminado = ">=0.8.3" +tornado = ">=6.1.0" +traitlets = ">=5.1" +websocket-client = "*" + +[package.extras] +test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "jupyter-server-fileid" +version = "0.9.0" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, + {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, +] + +[package.dependencies] +jupyter-events = ">=0.5.0" +jupyter-server = ">=1.15,<3" + +[package.extras] +cli = ["click"] +test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] + +[[package]] +name = "jupyter-server-ydoc" +version = "0.8.0" +description = "A Jupyter Server Extension Providing Y Documents." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, + {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, +] + +[package.dependencies] +jupyter-server-fileid = ">=0.6.0,<1" +jupyter-ydoc = ">=0.2.0,<0.4.0" +ypy-websocket = ">=0.8.2,<0.9.0" + +[package.extras] +test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] + +[[package]] +name = "jupyter-ydoc" +version = "0.2.4" +description = "Document structures for collaborative editing using Ypy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, + {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +dev = ["click", "jupyter-releaser"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] + +[[package]] +name = "jupyterlab" +version = "3.6.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, +] + +[package.dependencies] +ipython = "*" +jinja2 = ">=2.1" +jupyter-core = "*" +jupyter-server = ">=1.16.0,<3" +jupyter-server-ydoc = ">=0.8.0,<0.9.0" +jupyter-ydoc = ">=0.2.4,<0.3.0" +jupyterlab-server = ">=2.19,<3.0" +nbclassic = "*" +notebook = "<7" +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.1.0" + +[package.extras] +test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] + +[[package]] +name = "jupyterlab-rise" +version = "0.2.0" +description = "RISE: \"Live\" Reveal.js JupyterLab Slideshow extension." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_rise-0.2.0-py3-none-any.whl", hash = "sha256:0c320e090cd5dad7346ab3f80975bcd0c44b98b5add0434435ea737c92258c16"}, + {file = "jupyterlab_rise-0.2.0.tar.gz", hash = "sha256:4300b3a5a4e2e7f7bd7e43ddfe8eb4ae4ccc6c0aeb64bae38ab82db93c243ede"}, +] + +[package.dependencies] +jupyterlab = ">=3.0.0,<4" + +[package.extras] +test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-tornasync"] + +[[package]] +name = "jupyterlab-server" +version = "2.23.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "koalas" +version = "1.8.2" +description = "Koalas: pandas API on Apache Spark" +optional = false +python-versions = ">=3.5,<3.10" +files = [ + {file = "koalas-1.8.2-py3-none-any.whl", hash = "sha256:ebf00963ac604ee8763ab53ebb028bea3c7732a20cb10f4e52c9ae6a008a749f"}, + {file = "koalas-1.8.2.tar.gz", hash = "sha256:cd072f1a9ae97e87e85e53a1c8a3097777c76f45504e79782d0acff5282fe586"}, +] + +[package.dependencies] +numpy = ">=1.14" +pandas = ">=0.23.2" +pyarrow = ">=0.10" + +[package.extras] +matplotlib = ["matplotlib (>=3.0.0,<3.3.0)"] +mlflow = ["mlflow (>=1.0)"] +plotly = ["plotly (>=4.8)"] +spark = ["pyspark (>=2.4.0)"] + +[[package]] +name = "latexcodec" +version = "2.0.1" +description = "A lexer and codec to work with LaTeX code in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, + {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, +] + +[package.dependencies] +six = ">=1.4.1" + +[[package]] +name = "loguru" +version = "0.7.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, + {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] + +[[package]] +name = "markdown" +version = "3.3.7" +description = "Python implementation of Markdown." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, + {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mike" +version = "1.1.2" +description = "Manage multiple versions of your MkDocs-powered documentation" +optional = false +python-versions = "*" +files = [ + {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, + {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, +] + +[package.dependencies] +jinja2 = "*" +mkdocs = ">=1.0" +pyyaml = ">=5.1" +verspec = "*" + +[package.extras] +dev = ["coverage", "flake8 (>=3.0)", "shtab"] +test = ["coverage", "flake8 (>=3.0)", "shtab"] + +[[package]] +name = "mistune" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, +] + +[[package]] +name = "mkdocs" +version = "1.4.3" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, + {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1,<3.4" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-bibtex" +version = "2.11.0" +description = "An MkDocs plugin that enables managing citations with BibTex" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-bibtex-2.11.0.tar.gz", hash = "sha256:9ed78e1e7cfc8cd6f3f5ca75641dbcea8a011c36dbefcde041e36f8e6d0ed10f"}, +] + +[package.dependencies] +mkdocs = ">=1" +pybtex = ">=0.22" +pypandoc = ">=1.5" +requests = ">=2.8.1" +validators = ">=0.19.0" + +[[package]] +name = "mkdocs-charts-plugin" +version = "0.0.9" +description = "MkDocs plugin to add charts from data" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-charts-plugin-0.0.9.tar.gz", hash = "sha256:ffe6852b57e8c567bed36e3b476e8c447af5f74d89d4a9b182d8807088bd6b0c"}, + {file = "mkdocs_charts_plugin-0.0.9-py3-none-any.whl", hash = "sha256:9155f8c9b257dcb6cbc945d4932c8bb65f72cce6f6abcfaac7e32e1bca02e05b"}, +] + +[package.dependencies] +mkdocs = ">=1.1" +pymdown-extensions = ">=9.2" + +[[package]] +name = "mkdocs-gen-files" +version = "0.3.5" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "mkdocs-gen-files-0.3.5.tar.gz", hash = "sha256:d90d9e1676531a0bb96b1287dc28aa41162986de4dc3c00400214724761ff6ef"}, + {file = "mkdocs_gen_files-0.3.5-py3-none-any.whl", hash = "sha256:69562fddc662482e8f54a00a8b4ede5166ad5384ae4dbb0469f1f338ef3285ca"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3,<2.0.0" + +[[package]] +name = "mkdocs-img2fig-plugin" +version = "0.9.3" +description = "A MkDocs plugin that converts markdown encoded images into
elements." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mkdocs-img2fig-plugin-0.9.3.tar.gz", hash = "sha256:61399d71bb85525d74b1b9435dc6cea747c1af4eff1eb766b98b5605bb78fe4f"}, +] + +[package.dependencies] +mkdocs = "*" + +[[package]] +name = "mkdocs-literate-nav" +version = "0.4.1" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "mkdocs-literate-nav-0.4.1.tar.gz", hash = "sha256:9efe26b662f2f901cae5807bfd51446d30ea7e033c2bc43a15d6282c7dfac1ab"}, + {file = "mkdocs_literate_nav-0.4.1-py3-none-any.whl", hash = "sha256:a4b761792ba21defbe2dfd5e0de6ba451639e1ca0f0661c37eda83cc6261e4f9"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3,<2.0.0" + +[[package]] +name = "mkdocs-markdown-filter" +version = "0.1.1" +description = "A MkDocs plugin to add a markdown filter to jinja templates." +optional = false +python-versions = ">=2.7" +files = [ + {file = "mkdocs-markdown-filter-0.1.1.tar.gz", hash = "sha256:f8c0688cda5bb956ec9c68dfe779ff50454c13dc704f62bae264e9e45ab8f878"}, + {file = "mkdocs_markdown_filter-0.1.1-py2-none-any.whl", hash = "sha256:e9991c40beb89a9fd160d92ab4a15863761dc31706c0b151adf62aa863676e2e"}, +] + +[package.dependencies] +mkdocs = ">=1.0.4" + +[[package]] +name = "mkdocs-material" +version = "9.1.18" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, + {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, +] + +[package.dependencies] +colorama = ">=0.4" +jinja2 = ">=3.0" +markdown = ">=3.2" +mkdocs = ">=1.4.2" +mkdocs-material-extensions = ">=1.1" +pygments = ">=2.14" +pymdown-extensions = ">=9.9.1" +regex = ">=2022.4.24" +requests = ">=2.26" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.1.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, + {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, +] + +[[package]] +name = "mkdocs-section-index" +version = "0.3.4" +description = "MkDocs plugin to allow clickable sections that lead to an index page" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "mkdocs-section-index-0.3.4.tar.gz", hash = "sha256:050151bfe7c0e374f197335e0ecb19c45b53dbafc0f817aa203f0cc24bcf7d10"}, + {file = "mkdocs_section_index-0.3.4-py3-none-any.whl", hash = "sha256:214f7a6df9d35a5772e9577f3899ff3edd90044064589e6dd4d84615b72a8024"}, +] + +[package.dependencies] +mkdocs = ">=1.1,<2.0" + +[[package]] +name = "mkdocstrings" +version = "0.19.0" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, + {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, +] + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.8.2" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-python-0.8.2.tar.gz", hash = "sha256:b22528b7a7a0589d007eced019d97ad14de4eba4b2b9ba6a013bb66edc74ab43"}, + {file = "mkdocstrings_python-0.8.2-py3-none-any.whl", hash = "sha256:213d9592e66e084a9bd2fa4956d6294a3487c6dc9cc45164058d6317249b7b6e"}, +] + +[package.dependencies] +griffe = ">=0.24" +mkdocstrings = ">=0.19" + +[[package]] +name = "mknotebooks" +version = "0.7.1" +description = "Plugin for mkdocs to generate markdown documents from jupyter notebooks." +optional = false +python-versions = "*" +files = [ + {file = "mknotebooks-0.7.1-py3-none-any.whl", hash = "sha256:e2fa000b706683fc56b93adada7190a0da22ad85c4f1bfd5c4468cc3552b78e5"}, +] + +[package.dependencies] +gitpython = "*" +jupyter-client = "*" +markdown = ">=3.3.3" +mkdocs = ">=1.1" +nbconvert = ">=6.0.0" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nbclassic" +version = "1.0.0" +description = "Jupyter Notebook as a Jupyter Server extension." +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.1" +jupyter-server = ">=1.8" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +notebook-shim = ">=0.2.3" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] + +[[package]] +name = "nbclient" +version = "0.7.4" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, + {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.3" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.6.0" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, + {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["pyppeteer (>=1,<1.1)"] + +[[package]] +name = "nbformat" +version = "5.8.0" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, + {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, +] + +[package.dependencies] +fastjsonschema = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.5.6" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "notebook" +version = "6.5.4" +description = "A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbclassic = ">=0.4.7" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.19.5" +description = "NumPy is the fundamental package for array computing with Python." +optional = false +python-versions = ">=3.6" +files = [ + {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, + {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, + {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, + {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, + {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, + {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, + {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, + {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, + {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, + {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, + {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, + {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, + {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, + {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, +] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pandas" +version = "1.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, + {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, + {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, + {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, + {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, + {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, + {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, + {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, + {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, + {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, + {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, +] + +[package.dependencies] +numpy = ">=1.17.3" +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pandas" +version = "1.3.5" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, + {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, + {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, + {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, + {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, + {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, + {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, + {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, + {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, + {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, + {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, + {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.17.3", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, +] +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pgpasslib" +version = "1.1.0" +description = "Library for getting passwords from PostgreSQL password files" +optional = false +python-versions = "*" +files = [ + {file = "pgpasslib-1.1.0-py2.py3-none-any.whl", hash = "sha256:290084d524d07b8414d3457545c14ba7761cdcdc86350e9c9efbcb58210b77fc"}, + {file = "pgpasslib-1.1.0.tar.gz", hash = "sha256:f523050cb466f43526b2f4877bf2b1a1f09dfd7c7310e1e836c773f48bc10d27"}, +] + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] + +[[package]] +name = "platformdirs" +version = "3.8.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, + {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prometheus-client" +version = "0.17.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.38" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.5" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "psycopg2-binary" +version = "2.9.6" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, + {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, + {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, + {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, + {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, + {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, + {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "py4j" +version = "0.10.7" +description = "Enables Python programs to dynamically access arbitrary Java objects" +optional = false +python-versions = "*" +files = [ + {file = "py4j-0.10.7-py2.py3-none-any.whl", hash = "sha256:a950fe7de1bfd247a0a4dddb9118f332d22a89e01e0699135ea8038c15ee1293"}, + {file = "py4j-0.10.7.zip", hash = "sha256:721189616b3a7d28212dfb2e7c6a1dd5147b03105f1fc37ff2432acd0e863fa5"}, +] + +[[package]] +name = "pyarrow" +version = "0.16.0" +description = "Python library for Apache Arrow" +optional = false +python-versions = "*" +files = [ + {file = "pyarrow-0.16.0-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:db6d7ec70beeaea468c9c47241f95e2eecfaa2dbb4a27965bf1f952c12680fe9"}, + {file = "pyarrow-0.16.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:caf50dfcc709c7cfca4f816e9b4442222e9e6d3ec51c2618fb6bde8a73c59be4"}, + {file = "pyarrow-0.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:899d7316ea5610798c42e13ffb1d73323600168ccd6d8f0d58ce9e665b7a341f"}, + {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:94d89482bb5461c55b2ee33eafd44294c7f1244cc9e390ea7855f647957113f7"}, + {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8663ca4ca5c27fcb5c8bfc5c7b7e8780b9d699e47da1cad1b7b170eff98498b5"}, + {file = "pyarrow-0.16.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:5449408037c761a0622d13cc0c21756fcce2ea7346ea9c73e2abf8cdd8385ea2"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a609354433dd31ffc4c8de8637de915391fd6ff781b3d8c5d51d3f4eec6fcf39"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c1214f1689711d6562df70863cbd62d6f2a83e68214bb4c97c489f2f97ddeaf4"}, + {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:8a00a8497e2367c4f206bb8b7df01852d1e3f1261107ee77a217af654793ac0e"}, + {file = "pyarrow-0.16.0-cp35-cp35m-win_amd64.whl", hash = "sha256:df8ff1c5de2e454dcab9421d70d0db3985ad4efc40899d947687ca6d36846fc8"}, + {file = "pyarrow-0.16.0-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:7aebec0f1b76e73a6307b5027618c843eadb4dc4f6e1f08ca496a01a7273ac64"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd18bc60cef3e72f8082c46de4cfb0cf9fb294c0ff7a201e2b95924fb5d2d146"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:00abec64636aa506d948926ab5dd37fdfe8c0407b069602ba16c68c19ccb0257"}, + {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09e9046e3dc24b5c81d307d150b8c04b127aa9f9b3c6babcf13313f2448dd185"}, + {file = "pyarrow-0.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6c042f192c9a0ba33a927a8d0a1e6bfe3ab29aa48a74fc48040d32b07d65124"}, + {file = "pyarrow-0.16.0-cp37-cp37m-macosx_10_9_intel.whl", hash = "sha256:d746e5f34240199ef8afdd0efb391692b85b1ce3e098febd887efc2128da6570"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5fede6cb5d9fda323098042ece0597f40e5bd78520b87e7b8efdd8f062846ad8"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53d3f3684ca0cc12b64f2446022e2ab4a9b0b0976bba0f47ea53ea16b6af4ece"}, + {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:890b9a7d6e2c61968ba93e535fc1cf116e66eea2fcc2d6b2503b44e190f3bc47"}, + {file = "pyarrow-0.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8d212c2c93706fafff39a71bee3d42dfd1ca393fda31ce5e3a05c620e1886a7f"}, + {file = "pyarrow-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcd9347797578b0f65a6fb0cb76f462d5d0d63148f51ac8f9c9b5be9acc3f40e"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ac83d595f9b469bea712ce998270038b08b40794abd7374e4bce2ecf5ee2c1cb"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:fab386e5403cec3f66e1ac1375f3648351f9415f28d7740ee0f813d1fc0a326a"}, + {file = "pyarrow-0.16.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:5af1cc49225aaf82a3dfbda22e5533d339f540921ea001ba36b0d6d5ad364e2b"}, + {file = "pyarrow-0.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ff6e7b0411e3e163cc6465f1ed6a680f0c78b4ff6a4f507d29eb4ed65860557"}, + {file = "pyarrow-0.16.0.tar.gz", hash = "sha256:bb6bb7ba1b6a1c3c94cc0d0068c96df9498c973ad0ae6ca398164d339b704c97"}, +] + +[package.dependencies] +numpy = ">=1.14" +six = ">=1.0.0" + +[[package]] +name = "pybtex" +version = "0.24.0" +description = "A BibTeX-compatible bibliography processor in Python" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +files = [ + {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, + {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, +] + +[package.dependencies] +latexcodec = ">=1.0.4" +PyYAML = ">=3.01" +six = "*" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pygments" +version = "2.15.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pylic" +version = "3.5.0" +description = "A Python license checker" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pylic-3.5.0-py3-none-any.whl", hash = "sha256:f4ca7f9d1fe2c5be7601ba2b8388294aad323161d2c62253ea0d53b9ac9b42f4"}, + {file = "pylic-3.5.0.tar.gz", hash = "sha256:78a11f86425ec03d1b2a806b5359bf92ff1239e710a1b302f89aa05c0906a535"}, +] + +[package.dependencies] +importlib-metadata = ">=6.0.0,<7.0.0" +toml = ">=0.10.2,<0.11.0" + +[[package]] +name = "pymdown-extensions" +version = "10.0.1" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, + {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, +] + +[package.dependencies] +markdown = ">=3.2" +pyyaml = "*" + +[[package]] +name = "pypandoc" +version = "1.7.5" +description = "Thin wrapper for pandoc." +optional = false +python-versions = "^2.7 || ^3.6" +files = [ + {file = "pypandoc-1.7.5.tar.gz", hash = "sha256:802c26aae17b64136c6d006949d8ce183a7d4d9fbd4f2d051e66f4fb9f45ca50"}, +] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, +] + +[[package]] +name = "pyspark" +version = "2.4.8" +description = "Apache Spark Python API" +optional = false +python-versions = "*" +files = [ + {file = "pyspark-2.4.8.tar.gz", hash = "sha256:3a19b71b8dc8dd91ebc943604a05e1ab01bce052456d42937035632d852d78dc"}, +] + +[package.dependencies] +py4j = "0.10.7" + +[package.extras] +ml = ["numpy (>=1.7)"] +mllib = ["numpy (>=1.7)"] +sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] + +[[package]] +name = "pytest" +version = "7.4.0" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "3.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-html" +version = "3.2.0" +description = "pytest plugin for generating HTML reports" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, + {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, +] + +[package.dependencies] +py = ">=1.8.2" +pytest = ">=5.0,<6.0.0 || >6.0.0" +pytest-metadata = "*" + +[[package]] +name = "pytest-metadata" +version = "3.0.0" +description = "pytest plugin for test session metadata" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest_metadata-3.0.0-py3-none-any.whl", hash = "sha256:a17b1e40080401dc23177599208c52228df463db191c1a573ccdffacd885e190"}, + {file = "pytest_metadata-3.0.0.tar.gz", hash = "sha256:769a9c65d2884bd583bc626b0ace77ad15dbe02dd91a9106d47fd46d9c2569ca"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.10" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, + {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, + {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, + {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, + {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, + {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, +] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "pyzmq" +version = "25.1.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "regex" +version = "2023.6.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.6" +files = [ + {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, + {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, + {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, + {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, + {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, + {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, + {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, + {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, + {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, + {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, + {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, + {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, + {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, + {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, + {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, + {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "ruff" +version = "0.0.275" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.275-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5e6554a072e7ce81eb6f0bec1cebd3dcb0e358652c0f4900d7d630d61691e914"}, + {file = "ruff-0.0.275-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1cc599022fe5ffb143a965b8d659eb64161ab8ab4433d208777eab018a1aab67"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5206fc1cd8c1c1deadd2e6360c0dbcd690f1c845da588ca9d32e4a764a402c60"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c4e6468da26f77b90cae35319d310999f471a8c352998e9b39937a23750149e"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbdea02942131dbc15dd45f431d152224f15e1dd1859fcd0c0487b658f60f1a"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22efd9f41af27ef8fb9779462c46c35c89134d33e326c889971e10b2eaf50c63"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c09662112cfa22d7467a19252a546291fd0eae4f423e52b75a7a2000a1894db"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80043726662144876a381efaab88841c88e8df8baa69559f96b22d4fa216bef1"}, + {file = "ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5859ee543b01b7eb67835dfd505faa8bb7cc1550f0295c92c1401b45b42be399"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8ace4d40a57b5ea3c16555f25a6b16bc5d8b2779ae1912ce2633543d4e9b1da"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8347fc16aa185aae275906c4ac5b770e00c896b6a0acd5ba521f158801911998"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ec43658c64bfda44fd84bbea9da8c7a3b34f65448192d1c4dd63e9f4e7abfdd4"}, + {file = "ruff-0.0.275-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:508b13f7ca37274cceaba4fb3ea5da6ca192356323d92acf39462337c33ad14e"}, + {file = "ruff-0.0.275-py3-none-win32.whl", hash = "sha256:6afb1c4422f24f361e877937e2a44b3f8176774a476f5e33845ebfe887dd5ec2"}, + {file = "ruff-0.0.275-py3-none-win_amd64.whl", hash = "sha256:d9b264d78621bf7b698b6755d4913ab52c19bd28bee1a16001f954d64c1a1220"}, + {file = "ruff-0.0.275-py3-none-win_arm64.whl", hash = "sha256:a19ce3bea71023eee5f0f089dde4a4272d088d5ac0b675867e074983238ccc65"}, + {file = "ruff-0.0.275.tar.gz", hash = "sha256:a63a0b645da699ae5c758fce19188e901b3033ec54d862d93fcd042addf7f38d"}, +] + +[[package]] +name = "send2trash" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "68.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "soupsieve" +version = "2.4.1" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, +] + +[[package]] +name = "terminado" +version = "0.17.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] + +[[package]] +name = "termynal" +version = "0.2.0" +description = "" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "termynal-0.2.0-py3-none-any.whl", hash = "sha256:1d8f73c9c21414253e812f1684431cf7eda5d9f4539aa7479e055b5cac33873f"}, + {file = "termynal-0.2.0.tar.gz", hash = "sha256:b83642fff7a5b93bb08aa3655754e0410f124f2e75cd34ce1b161a90fc621f8e"}, +] + +[package.dependencies] +markdown = "*" + +[package.extras] +mkdocs = ["mkdocs"] + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.5" +files = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] + +[[package]] +name = "tornado" +version = "6.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.7" +files = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] + +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.7" +files = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + +[[package]] +name = "typed-ast" +version = "1.5.4" +description = "a fork of Python 2 and 3 ast modules with type comment support" +optional = false +python-versions = ">=3.6" +files = [ + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.0.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "validators" +version = "0.20.0" +description = "Python Data Validation for Humans™." +optional = false +python-versions = ">=3.4" +files = [ + {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, +] + +[package.dependencies] +decorator = ">=3.4.0" + +[package.extras] +test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] + +[[package]] +name = "verspec" +version = "0.1.0" +description = "Flexible version handling" +optional = false +python-versions = "*" +files = [ + {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, + {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, +] + +[package.extras] +test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] + +[[package]] +name = "virtualenv" +version = "20.23.1" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, + {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, +] + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.12,<4" +importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} +platformdirs = ">=3.5.1,<4" + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] + +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.1" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, +] + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "y-py" +version = "0.5.9" +description = "Python bindings for the Y-CRDT built from yrs (Rust)" +optional = false +python-versions = "*" +files = [ + {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, + {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, + {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, + {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, + {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, + {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, + {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, + {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, + {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, + {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, + {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, + {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, + {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, +] + +[[package]] +name = "ypy-websocket" +version = "0.8.2" +description = "WebSocket connector for Ypy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, + {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, +] + +[package.dependencies] +aiofiles = ">=22.1.0,<23" +aiosqlite = ">=0.17.0,<1" +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "~3.7.1" +content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" From 053fed74a55819aea508439595998fecd92ead53 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 15:03:08 +0000 Subject: [PATCH 117/127] contributing --- contributing.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contributing.md b/contributing.md index 4c5bf77f..1e143f36 100644 --- a/contributing.md +++ b/contributing.md @@ -61,9 +61,10 @@ Ready to contribute? Here's how to set up `edsteva` for local development.
```console - $ poetry install --only docs - $ poetry config experimental.new-installer false + $ pip install pypandoc==1.7.5 + $ pip install pyspark==2.4.8 $ poetry install + $ pip uninstall pypandoc color:lightblue Updating dependencies color:lightblue Resolving dependencies... (25.3s) From 8df15946c2341bdb26a4cfa5546d07b74e0ffbb1 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 15:08:42 +0000 Subject: [PATCH 118/127] .lock --- poetry.lock | 1236 +++++++++++++++++++++++++++------------------------ 1 file changed, 649 insertions(+), 587 deletions(-) diff --git a/poetry.lock b/poetry.lock index 94cc6932..47640d31 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,13 +55,13 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " [[package]] name = "anyio" -version = "3.7.0" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] @@ -71,7 +71,7 @@ sniffio = ">=1.1" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] @@ -88,13 +88,13 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] @@ -102,9 +102,10 @@ argon2-cffi-bindings = "*" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" @@ -303,13 +304,13 @@ files = [ [[package]] name = "catalogue" -version = "2.0.8" +version = "2.0.9" description = "Super lightweight function registries for your library" optional = false python-versions = ">=3.6" files = [ - {file = "catalogue-2.0.8-py3-none-any.whl", hash = "sha256:2d786e229d8d202b4f8a2a059858e45a2331201d831e39746732daa704b99f69"}, - {file = "catalogue-2.0.8.tar.gz", hash = "sha256:b325c77659208bfb6af1b0d93b1a1aa4112e1bb29a4c5ced816758a722f0e388"}, + {file = "catalogue-2.0.9-py3-none-any.whl", hash = "sha256:5817ce97de17ace366a15eadd4987ac022b28f262006147549cdb3467265dc4d"}, + {file = "catalogue-2.0.9.tar.gz", hash = "sha256:d204c423ec436f2545341ec8a0e026ae033b3ce5911644f95e94d6b887cf631c"}, ] [package.dependencies] @@ -318,13 +319,13 @@ zipp = {version = ">=0.5", markers = "python_version < \"3.8\""} [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -416,97 +417,97 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -601,29 +602,33 @@ toml = ["tomli"] [[package]] name = "debugpy" -version = "1.6.7" +version = "1.7.0" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.7.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:17ad9a681aca1704c55b9a5edcb495fa8f599e4655c9872b7f9cf3dc25890d48"}, + {file = "debugpy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1285920a3f9a75f5d1acf59ab1b9da9ae6eb9a05884cd7674f95170c9cafa4de"}, + {file = "debugpy-1.7.0-cp310-cp310-win32.whl", hash = "sha256:a6f43a681c5025db1f1c0568069d1d1bad306a02e7c36144912b26d9c90e4724"}, + {file = "debugpy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:9e9571d831ad3c75b5fb6f3efcb71c471cf2a74ba84af6ac1c79ce00683bed4b"}, + {file = "debugpy-1.7.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:538765a41198aa88cc089295b39c7322dd598f9ef1d52eaae12145c63bf9430a"}, + {file = "debugpy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7e8cf91f8f3f9b5fad844dd88427b85d398bda1e2a0cd65d5a21312fcbc0c6f"}, + {file = "debugpy-1.7.0-cp311-cp311-win32.whl", hash = "sha256:18a69f8e142a716310dd0af6d7db08992aed99e2606108732efde101e7c65e2a"}, + {file = "debugpy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7515a5ba5ee9bfe956685909c5f28734c1cecd4ee813523363acfe3ca824883a"}, + {file = "debugpy-1.7.0-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:bc8da67ade39d9e75608cdb8601d07e63a4e85966e0572c981f14e2cf42bcdef"}, + {file = "debugpy-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5036e918c6ba8fc4c4f1fd0207d81db634431a02f0dc2ba51b12fd793c8c9de"}, + {file = "debugpy-1.7.0-cp37-cp37m-win32.whl", hash = "sha256:d5be95b3946a4d7b388e45068c7b75036ac5a610f41014aee6cafcd5506423ad"}, + {file = "debugpy-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0e90314a078d4e3f009520c8387aba8f74c3034645daa7a332a3d1bb81335756"}, + {file = "debugpy-1.7.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:1565fd904f9571c430adca597771255cff4f92171486fced6f765dcbdfc8ec8d"}, + {file = "debugpy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6516f36a2e95b3be27f171f12b641e443863f4ad5255d0fdcea6ae0be29bb912"}, + {file = "debugpy-1.7.0-cp38-cp38-win32.whl", hash = "sha256:2b0e489613bc066051439df04c56777ec184b957d6810cb65f235083aef7a0dc"}, + {file = "debugpy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:7bf0b4bbd841b2397b6a8de15da9227f1164f6d43ceee971c50194eaed930a9d"}, + {file = "debugpy-1.7.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:ad22e1095b9977af432465c1e09132ba176e18df3834b1efcab1a449346b350b"}, + {file = "debugpy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f625e427f21423e5874139db529e18cb2966bdfcc1cb87a195538c5b34d163d1"}, + {file = "debugpy-1.7.0-cp39-cp39-win32.whl", hash = "sha256:18bca8429d6632e2d3435055416d2d88f0309cc39709f4f6355c8d412cc61f24"}, + {file = "debugpy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:dc8a12ac8b97ef3d6973c6679a093138c7c9b03eb685f0e253269a195f651559"}, + {file = "debugpy-1.7.0-py2.py3-none-any.whl", hash = "sha256:f6de2e6f24f62969e0f0ef682d78c98161c4dca29e9fb05df4d2989005005502"}, + {file = "debugpy-1.7.0.zip", hash = "sha256:676911c710e85567b17172db934a71319ed9d995104610ce23fd74a07f66e6f6"}, ] [[package]] @@ -650,13 +655,13 @@ files = [ [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.7" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [[package]] @@ -672,13 +677,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -686,13 +691,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -760,13 +765,13 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.31" +version = "3.1.35" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, - {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, + {file = "GitPython-3.1.35-py3-none-any.whl", hash = "sha256:c19b4292d7a1d3c0f653858db273ff8a6614100d1eb1528b014ec97286193c09"}, + {file = "GitPython-3.1.35.tar.gz", hash = "sha256:9cbefbd1789a5fe9bcf621bb34d3f441f3a90c8461d377f84eda73e721d9b06b"}, ] [package.dependencies] @@ -953,21 +958,21 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1181,22 +1186,22 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes [[package]] name = "jupyter-ydoc" -version = "0.2.4" +version = "0.2.5" description = "Document structures for collaborative editing using Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, - {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, + {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, + {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, ] [package.dependencies] importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] [[package]] name = "jupyterlab" @@ -1256,13 +1261,13 @@ test = ["coverage", "hatch", "pytest", "pytest-asyncio", "pytest-cov", "pytest-t [[package]] name = "jupyterlab-server" -version = "2.23.0" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -1278,7 +1283,7 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "koalas" @@ -1600,13 +1605,13 @@ mkdocs = ">=1.0.4" [[package]] name = "mkdocs-material" -version = "9.1.18" +version = "9.1.20" description = "Documentation that simply works" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, - {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, + {file = "mkdocs_material-9.1.20-py3-none-any.whl", hash = "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc"}, + {file = "mkdocs_material-9.1.20.tar.gz", hash = "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7"}, ] [package.dependencies] @@ -1831,13 +1836,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.7" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, ] [[package]] @@ -2070,13 +2075,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] @@ -2128,21 +2133,21 @@ files = [ [[package]] name = "platformdirs" -version = "3.8.0" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, - {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.dependencies] -typing-extensions = {version = ">=4.6.3", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" @@ -2183,13 +2188,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.0" +version = "0.17.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, - {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, ] [package.extras] @@ -2197,13 +2202,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -2237,73 +2242,71 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psycopg2-binary" -version = "2.9.6" +version = "2.9.7" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, + {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, ] [[package]] @@ -2341,42 +2344,45 @@ files = [ [[package]] name = "pyarrow" -version = "0.16.0" +version = "8.0.0" description = "Python library for Apache Arrow" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "pyarrow-0.16.0-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:db6d7ec70beeaea468c9c47241f95e2eecfaa2dbb4a27965bf1f952c12680fe9"}, - {file = "pyarrow-0.16.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:caf50dfcc709c7cfca4f816e9b4442222e9e6d3ec51c2618fb6bde8a73c59be4"}, - {file = "pyarrow-0.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:899d7316ea5610798c42e13ffb1d73323600168ccd6d8f0d58ce9e665b7a341f"}, - {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:94d89482bb5461c55b2ee33eafd44294c7f1244cc9e390ea7855f647957113f7"}, - {file = "pyarrow-0.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8663ca4ca5c27fcb5c8bfc5c7b7e8780b9d699e47da1cad1b7b170eff98498b5"}, - {file = "pyarrow-0.16.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:5449408037c761a0622d13cc0c21756fcce2ea7346ea9c73e2abf8cdd8385ea2"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a609354433dd31ffc4c8de8637de915391fd6ff781b3d8c5d51d3f4eec6fcf39"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c1214f1689711d6562df70863cbd62d6f2a83e68214bb4c97c489f2f97ddeaf4"}, - {file = "pyarrow-0.16.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:8a00a8497e2367c4f206bb8b7df01852d1e3f1261107ee77a217af654793ac0e"}, - {file = "pyarrow-0.16.0-cp35-cp35m-win_amd64.whl", hash = "sha256:df8ff1c5de2e454dcab9421d70d0db3985ad4efc40899d947687ca6d36846fc8"}, - {file = "pyarrow-0.16.0-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:7aebec0f1b76e73a6307b5027618c843eadb4dc4f6e1f08ca496a01a7273ac64"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd18bc60cef3e72f8082c46de4cfb0cf9fb294c0ff7a201e2b95924fb5d2d146"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:00abec64636aa506d948926ab5dd37fdfe8c0407b069602ba16c68c19ccb0257"}, - {file = "pyarrow-0.16.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09e9046e3dc24b5c81d307d150b8c04b127aa9f9b3c6babcf13313f2448dd185"}, - {file = "pyarrow-0.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6c042f192c9a0ba33a927a8d0a1e6bfe3ab29aa48a74fc48040d32b07d65124"}, - {file = "pyarrow-0.16.0-cp37-cp37m-macosx_10_9_intel.whl", hash = "sha256:d746e5f34240199ef8afdd0efb391692b85b1ce3e098febd887efc2128da6570"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5fede6cb5d9fda323098042ece0597f40e5bd78520b87e7b8efdd8f062846ad8"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53d3f3684ca0cc12b64f2446022e2ab4a9b0b0976bba0f47ea53ea16b6af4ece"}, - {file = "pyarrow-0.16.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:890b9a7d6e2c61968ba93e535fc1cf116e66eea2fcc2d6b2503b44e190f3bc47"}, - {file = "pyarrow-0.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8d212c2c93706fafff39a71bee3d42dfd1ca393fda31ce5e3a05c620e1886a7f"}, - {file = "pyarrow-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcd9347797578b0f65a6fb0cb76f462d5d0d63148f51ac8f9c9b5be9acc3f40e"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ac83d595f9b469bea712ce998270038b08b40794abd7374e4bce2ecf5ee2c1cb"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:fab386e5403cec3f66e1ac1375f3648351f9415f28d7740ee0f813d1fc0a326a"}, - {file = "pyarrow-0.16.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:5af1cc49225aaf82a3dfbda22e5533d339f540921ea001ba36b0d6d5ad364e2b"}, - {file = "pyarrow-0.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ff6e7b0411e3e163cc6465f1ed6a680f0c78b4ff6a4f507d29eb4ed65860557"}, - {file = "pyarrow-0.16.0.tar.gz", hash = "sha256:bb6bb7ba1b6a1c3c94cc0d0068c96df9498c973ad0ae6ca398164d339b704c97"}, -] - -[package.dependencies] -numpy = ">=1.14" -six = ">=1.0.0" + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, + {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, + {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, + {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, + {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, + {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, +] + +[package.dependencies] +numpy = ">=1.16.6" [[package]] name = "pybtex" @@ -2410,13 +2416,13 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2439,19 +2445,22 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "pymdown-extensions" -version = "10.0.1" +version = "10.2.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, - {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, + {file = "pymdown_extensions-10.2.1-py3-none-any.whl", hash = "sha256:bded105eb8d93f88f2f821f00108cb70cef1269db6a40128c09c5f48bfc60ea4"}, + {file = "pymdown_extensions-10.2.1.tar.gz", hash = "sha256:d0c534b4a5725a4be7ccef25d65a4c97dba58b54ad7c813babf0eb5ba9c81591"}, ] [package.dependencies] markdown = ">=3.2" pyyaml = "*" +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pypandoc" version = "1.7.5" @@ -2518,13 +2527,13 @@ sql = ["pandas (>=0.19.2)", "pyarrow (>=0.8.0)"] [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, ] [package.dependencies] @@ -2617,13 +2626,13 @@ files = [ [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -2666,51 +2675,51 @@ files = [ [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] @@ -2729,88 +2738,104 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.1" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] @@ -2818,99 +2843,99 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2023.6.3" +version = "2023.8.8" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, ] [[package]] @@ -3169,6 +3194,26 @@ files = [ {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "traitlets" version = "5.9.0" @@ -3186,35 +3231,52 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typed-ast" -version = "1.5.4" +version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" optional = false python-versions = ">=3.6" files = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, + {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, + {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, + {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, + {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, + {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, + {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, + {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, + {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, + {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, ] [[package]] @@ -3244,13 +3306,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.3" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] @@ -3291,24 +3353,24 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "virtualenv" -version = "20.23.1" +version = "20.24.5" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, - {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, + {file = "virtualenv-20.24.5-py3-none-any.whl", hash = "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b"}, + {file = "virtualenv-20.24.5.tar.gz", hash = "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.12,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" importlib-metadata = {version = ">=6.6", markers = "python_version < \"3.8\""} -platformdirs = ">=3.5.1,<4" +platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "watchdog" @@ -3418,94 +3480,94 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [[package]] name = "y-py" -version = "0.5.9" +version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" optional = false python-versions = "*" files = [ - {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, - {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, - {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, - {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, - {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, - {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, - {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, - {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, - {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, - {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, - {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, - {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, - {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, - {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, + {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, + {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, + {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, + {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, + {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, + {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, + {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, + {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, + {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, + {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, + {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, + {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, ] [[package]] name = "ypy-websocket" -version = "0.8.2" +version = "0.8.4" description = "WebSocket connector for Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, - {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, + {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, + {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, ] [package.dependencies] aiofiles = ">=22.1.0,<23" aiosqlite = ">=0.17.0,<1" -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] @@ -3528,4 +3590,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "~3.7.1" -content-hash = "445175ea41b984b379542cb5e19377d8739147c15a1bf88fa4b28c63af5007b7" +content-hash = "7296cb655e45865fd5b477dba20918937ec064909a2ed58b4915fe6dd7137094" From a6e4dec83f9c0ed9bec34e6e742ce4646aaf2014 Mon Sep 17 00:00:00 2001 From: svittoz Date: Mon, 11 Sep 2023 16:00:05 +0000 Subject: [PATCH 119/127] dependencies --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4333a71f..826e7d53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -110,7 +110,6 @@ safe_licenses = [ "Apache License 2.0", "http://www.apache.org/licenses/LICENSE-2.0", "Mozilla Public License 2.0 (MPL 2.0)", - "Eclipse Public License 2.0 (EPL-2.0)", "GNU Library or Lesser General Public License (LGPL)", ] unsafe_packages = ["ypy-websocket"] From e0ec75c5b08b02c5342de6b41a123ec3979fd749 Mon Sep 17 00:00:00 2001 From: svittoz Date: Wed, 13 Sep 2023 14:16:08 +0000 Subject: [PATCH 120/127] adding a test on biology pipeline --- edsteva/io/synthetic/biology.py | 194 ++++++++++++++---------------- edsteva/io/synthetic/synthetic.py | 57 ++++----- tests/test_model.py | 46 ++++++- 3 files changed, 160 insertions(+), 137 deletions(-) diff --git a/edsteva/io/synthetic/biology.py b/edsteva/io/synthetic/biology.py index cc50c8bc..4e47739a 100644 --- a/edsteva/io/synthetic/biology.py +++ b/edsteva/io/synthetic/biology.py @@ -2,23 +2,14 @@ import pandas as pd from loguru import logger -from edsteva.io.synthetic.utils import ( - generate_events_after_t0, - generate_events_after_t1, - generate_events_around_t0, - generate_events_around_t1, - generate_events_before_t0, -) - def generate_bio( generator: np.random.Generator, - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, + visit_care_site, + t0_visit, + date_col: str, bio_date_col: str, + id_visit_col, unit: str, concept_code: str, mode: str, @@ -26,24 +17,22 @@ def generate_bio( if mode == "step": return _generate_bio_step( generator=generator, - t_start=t_start, - t_end=t_end, - n_events=n_events, - increase_time=increase_time, - increase_ratio=increase_ratio, + visit_care_site=visit_care_site, + t0_visit=t0_visit, + date_col=date_col, bio_date_col=bio_date_col, + id_visit_col=id_visit_col, unit=unit, concept_code=concept_code, ) if mode == "rect": return _generate_bio_rect( generator=generator, - t_start=t_start, - t_end=t_end, - n_events=n_events, - increase_time=increase_time, - increase_ratio=increase_ratio, + visit_care_site=visit_care_site, + t0_visit=t0_visit, + date_col=date_col, bio_date_col=bio_date_col, + id_visit_col=id_visit_col, unit=unit, concept_code=concept_code, ) @@ -51,101 +40,104 @@ def generate_bio( def _generate_bio_step( generator: np.random.Generator, - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, + visit_care_site, + t0_visit, + date_col: str, bio_date_col: str, + id_visit_col, unit: str, concept_code: str, ): - t0 = generator.integers(t_start + increase_time, t_end - increase_time) - params = dict( - generator=generator, - t_start=t_start, - t_end=t_end, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, + t_end = visit_care_site[date_col].max() + t0 = generator.integers(t0_visit, t_end) + c_before = generator.uniform(0, 0.01) + c_after = generator.uniform(0.8, 1) + + measurement_before_t0_visit = ( + visit_care_site[visit_care_site[date_col] <= t0_visit][[id_visit_col, date_col]] + .sample(frac=c_before) + .rename(columns={date_col: bio_date_col}) ) - df = pd.concat( - [ - generate_events_before_t0(**params), - generate_events_after_t0(**params), - generate_events_around_t0(**params), - ] - ).to_frame() - df.columns = [bio_date_col] - df["unit_source_value"] = unit - df["measurement_source_concept_id"] = concept_code - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - logger.debug("Generate measurement deploying as step function") + # Stratify visit between t0_visit and t0 to + # ensure that these elements are represented + # in the final measurements dataset. + + measurement_before_t0 = ( + visit_care_site[ + (visit_care_site[date_col] <= t0) & (visit_care_site[date_col] > t0_visit) + ][[id_visit_col, date_col]] + .sample(frac=c_before) + .rename(columns={date_col: bio_date_col}) + ) + + measurement_after_t0 = ( + visit_care_site[visit_care_site[date_col] > t0][[id_visit_col, date_col]] + .sample(frac=c_after) + .rename(columns={date_col: bio_date_col}) + ) + + measurement = pd.concat( + [measurement_before_t0_visit, measurement_before_t0, measurement_after_t0] + ) + + measurement[bio_date_col] = pd.to_datetime(measurement[bio_date_col], unit="s") + measurement["unit_source_value"] = unit + measurement["measurement_source_concept_id"] = concept_code + measurement["t_0"] = t0 + + logger.debug("Generate synthetic measurement deploying as step function") - return df + return measurement def _generate_bio_rect( generator: np.random.Generator, - t_start: int, - t_end: int, - n_events: int, - increase_time: int, - increase_ratio: float, + visit_care_site, + t0_visit, + date_col: str, bio_date_col: str, + id_visit_col, unit: str, concept_code: str, ): - t0 = generator.integers( - t_start + increase_time, (t_end + t_start) / 2 - increase_time - ) - t1 = generator.integers( - (t_end + t_start) / 2 + increase_time, t_end - increase_time + t1_visit = visit_care_site["t_1_min"].max() + t0 = generator.integers(t0_visit, t0_visit + (t1_visit - t0_visit) / 3) + t1 = generator.integers(t0_visit + 2 * (t1_visit - t0_visit) / 3, t1_visit) + c_out = generator.uniform(0, 0.1) + c_in = generator.uniform(0.8, 1) + + measurement_before_t0 = ( + visit_care_site[visit_care_site[date_col] <= t0][[id_visit_col, date_col]] + .sample(frac=c_out) + .rename(columns={date_col: bio_date_col}) ) - t0_params = dict( - generator=generator, - t_start=t_start, - t_end=t1 - increase_time / 2, - n_events=n_events, - t0=t0, - increase_ratio=increase_ratio, - increase_time=increase_time, + measurement_between_t0_t1 = ( + visit_care_site[ + (visit_care_site[date_col] > t0) & (visit_care_site[date_col] <= t1) + ][[id_visit_col, date_col]] + .sample(frac=c_in) + .rename(columns={date_col: bio_date_col}) ) - before_t0 = generate_events_before_t0(**t0_params) - around_t0 = generate_events_around_t0(**t0_params) - # Raise n_visit to enforce a rectangle shape - between_t0_t1 = generate_events_after_t0(**t0_params) - t1_params = dict( - generator=generator, - t_start=t_start, - t_end=t_end, - n_events=n_events, - t1=t1, - increase_time=increase_time, - increase_ratio=increase_ratio, + + measurement_after_t1 = ( + visit_care_site[(visit_care_site[date_col] > t1)][[id_visit_col, date_col]] + .sample(frac=c_out) + .rename(columns={date_col: bio_date_col}) ) - around_t1 = generate_events_around_t1(**t1_params) - after_t1 = generate_events_after_t1(**t1_params) - df = pd.concat( + measurement = pd.concat( [ - before_t0, - around_t0, - between_t0_t1, - around_t1, - after_t1, + measurement_before_t0, + measurement_between_t0_t1, + measurement_after_t1, ] - ).to_frame() - - df.columns = [bio_date_col] - df["unit_source_value"] = unit - df["measurement_source_concept_id"] = concept_code - df["t_0_min"] = t0 - increase_time / 2 - df["t_0_max"] = t0 + increase_time / 2 - df["t_1_min"] = t1 - increase_time / 2 - df["t_1_max"] = t1 + increase_time / 2 - logger.debug("Generate measurement deploying as rectangle function") - - return df + ) + + measurement[bio_date_col] = pd.to_datetime(measurement[bio_date_col], unit="s") + measurement["unit_source_value"] = unit + measurement["measurement_source_concept_id"] = concept_code + measurement["t_0"] = t0 + measurement["t_1"] = t1 + logger.debug("Generate synthetic measurement deploying as rectangle function") + + return measurement diff --git a/edsteva/io/synthetic/synthetic.py b/edsteva/io/synthetic/synthetic.py index 2d2d847d..d33b6456 100644 --- a/edsteva/io/synthetic/synthetic.py +++ b/edsteva/io/synthetic/synthetic.py @@ -616,8 +616,8 @@ def _generate_measurement( mean_measurement: int = 1000, units: List[str] = ["g", "g/l", "mol", "s"], ): - t_min = self.t_min.timestamp() - t_max = self.t_max.timestamp() + self.t_min.timestamp() + self.t_max.timestamp() measurements = [] visit_occurrence = visit_occurrence.sample(frac=0.9) for concept_name in src_concept_name: @@ -626,50 +626,37 @@ def _generate_measurement( mean_value = (1 + units.index(unit)) * 2 std_value = 1 for care_site_id in hospital_ids: - t_start = t_min + self.generator.integers(0, (t_max - t_min) / 20) - t_end = t_max - self.generator.integers(0, (t_max - t_min) / 20) - valid_measurements = int( - self.generator.normal(mean_measurement, mean_measurement / 5) - ) - missing_value = int(self.generator.uniform(1, valid_measurements / 10)) - n_measurements = valid_measurements + missing_value - increase_time = self.generator.integers( - (t_end - t_start) / 100, (t_end - t_start) / 10 + visit_care_site = visit_occurrence[ + visit_occurrence.care_site_id == care_site_id + ].reset_index(drop=True) + visit_care_site[self.date_col] = ( + visit_care_site[self.date_col].view("int64") // 10**9 ) - increase_ratio = self.generator.uniform(150, 200) - concept_code = concept_name.split("_")[1] - unit = concept_name.split("_")[-1] - mean_value = (1 + units.index(unit)) * 2 - std_value = 1 + + t0_visit = visit_care_site["t_0_max"].max() params = dict( generator=self.generator, - t_start=t_start, - t_end=t_end, - n_events=n_measurements, - increase_ratio=increase_ratio, - increase_time=increase_time, + visit_care_site=visit_care_site, + date_col=self.date_col, bio_date_col=self.bio_date_col, + id_visit_col=self.id_visit_col, unit=unit, concept_code=concept_code, + t0_visit=t0_visit, mode=self.mode, ) + measurement = generate_bio(**params) - visit_care_site = visit_occurrence[ - visit_occurrence.care_site_id == care_site_id - ] - measurement[self.id_visit_col] = ( - visit_care_site[self.id_visit_col] - .sample( - n=measurement.shape[0], - replace=True, - ) - .reset_index(drop=True) + + measurement["value_as_number"] = self.generator.normal( + mean_value, std_value, measurement.shape[0] ) - measurement["value_as_number"] = [None] * missing_value + list( - self.generator.normal( - mean_value, std_value, measurement.shape[0] - missing_value - ) + + valid_measurements = ( + self.generator.uniform(0, 1, measurement.shape[0]) > 0.01 ) + measurement.loc[~valid_measurements, "value_as_number"] = None + measurements.append(measurement) measurements = pd.concat(measurements).reset_index(drop=True) diff --git a/tests/test_model.py b/tests/test_model.py index f2774247..53b8746b 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -7,7 +7,7 @@ from edsteva.io import SyntheticData from edsteva.models.rectangle_function import RectangleFunction from edsteva.models.step_function import StepFunction -from edsteva.probes import NoteProbe, VisitProbe +from edsteva.probes import BiologyProbe, NoteProbe, VisitProbe from edsteva.utils.loss_functions import l1_loss pytestmark = pytest.mark.filterwarnings("ignore") @@ -193,3 +193,47 @@ def test_step_function_note(): (prediction["t_0"] <= prediction["t_0_max"]) & (prediction["t_0_min"] <= prediction["t_0"]) ).all() + + +def test_step_function_biology(): + biology = BiologyProbe(completeness_predictor="per_visit_default") + biology.compute( + data=data_step, + start_date=data_step.t_min, + end_date=data_step.t_max, + stay_types={"ALL": ".*", "HC": "hospitalisés", "Urg": "urgences"}, + care_site_ids=["1", "2"], + care_site_short_names=["Hôpital-1", "Hôpital-2"], + concepts_sets=None, + concept_codes=True, + length_of_stays=None, + ) + + biology_model = StepFunction() + biology_model.fit( + probe=biology, + start_date=data_step.t_min, + end_date=data_step.t_max, + ) + + simulation = data_step.measurement.merge( + data_step.visit_occurrence, on="visit_occurrence_id" + ) + simulation["ANABIO_concept_code"] = simulation["measurement_source_concept_id"].str[ + 5:10 + ] + simulation = simulation.groupby( + ["ANABIO_concept_code", "care_site_id"], as_index=False + )[["t_0"]].min() + simulation.t_0 = pd.to_datetime(simulation.t_0, unit="s") + + df = biology_model.estimates.merge( + simulation, + on=["ANABIO_concept_code", "care_site_id"], + suffixes=("_model", "_simulation"), + ) + + assert ( + (df.t_0_model <= df.t_0_simulation + pd.DateOffset(months=2)) + & (df.t_0_model > df.t_0_simulation - pd.DateOffset(months=2)) + ).all() From 8706df87ccccd1ca47c03ebcd3a7c64b60b57044 Mon Sep 17 00:00:00 2001 From: svittoz Date: Wed, 13 Sep 2023 15:12:50 +0000 Subject: [PATCH 121/127] clean code --- tests/test_model.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/test_model.py b/tests/test_model.py index 53b8746b..b22d605e 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -219,21 +219,30 @@ def test_step_function_biology(): simulation = data_step.measurement.merge( data_step.visit_occurrence, on="visit_occurrence_id" ) - simulation["ANABIO_concept_code"] = simulation["measurement_source_concept_id"].str[ - 5:10 - ] + simulation["ANABIO_concept_code"] = ( + simulation["measurement_source_concept_id"] + .str.extract(r"\b[A-Z]\d{4}\b") + .str[0] + ) + simulation = simulation.groupby( ["ANABIO_concept_code", "care_site_id"], as_index=False )[["t_0"]].min() simulation.t_0 = pd.to_datetime(simulation.t_0, unit="s") - df = biology_model.estimates.merge( + biology_model = biology_model.estimates.merge( simulation, on=["ANABIO_concept_code", "care_site_id"], suffixes=("_model", "_simulation"), ) assert ( - (df.t_0_model <= df.t_0_simulation + pd.DateOffset(months=2)) - & (df.t_0_model > df.t_0_simulation - pd.DateOffset(months=2)) + ( + biology_model.t_0_model + <= biology_model.t_0_simulation + pd.DateOffset(months=2) + ) + & ( + biology_model.t_0_model + > biology_model.t_0_simulation - pd.DateOffset(months=2) + ) ).all() From 0f2ece09ebba89077545354a38e1982ff8cba934 Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Wed, 13 Sep 2023 17:26:23 +0200 Subject: [PATCH 122/127] adding docstring --- edsteva/io/synthetic/utils.py | 77 +++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index 05d4980d..dedfafd3 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -11,6 +11,20 @@ def generate_events_before_t0( increase_time: int, increase_ratio: float, ): + """Generate events before t0 - increase_time / 2 + + Args: + generator (np.random.Generator): + t_start (int): Starting date in seconds + t_end (int): Ending date in seconds + n_events (int): Number of events to generate + t0 (int): Events deployment date + increase_time (int): Events deployment interval in seconds + increase_ratio (float): Ratio between events before t0 and events after t0 + + Returns: + pd.Series: A series of datetime values representing generated events + """ t0_before = t0 - increase_time / 2 n_before = int( (t0_before - t_start) @@ -33,6 +47,21 @@ def generate_events_after_t0( increase_time: int, increase_ratio: float, ): + """Generate events after t0 - increase_time / 2 + + Args: + generator (np.random.Generator): + t_start (int): Starting date in seconds + t_end (int): Ending date in seconds + n_events (int): Number of events to generate + t0 (int): Events deployment date + increase_time (int): Events deployment interval in seconds + increase_ratio (float): Ratio between events before t0 and events after t0 + + Returns: + pd.Series: A series of datetime values representing generated events + """ + t0_after = t0 + increase_time / 2 n_after = int( increase_ratio @@ -56,6 +85,23 @@ def generate_events_around_t0( increase_time: int, increase_ratio: float, ): + + """Generate events between t0 - increase_time / 2 and t0 + increase_time / 2 + + Args: + generator (np.random.Generator): + t_start (int): Starting date in seconds + t_end (int): Ending date in seconds + n_events (int): Number of events to generate + t0 (int): Events deployment date + increase_time (int): Events deployment interval in seconds + increase_ratio (float): Ratio between events before t0 and events after t0 + + Returns: + pd.Series: A series of datetime values representing generated events + """ + + t0_before = t0 - increase_time / 2 t0_after = t0 + increase_time / 2 n_middle = int( @@ -84,6 +130,21 @@ def generate_events_around_t1( increase_time: int, increase_ratio: float, ): + """Generate events between t1 - increase_time / 2 and t1 + increase_time / 2 + + Args: + generator (np.random.Generator): + t_start (int): Starting date in seconds + t_end (int): Ending date in seconds + n_events (int): Number of events to generate + t1 (int): Events deployment date + increase_time (int): Events deployment interval in seconds + increase_ratio (float): Ratio between events before t1 and events after t1 + + Returns: + pd.Series: A series of datetime values representing generated events + """ + t1_before = t1 - increase_time / 2 t1_after = t1 + increase_time / 2 n_middle = int( @@ -112,6 +173,22 @@ def generate_events_after_t1( increase_time: int, increase_ratio: float, ): + + """Generate events after t1 + increase_time / 2 + + Args: + generator (np.random.Generator): + t_start (int): Starting date in seconds + t_end (int): Ending date in seconds + n_events (int): Number of events to generate + t1 (int): Events deployment date + increase_time (int): Events deployment interval in seconds + increase_ratio (float): Ratio between events before t1 and events after t1 + + Returns: + pd.Series: A series of datetime values representing generated events + """ + t1_after = t1 + increase_time / 2 n_after = int( (t_end - t1_after) * n_events / ((t1 - t_start) * increase_ratio + (t_end - t1)) From 6f1b563daaa4ca4c4b300052ec2f2b9f9825d05a Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Wed, 13 Sep 2023 17:28:00 +0200 Subject: [PATCH 123/127] adding docstring --- edsteva/io/synthetic/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index dedfafd3..43746b49 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -47,7 +47,7 @@ def generate_events_after_t0( increase_time: int, increase_ratio: float, ): - """Generate events after t0 - increase_time / 2 + """Generate events after t0 + increase_time / 2 Args: generator (np.random.Generator): From df6496ed69336204c46764435eabda4011a10a1b Mon Sep 17 00:00:00 2001 From: svittoz Date: Wed, 13 Sep 2023 15:31:36 +0000 Subject: [PATCH 124/127] pre-commit --- edsteva/io/synthetic/utils.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index 43746b49..411c7191 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -14,14 +14,14 @@ def generate_events_before_t0( """Generate events before t0 - increase_time / 2 Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds + generator (np.random.Generator): + t_start (int): Starting date in seconds t_end (int): Ending date in seconds n_events (int): Number of events to generate t0 (int): Events deployment date increase_time (int): Events deployment interval in seconds increase_ratio (float): Ratio between events before t0 and events after t0 - + Returns: pd.Series: A series of datetime values representing generated events """ @@ -50,14 +50,14 @@ def generate_events_after_t0( """Generate events after t0 + increase_time / 2 Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds + generator (np.random.Generator): + t_start (int): Starting date in seconds t_end (int): Ending date in seconds n_events (int): Number of events to generate t0 (int): Events deployment date increase_time (int): Events deployment interval in seconds increase_ratio (float): Ratio between events before t0 and events after t0 - + Returns: pd.Series: A series of datetime values representing generated events """ @@ -85,23 +85,21 @@ def generate_events_around_t0( increase_time: int, increase_ratio: float, ): - """Generate events between t0 - increase_time / 2 and t0 + increase_time / 2 Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds + generator (np.random.Generator): + t_start (int): Starting date in seconds t_end (int): Ending date in seconds n_events (int): Number of events to generate t0 (int): Events deployment date increase_time (int): Events deployment interval in seconds increase_ratio (float): Ratio between events before t0 and events after t0 - + Returns: pd.Series: A series of datetime values representing generated events """ - t0_before = t0 - increase_time / 2 t0_after = t0 + increase_time / 2 n_middle = int( @@ -133,14 +131,14 @@ def generate_events_around_t1( """Generate events between t1 - increase_time / 2 and t1 + increase_time / 2 Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds + generator (np.random.Generator): + t_start (int): Starting date in seconds t_end (int): Ending date in seconds n_events (int): Number of events to generate t1 (int): Events deployment date increase_time (int): Events deployment interval in seconds increase_ratio (float): Ratio between events before t1 and events after t1 - + Returns: pd.Series: A series of datetime values representing generated events """ @@ -173,18 +171,17 @@ def generate_events_after_t1( increase_time: int, increase_ratio: float, ): - """Generate events after t1 + increase_time / 2 Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds + generator (np.random.Generator): + t_start (int): Starting date in seconds t_end (int): Ending date in seconds n_events (int): Number of events to generate t1 (int): Events deployment date increase_time (int): Events deployment interval in seconds increase_ratio (float): Ratio between events before t1 and events after t1 - + Returns: pd.Series: A series of datetime values representing generated events """ From ab7269d5a7838885e1e6f7aa2b63198171760ab5 Mon Sep 17 00:00:00 2001 From: svittoz Date: Wed, 13 Sep 2023 15:57:49 +0000 Subject: [PATCH 125/127] small fix --- tests/test_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_model.py b/tests/test_model.py index b22d605e..88cf3481 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -221,7 +221,7 @@ def test_step_function_biology(): ) simulation["ANABIO_concept_code"] = ( simulation["measurement_source_concept_id"] - .str.extract(r"\b[A-Z]\d{4}\b") + .str.findall(r"\b[A-Z]\d{4}\b") .str[0] ) From 677da3e470d74b398a8319d0cb25a1611e27ba3c Mon Sep 17 00:00:00 2001 From: VITTOZ Simon Date: Thu, 14 Sep 2023 10:37:46 +0200 Subject: [PATCH 126/127] doc --- edsteva/io/synthetic/utils.py | 161 ++++++++++++++++++++++------------ 1 file changed, 104 insertions(+), 57 deletions(-) diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index 411c7191..6539599f 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -11,20 +11,31 @@ def generate_events_before_t0( increase_time: int, increase_ratio: float, ): + """Generate events before t0 - increase_time / 2 - Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds - t_end (int): Ending date in seconds - n_events (int): Number of events to generate - t0 (int): Events deployment date - increase_time (int): Events deployment interval in seconds - increase_ratio (float): Ratio between events before t0 and events after t0 - - Returns: - pd.Series: A series of datetime values representing generated events + Parameters + ---------- + generator : np.random.Generator + t_start : int + Starting date in seconds + t_end : int + Ending date in seconds + n_events : int + Number of events to generate + t0 : int + Events deployment date + increase_time : int + Events deployment interval in seconds + increase_ratio : float + Ratio between events before t0 and events after t0 + + Returns + ------- + pd.Series + A series of datetime values representing generated events """ + t0_before = t0 - increase_time / 2 n_before = int( (t0_before - t_start) @@ -47,21 +58,32 @@ def generate_events_after_t0( increase_time: int, increase_ratio: float, ): + """Generate events after t0 + increase_time / 2 - Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds - t_end (int): Ending date in seconds - n_events (int): Number of events to generate - t0 (int): Events deployment date - increase_time (int): Events deployment interval in seconds - increase_ratio (float): Ratio between events before t0 and events after t0 - - Returns: - pd.Series: A series of datetime values representing generated events + Parameters + ---------- + generator : np.random.Generator + t_start : int + Starting date in seconds + t_end : int + Ending date in seconds + n_events : int + Number of events to generate + t0 : int + Events deployment date + increase_time : int + Events deployment interval in seconds + increase_ratio : float + Ratio between events before t0 and events after t0 + + Returns + ------- + pd.Series + A series of datetime values representing generated events """ + t0_after = t0 + increase_time / 2 n_after = int( increase_ratio @@ -87,19 +109,27 @@ def generate_events_around_t0( ): """Generate events between t0 - increase_time / 2 and t0 + increase_time / 2 - Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds - t_end (int): Ending date in seconds - n_events (int): Number of events to generate - t0 (int): Events deployment date - increase_time (int): Events deployment interval in seconds - increase_ratio (float): Ratio between events before t0 and events after t0 - - Returns: - pd.Series: A series of datetime values representing generated events + Parameters + ---------- + generator : np.random.Generator + t_start : int + Starting date in seconds + t_end : int + Ending date in seconds + n_events : int + Number of events to generate + t0 : int + Events deployment date + increase_time : int + Events deployment interval in seconds + increase_ratio : float + Ratio between events before t0 and events after t0 + + Returns + ------- + pd.Series + A series of datetime values representing generated events """ - t0_before = t0 - increase_time / 2 t0_after = t0 + increase_time / 2 n_middle = int( @@ -130,19 +160,27 @@ def generate_events_around_t1( ): """Generate events between t1 - increase_time / 2 and t1 + increase_time / 2 - Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds - t_end (int): Ending date in seconds - n_events (int): Number of events to generate - t1 (int): Events deployment date - increase_time (int): Events deployment interval in seconds - increase_ratio (float): Ratio between events before t1 and events after t1 - - Returns: - pd.Series: A series of datetime values representing generated events + Parameters + ---------- + generator : np.random.Generator + t_start : int + Starting date in seconds + t_end : int + Ending date in seconds + n_events : int + Number of events to generate + t1 : int + End of events deployment date + increase_time : int + End of events deployment interval in seconds + increase_ratio : float + Ratio between events before t1 and events after t1 + + Returns + ------- + pd.Series + A series of datetime values representing generated events """ - t1_before = t1 - increase_time / 2 t1_after = t1 + increase_time / 2 n_middle = int( @@ -173,17 +211,26 @@ def generate_events_after_t1( ): """Generate events after t1 + increase_time / 2 - Args: - generator (np.random.Generator): - t_start (int): Starting date in seconds - t_end (int): Ending date in seconds - n_events (int): Number of events to generate - t1 (int): Events deployment date - increase_time (int): Events deployment interval in seconds - increase_ratio (float): Ratio between events before t1 and events after t1 - - Returns: - pd.Series: A series of datetime values representing generated events + Parameters + ---------- + generator : np.random.Generator + t_start : int + Starting date in seconds + t_end : int + Ending date in seconds + n_events : int + Number of events to generate + t1 : int + End of events deployment date + increase_time : int + End of events deployment interval in seconds + increase_ratio : float + Ratio between events before t1 and events after t1 + + Returns + ------- + pd.Series + A series of datetime values representing generated events """ t1_after = t1 + increase_time / 2 From fb1ae998c61d9cde3a6a686cc68b38490e62c164 Mon Sep 17 00:00:00 2001 From: svittoz Date: Thu, 14 Sep 2023 09:40:22 +0000 Subject: [PATCH 127/127] pre-commit --- edsteva/io/synthetic/utils.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/edsteva/io/synthetic/utils.py b/edsteva/io/synthetic/utils.py index 6539599f..7e70d052 100644 --- a/edsteva/io/synthetic/utils.py +++ b/edsteva/io/synthetic/utils.py @@ -11,7 +11,6 @@ def generate_events_before_t0( increase_time: int, increase_ratio: float, ): - """Generate events before t0 - increase_time / 2 Parameters @@ -58,7 +57,6 @@ def generate_events_after_t0( increase_time: int, increase_ratio: float, ): - """Generate events after t0 + increase_time / 2 Parameters @@ -83,7 +81,6 @@ def generate_events_after_t0( A series of datetime values representing generated events """ - t0_after = t0 + increase_time / 2 n_after = int( increase_ratio